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
|
// GetMUCNickname generates a unique nickname for a MUC member
|
||||||
func (c *Client) GetMUCNickname(chatID int64) string {
|
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)
|
return c.FormatContact(chatID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -847,6 +847,7 @@ func handleGetDiscoInfo(s xmpp.Sender, iq *stanza.IQ, di *stanza.DiscoInfo) {
|
||||||
"muc_nonanonymous",
|
"muc_nonanonymous",
|
||||||
"muc_unsecured",
|
"muc_unsecured",
|
||||||
"http://jabber.org/protocol/muc#stable_id",
|
"http://jabber.org/protocol/muc#stable_id",
|
||||||
|
"jabber:iq:register",
|
||||||
)
|
)
|
||||||
fields := []*stanza.Field{
|
fields := []*stanza.Field{
|
||||||
&stanza.Field{
|
&stanza.Field{
|
||||||
|
|
@ -995,13 +996,35 @@ func handleGetQueryRegister(s xmpp.Sender, iq *stanza.IQ) {
|
||||||
}
|
}
|
||||||
defer gateway.ResumableSend(component, answer)
|
defer gateway.ResumableSend(component, answer)
|
||||||
|
|
||||||
var login string
|
_, toOk, toIsGroup := toToID(iq.To)
|
||||||
|
|
||||||
bare, _, ok := gateway.SplitJID(iq.From)
|
bare, _, ok := gateway.SplitJID(iq.From)
|
||||||
|
var session *telegram.Client
|
||||||
|
var sessionOk bool
|
||||||
if ok {
|
if ok {
|
||||||
session, ok := sessions[bare]
|
session, sessionOk = sessions[bare]
|
||||||
if ok {
|
|
||||||
login = session.Session.Login
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
var query stanza.IQPayload
|
||||||
|
|
@ -1023,6 +1046,7 @@ func handleGetQueryRegister(s xmpp.Sender, iq *stanza.IQ) {
|
||||||
if login == "" {
|
if login == "" {
|
||||||
gateway.SubscribeToTransport(component, iq.From)
|
gateway.SubscribeToTransport(component, iq.From)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleSetQueryRegister(s xmpp.Sender, iq *stanza.IQ, query *extensions.QueryRegister) {
|
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)
|
defer gateway.ResumableSend(component, answer)
|
||||||
|
|
||||||
|
_, toOk, _ := toToID(iq.To)
|
||||||
|
if toOk {
|
||||||
|
iqAnswerSetError(answer, query, 400)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if query.Remove != nil {
|
if query.Remove != nil {
|
||||||
iqAnswerSetError(answer, query, 405)
|
iqAnswerSetError(answer, query, 405)
|
||||||
return
|
return
|
||||||
|
|
@ -1477,6 +1507,13 @@ func iqAnswerSetError(answer *stanza.IQ, payload *extensions.QueryRegister, code
|
||||||
Type: stanza.ErrorTypeModify,
|
Type: stanza.ErrorTypeModify,
|
||||||
Reason: "bad-request",
|
Reason: "bad-request",
|
||||||
}
|
}
|
||||||
|
case 404:
|
||||||
|
answer.Error = &stanza.Err{
|
||||||
|
Code: code,
|
||||||
|
Type: stanza.ErrorTypeCancel,
|
||||||
|
Reason: "item-not-found",
|
||||||
|
Text: "No such room",
|
||||||
|
}
|
||||||
case 405:
|
case 405:
|
||||||
answer.Error = &stanza.Err{
|
answer.Error = &stanza.Err{
|
||||||
Code: code,
|
Code: code,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue