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) }