1
0
Fork 0
go-xmpp4steam/xmpp/commands.go

93 lines
2.8 KiB
Go

package xmpp
import (
"git.kingpenguin.tk/chteufleur/go-xmpp.git"
"log"
)
const (
CommandAuthcode = "steamAuthCodeCommand"
)
var (
ChanAuthCode = make(chan string)
)
func execDiscoCommand(iq *xmpp.Iq) {
log.Printf("%sDiscovery item iq received", LogInfo)
reply := iq.Response(xmpp.IqTypeResult)
discoItem := &xmpp.DiscoItems{Node: xmpp.NodeAdHocCommand}
// Add available commands
discoI := &xmpp.DiscoItem{JID: jid.Domain, Node: CommandAuthcode, Name: "Add Auth Code"}
discoItem.Item = append(discoItem.Item, *discoI)
reply.PayloadEncode(discoItem)
comp.Out <- reply
}
func execCommandAdHoc(iq *xmpp.Iq) {
adHoc := &xmpp.AdHocCommand{}
iq.PayloadDecode(adHoc)
if adHoc.SessionId == "" && adHoc.Action == xmpp.ActionAdHocExecute {
// First step in the command
log.Printf("%sAd-Hoc command (Node : %s). First step.", LogInfo, adHoc.Node)
reply := iq.Response(xmpp.IqTypeResult)
cmd := &xmpp.AdHocCommand{Node: adHoc.Node, Status: xmpp.StatusAdHocExecute, SessionId: xmpp.SessionId()}
if adHoc.Node == CommandAuthcode {
// Command Auth Code
cmdXForm := &xmpp.AdHocXForm{Type: xmpp.TypeAdHocForm, Title: "Steam Auth Code", Instructions: "Please provide the auth code that Steam sended to you."}
field := &xmpp.AdHocField{Var: "code", Label: "Auth Code", Type: xmpp.TypeAdHocFieldTextSingle}
cmdXForm.Fields = append(cmdXForm.Fields, *field)
cmd.XForm = *cmdXForm
}
reply.PayloadEncode(cmd)
comp.Out <- reply
} else if adHoc.Action == xmpp.ActionAdHocExecute {
// Last step in the command
log.Printf("%sAd-Hoc command (Node : %s). Last step.", LogInfo, adHoc.Node)
reply := iq.Response(xmpp.IqTypeResult)
cmd := &xmpp.AdHocCommand{Node: adHoc.Node, Status: xmpp.StatusAdHocCompleted, SessionId: adHoc.SessionId}
if adHoc.Node == CommandAuthcode && adHoc.XForm.Type == xmpp.TypeAdHocSubmit {
cmdXForm := &xmpp.AdHocXForm{Type: xmpp.TypeAdHocResult, Title: "Steam Auth Code "}
cmd.XForm = *cmdXForm
note := &xmpp.AdHocNote{Type: xmpp.TypeAdHocNoteInfo}
// Command Auth Code
authCode := ""
fields := adHoc.XForm.Fields
for _, field := range fields {
if field.Var == "code" {
authCode = field.Value
break
}
}
if authCode != "" {
// Succeded
ChanAuthCode <- authCode
note.Value = "Commande effectuée avec succes !"
} else {
// Failed
note.Value = "Une erreur c'est produite à l'exécution de la commande…"
}
cmd.Note = *note
}
reply.PayloadEncode(cmd)
comp.Out <- reply
} else if adHoc.Action == xmpp.ActionAdHocCancel {
// command canceled
log.Printf("%sAd-Hoc command (Node : %s). Command canceled.", LogInfo, adHoc.Node)
reply := iq.Response(xmpp.IqTypeResult)
cmd := &xmpp.AdHocCommand{Node: adHoc.Node, Status: xmpp.StatusAdHocCanceled, SessionId: adHoc.SessionId}
reply.PayloadEncode(cmd)
comp.Out <- reply
}
}