|
|
|
@ -706,62 +706,60 @@ func handleSetQueryCommand(s xmpp.Sender, iq *stanza.IQ, command *stanza.Command
|
|
|
|
|
if !ok {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
_, toOk := toToID(iq.To)
|
|
|
|
|
|
|
|
|
|
var cmdString string
|
|
|
|
|
if command.Action == "" || command.Action == stanza.CommandActionExecute {
|
|
|
|
|
_, ok := toToID(iq.To)
|
|
|
|
|
if !ok {
|
|
|
|
|
cmd, ok := telegram.GetCommand(telegram.CommandTypeTransport, command.Node)
|
|
|
|
|
if ok && cmd.RequiredArgs > 0 {
|
|
|
|
|
var fields []*stanza.Field
|
|
|
|
|
for i, arg := range cmd.Arguments {
|
|
|
|
|
fields = append(fields, &stanza.Field{
|
|
|
|
|
Var: strconv.FormatInt(int64(i), 10),
|
|
|
|
|
Label: arg,
|
|
|
|
|
})
|
|
|
|
|
if !toOk {
|
|
|
|
|
form, formOk := command.CommandElement.(*stanza.Form)
|
|
|
|
|
if formOk {
|
|
|
|
|
// just for the case the client messed the order somehow
|
|
|
|
|
sort.Slice(form.Fields, func(i int, j int) bool {
|
|
|
|
|
iField := form.Fields[i]
|
|
|
|
|
jField := form.Fields[j]
|
|
|
|
|
if iField != nil && jField != nil {
|
|
|
|
|
ii, iErr := strconv.ParseInt(iField.Var, 10, 64)
|
|
|
|
|
ji, jErr := strconv.ParseInt(jField.Var, 10, 64)
|
|
|
|
|
return iErr == nil && jErr == nil && ii < ji
|
|
|
|
|
}
|
|
|
|
|
answer.Payload = &stanza.Command{
|
|
|
|
|
SessionId: command.Node,
|
|
|
|
|
Node: command.Node,
|
|
|
|
|
Status: stanza.CommandStatusExecuting,
|
|
|
|
|
CommandElement: &stanza.Form{
|
|
|
|
|
Title: command.Node,
|
|
|
|
|
Instructions: []string{cmd.Description},
|
|
|
|
|
Fields: fields,
|
|
|
|
|
},
|
|
|
|
|
return false
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
var cmd strings.Builder
|
|
|
|
|
cmd.WriteString("/")
|
|
|
|
|
cmd.WriteString(command.Node)
|
|
|
|
|
for _, field := range form.Fields {
|
|
|
|
|
cmd.WriteString(" ")
|
|
|
|
|
if len(field.ValuesList) > 0 {
|
|
|
|
|
cmd.WriteString(field.ValuesList[0])
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
cmdString = "/" + command.Node
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if command.Action == stanza.CommandActionComplete {
|
|
|
|
|
_, ok := toToID(iq.To)
|
|
|
|
|
if !ok {
|
|
|
|
|
form, ok := command.CommandElement.(*stanza.Form)
|
|
|
|
|
if ok {
|
|
|
|
|
// just for the case the client messed the order somehow
|
|
|
|
|
sort.Slice(form.Fields, func(i int, j int) bool {
|
|
|
|
|
iField := form.Fields[i]
|
|
|
|
|
jField := form.Fields[j]
|
|
|
|
|
if iField != nil && jField != nil {
|
|
|
|
|
ii, iErr := strconv.ParseInt(iField.Var, 10, 64)
|
|
|
|
|
ji, jErr := strconv.ParseInt(jField.Var, 10, 64)
|
|
|
|
|
return iErr == nil && jErr == nil && ii < ji
|
|
|
|
|
|
|
|
|
|
cmdString = cmd.String()
|
|
|
|
|
} else {
|
|
|
|
|
if command.Action == "" || command.Action == stanza.CommandActionExecute {
|
|
|
|
|
cmd, ok := telegram.GetCommand(telegram.CommandTypeTransport, command.Node)
|
|
|
|
|
if ok && cmd.RequiredArgs > 0 {
|
|
|
|
|
var fields []*stanza.Field
|
|
|
|
|
for i, arg := range cmd.Arguments {
|
|
|
|
|
fields = append(fields, &stanza.Field{
|
|
|
|
|
Var: strconv.FormatInt(int64(i), 10),
|
|
|
|
|
Label: arg,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
var cmd strings.Builder
|
|
|
|
|
cmd.WriteString("/")
|
|
|
|
|
cmd.WriteString(command.Node)
|
|
|
|
|
for _, field := range form.Fields {
|
|
|
|
|
cmd.WriteString(" ")
|
|
|
|
|
if len(field.ValuesList) > 0 {
|
|
|
|
|
cmd.WriteString(field.ValuesList[0])
|
|
|
|
|
answer.Payload = &stanza.Command{
|
|
|
|
|
SessionId: command.Node,
|
|
|
|
|
Node: command.Node,
|
|
|
|
|
Status: stanza.CommandStatusExecuting,
|
|
|
|
|
CommandElement: &stanza.Form{
|
|
|
|
|
Type: stanza.FormTypeForm,
|
|
|
|
|
Title: command.Node,
|
|
|
|
|
Instructions: []string{cmd.Description},
|
|
|
|
|
Fields: fields,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
cmdString = "/" + command.Node
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cmdString = cmd.String()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|