Software /
code /
prosody
Annotate
plugins/muc/password.lib.lua @ 9450:b890ceb1c24f
util.poll: Increase max epoll events per call
This makes the struct roughly the same size in both epoll and select
mode (64bit).
There doesn’t seem to be much guidance on an appropriate size, it does
not seem to matter too much since if there are more events they will
simply show up in the next epoll_wait call. The number of exactly
concurrent events should be fairly low most of the time anyways.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 08 Oct 2018 15:33:15 +0200 |
parent | 9035:173c0e16e704 |
child | 9455:c62c983b8be3 |
rev | line source |
---|---|
6208
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
1 -- Prosody IM |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
4 -- Copyright (C) 2014 Daurnimator |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
5 -- |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
6 -- This project is MIT/X11 licensed. Please see the |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
7 -- COPYING file in the source package for more information. |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
8 -- |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
9 |
6329
6b3eb1611587
mod_muc: Import util.stanza into the config handler modules that need it. Fixes #432.
Matthew Wild <mwild1@gmail.com>
parents:
6208
diff
changeset
|
10 local st = require "util.stanza"; |
6b3eb1611587
mod_muc: Import util.stanza into the config handler modules that need it. Fixes #432.
Matthew Wild <mwild1@gmail.com>
parents:
6208
diff
changeset
|
11 |
6208
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
12 local function get_password(room) |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
13 return room._data.password; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
14 end |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
15 |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
16 local function set_password(room, password) |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
17 if password == "" then password = nil; end |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
18 if room._data.password == password then return false; end |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
19 room._data.password = password; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
20 return true; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
21 end |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
22 |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
23 module:hook("muc-disco#info", function(event) |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
24 event.reply:tag("feature", {var = get_password(event.room) and "muc_passwordprotected" or "muc_unsecured"}):up(); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
25 end); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
26 |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
27 module:hook("muc-config-form", function(event) |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
28 table.insert(event.form, { |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
29 name = "muc#roomconfig_roomsecret"; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
30 type = "text-private"; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
31 label = "Password"; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
32 value = get_password(event.room) or ""; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
33 }); |
9035
173c0e16e704
MUC: Add sections in room config form
Matthew Wild <mwild1@gmail.com>
parents:
8997
diff
changeset
|
34 end, 90-2); |
6208
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
35 |
6991
84e01dbb739e
MUC: Update all config form handlers to take advantage of the new per-option events
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
36 module:hook("muc-config-submitted/muc#roomconfig_roomsecret", function(event) |
84e01dbb739e
MUC: Update all config form handlers to take advantage of the new per-option events
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
37 if set_password(event.room, event.value) then |
6208
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
38 event.status_codes["104"] = true; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
39 end |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
40 end); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
41 |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
42 -- Don't allow anyone to join room unless they provide the password |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
43 module:hook("muc-occupant-pre-join", function(event) |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
44 local room, stanza = event.room, event.stanza; |
8996
2df7dc99566a
MUC/password: Rename variable for clarity [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7401
diff
changeset
|
45 local muc_x = stanza:get_child("x", "http://jabber.org/protocol/muc"); |
2df7dc99566a
MUC/password: Rename variable for clarity [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7401
diff
changeset
|
46 if not muc_x then return end |
2df7dc99566a
MUC/password: Rename variable for clarity [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7401
diff
changeset
|
47 local password = muc_x:get_child_text("password", "http://jabber.org/protocol/muc"); |
6208
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
48 if not password or password == "" then password = nil; end |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
49 if get_password(room) ~= password then |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
50 local from, to = stanza.attr.from, stanza.attr.to; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
51 module:log("debug", "%s couldn't join due to invalid password: %s", from, to); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
52 local reply = st.error_reply(stanza, "auth", "not-authorized"):up(); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
53 reply.tags[1].attr.code = "401"; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
54 event.origin.send(reply:tag("x", {xmlns = "http://jabber.org/protocol/muc"})); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
55 return true; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
56 end |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
57 end, -20); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
58 |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
59 -- Add password to outgoing invite |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
60 module:hook("muc-invite", function(event) |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
61 local password = get_password(event.room); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
62 if password then |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
63 local x = event.stanza:get_child("x", "http://jabber.org/protocol/muc#user"); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
64 x:tag("password"):text(password):up(); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
65 end |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
66 end); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
67 |
8997
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
68 module:hook("muc-room-pre-create", function (event) |
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
69 local stanza, room = event.stanza, event.room; |
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
70 local muc_x = stanza:get_child("x", "http://jabber.org/protocol/muc"); |
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
71 if not muc_x then return end |
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
72 local password = muc_x:get_child_text("password", "http://jabber.org/protocol/muc"); |
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
73 set_password(room, password); |
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
74 end); |
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
75 |
6208
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
76 return { |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
77 get = get_password; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
78 set = set_password; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
79 }; |