Re-organize to handle disco

This commit is contained in:
Chteufleur 2016-09-02 21:56:13 +02:00
parent f9d8cea66f
commit d64fd5cb16
2 changed files with 45 additions and 19 deletions

View File

@ -18,33 +18,57 @@ const (
var ( var (
ChanAuthCode = make(chan string) ChanAuthCode = make(chan string)
identity = &xmpp.DiscoIdentity{Category: "gateway", Type: "steam", Name: "Steam Gateway"}
) )
func execDiscoCommand(iq *xmpp.Iq) { func execDiscoCommand(iq *xmpp.Iq) {
log.Printf("%sDiscovery item iq received", LogInfo) log.Printf("%sDiscovery item iq received", LogInfo)
reply := iq.Response(xmpp.IQTypeResult)
discoItem := &xmpp.DiscoItems{Node: xmpp.NodeAdHocCommand}
jidBare := strings.SplitN(iq.From, "/", 2)[0] discoInfo := &xmpp.DiscoItems{}
dbUser := database.GetLine(jidBare) iq.PayloadDecode(discoInfo)
if discoInfo.Node == "" {
// Disco feature
execDisco(iq)
return
} else if discoInfo.Node == xmpp.NodeAdHocCommand {
// Disco Ad-Hoc
reply := iq.Response(xmpp.IQTypeResult)
discoItem := &xmpp.DiscoItems{Node: xmpp.NodeAdHocCommand}
// Add available commands jidBare := strings.SplitN(iq.From, "/", 2)[0]
if dbUser == nil { dbUser := database.GetLine(jidBare)
discoI := &xmpp.DiscoItem{JID: jid.Domain, Node: CommandGetIdentifiants, Name: "Steam registration"}
discoItem.Item = append(discoItem.Item, *discoI) // Add available commands
} else { if dbUser == nil {
// Add only if user is registered discoI := &xmpp.DiscoItem{JID: jid.Domain, Node: CommandGetIdentifiants, Name: "Steam registration"}
discoI := &xmpp.DiscoItem{JID: jid.Domain, Node: CommandAuthcode, Name: "Add Steam Auth Code"} discoItem.Item = append(discoItem.Item, *discoI)
discoItem.Item = append(discoItem.Item, *discoI) } else {
discoI = &xmpp.DiscoItem{JID: jid.Domain, Node: CommandDisconnectSteam, Name: "Force Steam deconnexion"} // Add only if user is registered
discoItem.Item = append(discoItem.Item, *discoI) discoI := &xmpp.DiscoItem{JID: jid.Domain, Node: CommandAuthcode, Name: "Add Steam Auth Code"}
discoI = &xmpp.DiscoItem{JID: jid.Domain, Node: CommandRemoveRegistration, Name: "Remove registration"} discoItem.Item = append(discoItem.Item, *discoI)
discoItem.Item = append(discoItem.Item, *discoI) discoI = &xmpp.DiscoItem{JID: jid.Domain, Node: CommandDisconnectSteam, Name: "Force Steam deconnexion"}
discoI = &xmpp.DiscoItem{JID: jid.Domain, Node: CommandToggleDebugMode, Name: "Toggle debug mode"} discoItem.Item = append(discoItem.Item, *discoI)
discoItem.Item = append(discoItem.Item, *discoI) discoI = &xmpp.DiscoItem{JID: jid.Domain, Node: CommandRemoveRegistration, Name: "Remove registration"}
discoItem.Item = append(discoItem.Item, *discoI)
discoI = &xmpp.DiscoItem{JID: jid.Domain, Node: CommandToggleDebugMode, Name: "Toggle debug mode"}
discoItem.Item = append(discoItem.Item, *discoI)
}
reply.PayloadEncode(discoItem)
comp.Out <- reply
} }
}
reply.PayloadEncode(discoItem) func execDisco(iq *xmpp.Iq) {
log.Printf("%sDisco Feature", LogInfo)
reply := iq.Response(xmpp.IQTypeResult)
discoInfo := &xmpp.DiscoInfo{}
discoInfo.Identity = append(discoInfo.Identity, *identity)
discoInfo.Feature = append(discoInfo.Feature, xmpp.DiscoFeature{Var: xmpp.NSJabberClient})
discoInfo.Feature = append(discoInfo.Feature, xmpp.DiscoFeature{Var: xmpp.NodeAdHocCommand})
reply.PayloadEncode(discoInfo)
comp.Out <- reply comp.Out <- reply
} }

View File

@ -89,6 +89,8 @@ func mainXMPP() {
} else { } else {
sendNotSupportedFeature(v) sendNotSupportedFeature(v)
} }
case xmpp.NSDiscoInfo:
execDisco(v)
case xmpp.NodeAdHocCommand: case xmpp.NodeAdHocCommand:
if jidBare == jid.Domain { if jidBare == jid.Domain {