forked from chteufleur/go-xmpp4steam
Add Ad-Hoc command to get Steam Auth Code
This commit is contained in:
parent
ce4b966c9c
commit
387a0b7e5a
15
main.go
15
main.go
|
|
@ -15,7 +15,7 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
Version = "go-xmpp4steam v0.1.4.1"
|
||||
Version = "go-xmpp4steam v0.1.5"
|
||||
configurationFilePath = "xmpp4steam.cfg"
|
||||
)
|
||||
|
||||
|
|
@ -40,7 +40,7 @@ func init() {
|
|||
// Steam config
|
||||
steam.Username = mapConfig["steam_login"]
|
||||
steam.Password = mapConfig["steam_password"]
|
||||
steam.AuthCode = mapConfig["steam_auth_code"]
|
||||
steam.AuthCode = ""
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
|
@ -49,6 +49,7 @@ func main() {
|
|||
|
||||
go gatewayXmppSteamPresence()
|
||||
go gatewayXmppSteamMessage()
|
||||
go gatewayXmppSteamAuthCode()
|
||||
|
||||
go gatewaySteamXmppMessage()
|
||||
go gatewaySteamXmppPresence()
|
||||
|
|
@ -125,6 +126,16 @@ func gatewayXmppSteamMessage() {
|
|||
}
|
||||
}
|
||||
|
||||
func gatewayXmppSteamAuthCode() {
|
||||
for {
|
||||
authCode := <- xmpp.ChanAuthCode
|
||||
steam.AuthCode = authCode
|
||||
steam.Disconnect()
|
||||
time.Sleep(2 * time.Second)
|
||||
go steam.Run()
|
||||
}
|
||||
}
|
||||
|
||||
// /XMPP -> Steam gateways
|
||||
|
||||
// Steam -> XMPP gateways
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{"Addresses":[{"IP":"162.254.196.42","Port":27021},{"IP":"162.254.196.42","Port":27020},{"IP":"162.254.196.40","Port":27020},{"IP":"162.254.196.43","Port":27020},{"IP":"162.254.196.41","Port":27021},{"IP":"162.254.196.42","Port":27019},{"IP":"162.254.196.42","Port":27018},{"IP":"162.254.196.40","Port":27019},{"IP":"162.254.196.40","Port":27021},{"IP":"162.254.196.43","Port":27017},{"IP":"162.254.197.41","Port":27019},{"IP":"162.254.196.41","Port":27018},{"IP":"162.254.196.41","Port":27020},{"IP":"162.254.196.40","Port":27018},{"IP":"162.254.196.43","Port":27019},{"IP":"162.254.196.43","Port":27021},{"IP":"146.66.152.10","Port":27017},{"IP":"162.254.197.41","Port":27021},{"IP":"162.254.197.41","Port":27020},{"IP":"162.254.197.42","Port":27019},{"IP":"162.254.197.42","Port":27018},{"IP":"146.66.152.10","Port":27020},{"IP":"146.66.152.11","Port":27018},{"IP":"146.66.152.10","Port":27019},{"IP":"162.254.196.41","Port":27019},{"IP":"162.254.196.42","Port":27017},{"IP":"162.254.196.40","Port":27017},{"IP":"162.254.197.42","Port":27020},{"IP":"162.254.197.40","Port":27018},{"IP":"162.254.197.40","Port":27021},{"IP":"146.66.152.11","Port":27017},{"IP":"146.66.152.11","Port":27020},{"IP":"162.254.196.41","Port":27017},{"IP":"162.254.196.43","Port":27018},{"IP":"162.254.197.40","Port":27017},{"IP":"162.254.197.40","Port":27019},{"IP":"162.254.197.41","Port":27017},{"IP":"146.66.152.11","Port":27019},{"IP":"146.66.152.10","Port":27018},{"IP":"162.254.197.40","Port":27020},{"IP":"162.254.197.42","Port":27017},{"IP":"162.254.197.41","Port":27018},{"IP":"162.254.197.42","Port":27021},{"IP":"185.25.180.14","Port":27017},{"IP":"155.133.242.9","Port":27020},{"IP":"155.133.242.8","Port":27017},{"IP":"185.25.180.14","Port":27020},{"IP":"185.25.180.14","Port":27018},{"IP":"155.133.242.9","Port":27017},{"IP":"155.133.242.8","Port":27020},{"IP":"185.25.180.15","Port":27017},{"IP":"155.133.242.8","Port":27019},{"IP":"155.133.242.9","Port":27018},{"IP":"146.66.155.8","Port":27020},{"IP":"146.66.155.8","Port":27018},{"IP":"146.66.155.8","Port":27019},{"IP":"155.133.242.8","Port":27018},{"IP":"155.133.242.9","Port":27019},{"IP":"185.25.180.15","Port":27019},{"IP":"185.25.180.15","Port":27018},{"IP":"185.25.180.15","Port":27020},{"IP":"185.25.182.10","Port":27018},{"IP":"185.25.182.10","Port":27020},{"IP":"185.25.180.14","Port":27019},{"IP":"185.25.182.10","Port":27017},{"IP":"146.66.155.8","Port":27017},{"IP":"185.25.182.10","Port":27019},{"IP":"208.78.164.13","Port":27017},{"IP":"208.78.164.14","Port":27019},{"IP":"208.78.164.9","Port":27018},{"IP":"208.78.164.9","Port":27017},{"IP":"208.78.164.14","Port":27018},{"IP":"208.78.164.10","Port":27019},{"IP":"208.78.164.11","Port":27019},{"IP":"208.78.164.10","Port":27017},{"IP":"208.78.164.12","Port":27019},{"IP":"208.78.164.11","Port":27018},{"IP":"208.78.164.12","Port":27018},{"IP":"208.78.164.10","Port":27018},{"IP":"208.78.164.12","Port":27017}]}
|
||||
{"Addresses":[{"IP":"162.254.197.41","Port":27020},{"IP":"146.66.152.10","Port":27017},{"IP":"146.66.152.11","Port":27020},{"IP":"146.66.152.11","Port":27019},{"IP":"146.66.152.10","Port":27018},{"IP":"162.254.197.40","Port":27018},{"IP":"146.66.152.10","Port":27019},{"IP":"146.66.152.11","Port":27018},{"IP":"146.66.152.11","Port":27017},{"IP":"146.66.152.10","Port":27020},{"IP":"162.254.197.41","Port":27019},{"IP":"162.254.197.41","Port":27017},{"IP":"162.254.197.40","Port":27019},{"IP":"162.254.197.42","Port":27021},{"IP":"162.254.197.42","Port":27017},{"IP":"162.254.197.42","Port":27019},{"IP":"162.254.197.41","Port":27021},{"IP":"162.254.197.42","Port":27018},{"IP":"162.254.197.40","Port":27021},{"IP":"162.254.197.40","Port":27017},{"IP":"162.254.197.41","Port":27018},{"IP":"162.254.197.42","Port":27020},{"IP":"162.254.197.40","Port":27020},{"IP":"162.254.196.43","Port":27017},{"IP":"162.254.196.43","Port":27020},{"IP":"162.254.196.42","Port":27020},{"IP":"162.254.196.40","Port":27021},{"IP":"162.254.196.42","Port":27021},{"IP":"162.254.196.40","Port":27020},{"IP":"162.254.196.40","Port":27019},{"IP":"162.254.196.43","Port":27018},{"IP":"162.254.196.41","Port":27020},{"IP":"162.254.196.42","Port":27017},{"IP":"185.25.182.10","Port":27020},{"IP":"162.254.196.41","Port":27017},{"IP":"162.254.196.42","Port":27019},{"IP":"162.254.196.40","Port":27018},{"IP":"162.254.196.43","Port":27019},{"IP":"162.254.196.41","Port":27019},{"IP":"162.254.196.42","Port":27018},{"IP":"162.254.196.41","Port":27021},{"IP":"162.254.196.40","Port":27017},{"IP":"146.66.155.8","Port":27017},{"IP":"185.25.182.10","Port":27019},{"IP":"155.133.242.8","Port":27019},{"IP":"185.25.182.10","Port":27018},{"IP":"146.66.155.8","Port":27018},{"IP":"185.25.180.15","Port":27019},{"IP":"155.133.242.8","Port":27020},{"IP":"185.25.180.15","Port":27018},{"IP":"155.133.242.9","Port":27020},{"IP":"162.254.196.41","Port":27018},{"IP":"146.66.155.8","Port":27019},{"IP":"155.133.242.8","Port":27018},{"IP":"146.66.155.8","Port":27020},{"IP":"185.25.182.10","Port":27017},{"IP":"155.133.242.8","Port":27017},{"IP":"185.25.180.15","Port":27017},{"IP":"185.25.180.15","Port":27020},{"IP":"155.133.242.9","Port":27017},{"IP":"185.25.180.14","Port":27020},{"IP":"155.133.242.9","Port":27018},{"IP":"162.254.196.43","Port":27021},{"IP":"155.133.242.9","Port":27019},{"IP":"185.25.180.14","Port":27017},{"IP":"185.25.180.14","Port":27018},{"IP":"185.25.180.14","Port":27019},{"IP":"208.78.164.11","Port":27017},{"IP":"208.78.164.11","Port":27019},{"IP":"208.78.164.9","Port":27019},{"IP":"208.78.164.12","Port":27019},{"IP":"208.78.164.9","Port":27017},{"IP":"208.78.164.12","Port":27018},{"IP":"208.78.164.13","Port":27019},{"IP":"208.78.164.13","Port":27018},{"IP":"208.78.164.10","Port":27017},{"IP":"208.78.164.14","Port":27018},{"IP":"208.78.164.14","Port":27019},{"IP":"208.78.164.14","Port":27017},{"IP":"208.78.164.12","Port":27017}]}
|
||||
|
|
@ -116,7 +116,7 @@ func setLoginInfos() {
|
|||
log.Printf("%sAuthentification by SentryFileHash", LogDebug)
|
||||
} else if AuthCode != "" {
|
||||
myLoginInfo.AuthCode = AuthCode
|
||||
log.Printf("%sAuthentification by AuthCode", LogDebug)
|
||||
log.Printf("%sAuthentification by AuthCode (%s)", LogDebug, AuthCode)
|
||||
} else {
|
||||
log.Printf("%sFirst authentification", LogDebug)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,95 @@
|
|||
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
|
||||
}
|
||||
}
|
||||
|
|
@ -94,6 +94,15 @@ func mainXMPP() {
|
|||
ChanMessage <- steamID
|
||||
ChanMessage <- v.Body
|
||||
|
||||
case *xmpp.Iq:
|
||||
switch v.PayloadName().Space {
|
||||
case xmpp.NsDiscoItems:
|
||||
execDiscoCommand(v)
|
||||
|
||||
case xmpp.NodeAdHocCommand:
|
||||
execCommandAdHoc(v)
|
||||
}
|
||||
|
||||
default:
|
||||
log.Printf("%srecv: %v", LogDebug, x)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,5 +9,3 @@ xmpp_debug=true
|
|||
# Steam informations
|
||||
steam_login=toto
|
||||
steam_password=toto_password123$
|
||||
# steam_auth_code must be blank the first time. Then Valve will send the auth code to give here.
|
||||
steam_auth_code=CXD7J
|
||||
|
|
|
|||
Loading…
Reference in New Issue