mirror of
https://dev.narayana.im/narayana/telegabber.git
synced 2026-08-04 19:57:07 +00:00
110 lines
2.7 KiB
Go
110 lines
2.7 KiB
Go
package xmpp
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"dev.narayana.im/narayana/telegabber/telegram"
|
|
"dev.narayana.im/narayana/telegabber/xmpp/gateway"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
"gosrc.io/xmpp"
|
|
"gosrc.io/xmpp/stanza"
|
|
)
|
|
|
|
func setCommandPayloadError(payload *stanza.Command, err string) {
|
|
note := stanza.Note{
|
|
Text: err,
|
|
Type: stanza.CommandNoteTypeErr,
|
|
}
|
|
payload.Status = stanza.CommandStatusCompleted
|
|
payload.CommandElements = append(payload.CommandElements, ¬e)
|
|
}
|
|
|
|
func loginWizardPayload(bare string, requestForm *stanza.Form, resource string) (payload *stanza.Command, cancelSend bool, returnSession *telegram.Client) {
|
|
payload = &stanza.Command{
|
|
SessionId: "loginwizard",
|
|
Node: "loginwizard",
|
|
}
|
|
|
|
session, ok := sessions[bare]
|
|
if ok {
|
|
returnSession = session
|
|
|
|
if requestForm == nil {
|
|
session.StartLoginWizard(false)
|
|
cancelSend = true
|
|
} else {
|
|
if len(requestForm.Fields) != 1 {
|
|
setCommandPayloadError(payload, "Hey, don't tinker with the form!")
|
|
return
|
|
}
|
|
field := requestForm.Fields[0]
|
|
if field != nil {
|
|
if len(field.ValuesList) < 1 {
|
|
setCommandPayloadError(payload, "No value")
|
|
return
|
|
}
|
|
switch field.Var {
|
|
case "login", "code", "password":
|
|
default:
|
|
setCommandPayloadError(payload, "Unknown field")
|
|
return
|
|
}
|
|
|
|
session.StartLoginWizard(true)
|
|
response, success := session.ProcessTransportCommand(fmt.Sprintf("/%v %v", field.Var, field.ValuesList[0]), resource)
|
|
if !success {
|
|
setCommandPayloadError(payload, response)
|
|
session.StopLoginWizard()
|
|
return
|
|
}
|
|
|
|
cancelSend = true
|
|
}
|
|
}
|
|
} else {
|
|
setCommandPayloadError(payload, fmt.Sprintf("Session is not initialized, add the transport (%v) to contacts first", gateway.Jid.Bare()))
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func sendLoginWizardResponse(component *xmpp.Component, answer *stanza.IQ, session *telegram.Client) {
|
|
payload := &stanza.Command{
|
|
SessionId: "loginwizard",
|
|
Node: "loginwizard",
|
|
}
|
|
|
|
nextStage := "login"
|
|
if session != nil {
|
|
nextStage = session.GetLoginWizardNextStage()
|
|
}
|
|
log.Debugf("nextStage: %v", nextStage)
|
|
|
|
if nextStage == "cancel" {
|
|
setCommandPayloadError(payload, "Cancelled")
|
|
session.StopLoginWizard()
|
|
} else if nextStage == "success" {
|
|
payload.Status = stanza.CommandStatusCompleted
|
|
session.StopLoginWizard()
|
|
} else {
|
|
required := ""
|
|
form := stanza.Form{
|
|
Type: stanza.FormTypeForm,
|
|
Title: "Login Wizard",
|
|
Fields: []*stanza.Field{
|
|
&stanza.Field{
|
|
Var: nextStage,
|
|
Label: nextStage,
|
|
Required: &required,
|
|
},
|
|
},
|
|
}
|
|
payload.Status = stanza.CommandStatusExecuting
|
|
payload.CommandElements = append(payload.CommandElements, &form)
|
|
}
|
|
|
|
answer.Payload = payload
|
|
|
|
gateway.ResumableSend(component, answer)
|
|
}
|