Software /
code /
prosody
Annotate
plugins/muc/password.lib.lua @ 8528:67311cda0625
net.server_select: Better detection of errors for outgoing connections
On connection failure, a socket is marked readable and writable. So
to detect initial connection failures (connection refused, etc.) we
now watch for sockets becoming readable during initial connection,
and also read from readable sockets before writing to writable
sockets.
This should fix 'onconnect' being called for outgoing connections
that actually failed.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 23 Feb 2018 15:30:00 +0000 |
parent | 7401:e16b3fd0bd80 |
child | 8996:2df7dc99566a |
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 }); |
7401
e16b3fd0bd80
MUC: Assign priorities to config form hooks so they have a consistent order on each start
Kim Alvefur <zash@zash.se>
parents:
7353
diff
changeset
|
34 end, 100-7); |
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; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
45 local password = stanza:get_child("x", "http://jabber.org/protocol/muc"); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
46 password = password and password:get_child_text("password", "http://jabber.org/protocol/muc"); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
47 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
|
48 if get_password(room) ~= password then |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
49 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
|
50 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
|
51 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
|
52 reply.tags[1].attr.code = "401"; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
53 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
|
54 return true; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
55 end |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
56 end, -20); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
57 |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
58 -- Add password to outgoing invite |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
59 module:hook("muc-invite", function(event) |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
60 local password = get_password(event.room); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
61 if password then |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
62 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
|
63 x:tag("password"):text(password):up(); |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
64 end |
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 |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
67 return { |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
68 get = get_password; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
69 set = set_password; |
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
70 }; |