Mercurial > prosody-modules
comparison mod_privilege/mod_privilege.lua @ 1662:d440a22fa0af
mod_privilege: advertise_perm method now use session.send instead of module:send to avoid to go back in hook
| author | Goffi <goffi@goffi.org> |
|---|---|
| date | Mon, 06 Apr 2015 02:08:09 +0200 |
| parents | 69aa2b54ba8a |
| children | ca07a6ada631 |
comparison
equal
deleted
inserted
replaced
| 1661:69aa2b54ba8a | 1662:d440a22fa0af |
|---|---|
| 28 | 28 |
| 29 --> Permissions management <-- | 29 --> Permissions management <-- |
| 30 | 30 |
| 31 privileges = module:get_option("privileged_entities", {}) | 31 privileges = module:get_option("privileged_entities", {}) |
| 32 | 32 |
| 33 function advertise_perm(to_jid, perms) | 33 function advertise_perm(session, to_jid, perms) |
| 34 -- send <message/> stanza to advertise permissions | 34 -- send <message/> stanza to advertise permissions |
| 35 -- as expained in section 4.2 | 35 -- as expained in section 4.2 |
| 36 local message = st.message({to=to_jid}) | 36 local message = st.message({to=to_jid}) |
| 37 :tag("privilege", {xmlns=_PRIV_ENT_NS}) | 37 :tag("privilege", {xmlns=_PRIV_ENT_NS}) |
| 38 | 38 |
| 39 for _, perm in pairs({'roster', 'message', 'presence'}) do | 39 for _, perm in pairs({'roster', 'message', 'presence'}) do |
| 40 if perms[perm] then | 40 if perms[perm] then |
| 41 message:tag("perm", {access=perm, type=perms[perm]}):up() | 41 message:tag("perm", {access=perm, type=perms[perm]}):up() |
| 42 end | 42 end |
| 43 end | 43 end |
| 44 | 44 session.send(message) |
| 45 module:send(message) | 45 end |
| 46 | |
| 46 end | 47 end |
| 47 | 48 |
| 48 function on_auth(event) | 49 function on_auth(event) |
| 49 -- Check if entity is privileged according to configuration, | 50 -- Check if entity is privileged according to configuration, |
| 50 -- and set session.privileges accordingly | 51 -- and set session.privileges accordingly |
| 69 end | 70 end |
| 70 end | 71 end |
| 71 if session.type == "component" then | 72 if session.type == "component" then |
| 72 -- we send the message stanza only for component | 73 -- we send the message stanza only for component |
| 73 -- it will be sent at first <presence/> for other entities | 74 -- it will be sent at first <presence/> for other entities |
| 74 advertise_perm(bare_jid, ent_priv) | 75 advertise_perm(session, bare_jid, ent_priv) |
| 75 end | 76 end |
| 76 end | 77 end |
| 77 | 78 |
| 78 session.privileges = ent_priv | 79 session.privileges = ent_priv |
| 79 end | 80 end |
| 81 function on_presence(event) | 82 function on_presence(event) |
| 82 -- Permission are already checked at this point, | 83 -- Permission are already checked at this point, |
| 83 -- we only advertise them to the entity | 84 -- we only advertise them to the entity |
| 84 local session, stanza = event.origin, event.stanza; | 85 local session, stanza = event.origin, event.stanza; |
| 85 if session.privileges then | 86 if session.privileges then |
| 86 advertise_perm(session.full_jid, session.privileges) | 87 advertise_perm(session, session.full_jid, session.privileges) |
| 87 end | 88 end |
| 88 end | 89 end |
| 89 | 90 |
| 90 module:hook('authentication-success', on_auth) | 91 module:hook('authentication-success', on_auth) |
| 91 module:hook('component-authenticated', on_auth) | 92 module:hook('component-authenticated', on_auth) |
