mirror of
https://dev.narayana.im/narayana/telegabber.git
synced 2026-08-05 04:07:07 +00:00
Process MUC registration requests
This commit is contained in:
parent
46ecab1db5
commit
dd00abe977
2 changed files with 62 additions and 18 deletions
|
|
@ -648,6 +648,13 @@ func (c *Client) sendMUCSubject(chatID int64, resource string) {
|
|||
|
||||
// GetMUCNickname generates a unique nickname for a MUC member
|
||||
func (c *Client) GetMUCNickname(chatID int64) string {
|
||||
if chatID == 0 {
|
||||
if c.me != nil {
|
||||
chatID = c.me.Id
|
||||
} else {
|
||||
return "me"
|
||||
}
|
||||
}
|
||||
return c.FormatContact(chatID)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -847,6 +847,7 @@ func handleGetDiscoInfo(s xmpp.Sender, iq *stanza.IQ, di *stanza.DiscoInfo) {
|
|||
"muc_nonanonymous",
|
||||
"muc_unsecured",
|
||||
"http://jabber.org/protocol/muc#stable_id",
|
||||
"jabber:iq:register",
|
||||
)
|
||||
fields := []*stanza.Field{
|
||||
&stanza.Field{
|
||||
|
|
@ -995,13 +996,35 @@ func handleGetQueryRegister(s xmpp.Sender, iq *stanza.IQ) {
|
|||
}
|
||||
defer gateway.ResumableSend(component, answer)
|
||||
|
||||
var login string
|
||||
_, toOk, toIsGroup := toToID(iq.To)
|
||||
|
||||
bare, _, ok := gateway.SplitJID(iq.From)
|
||||
var session *telegram.Client
|
||||
var sessionOk bool
|
||||
if ok {
|
||||
session, ok := sessions[bare]
|
||||
if ok {
|
||||
login = session.Session.Login
|
||||
session, sessionOk = sessions[bare]
|
||||
}
|
||||
|
||||
if toOk {
|
||||
if toIsGroup {
|
||||
nickname := "me"
|
||||
if sessionOk {
|
||||
nickname = session.GetMUCNickname(0)
|
||||
}
|
||||
answer.Payload = extensions.QueryRegister{
|
||||
Instructions: "MUC username is static",
|
||||
Username: nickname,
|
||||
Registered: &extensions.QueryRegisterRegistered{},
|
||||
}
|
||||
} else {
|
||||
query := extensions.QueryRegister{}
|
||||
iqAnswerSetError(answer, &query, 404)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
var login string
|
||||
if sessionOk {
|
||||
login = session.Session.Login
|
||||
}
|
||||
|
||||
var query stanza.IQPayload
|
||||
|
|
@ -1023,6 +1046,7 @@ func handleGetQueryRegister(s xmpp.Sender, iq *stanza.IQ) {
|
|||
if login == "" {
|
||||
gateway.SubscribeToTransport(component, iq.From)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func handleSetQueryRegister(s xmpp.Sender, iq *stanza.IQ, query *extensions.QueryRegister) {
|
||||
|
|
@ -1032,6 +1056,12 @@ func handleSetQueryRegister(s xmpp.Sender, iq *stanza.IQ, query *extensions.Quer
|
|||
}
|
||||
defer gateway.ResumableSend(component, answer)
|
||||
|
||||
_, toOk, _ := toToID(iq.To)
|
||||
if toOk {
|
||||
iqAnswerSetError(answer, query, 400)
|
||||
return
|
||||
}
|
||||
|
||||
if query.Remove != nil {
|
||||
iqAnswerSetError(answer, query, 405)
|
||||
return
|
||||
|
|
@ -1477,6 +1507,13 @@ func iqAnswerSetError(answer *stanza.IQ, payload *extensions.QueryRegister, code
|
|||
Type: stanza.ErrorTypeModify,
|
||||
Reason: "bad-request",
|
||||
}
|
||||
case 404:
|
||||
answer.Error = &stanza.Err{
|
||||
Code: code,
|
||||
Type: stanza.ErrorTypeCancel,
|
||||
Reason: "item-not-found",
|
||||
Text: "No such room",
|
||||
}
|
||||
case 405:
|
||||
answer.Error = &stanza.Err{
|
||||
Code: code,
|
||||
|
|
|
|||
Loading…
Reference in a new issue