forked from chteufleur/go-xmpp4steam
93 lines
2.8 KiB
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
|
|
}
|
|
}
|