Software /
code /
prosody
Annotate
plugins/mod_proxy65.lua @ 10618:232841373711 0.11
mod_admin_telnet: Create a DNS resolver per console session (fixes #1492)
This is now the common pattern, eg see mod_s2s.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 24 Jan 2020 23:27:49 +0100 |
parent | 9645:cc642c9c5ad5 |
child | 10111:0f335815244f |
child | 11555:65dcc175ef5b |
rev | line source |
---|---|
4414
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
1 -- Prosody IM |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
2 -- Copyright (C) 2008-2011 Matthew Wild |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
3 -- Copyright (C) 2008-2011 Waqas Hussain |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 -- Copyright (C) 2009 Thilo Cestonaro |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5375
diff
changeset
|
5 -- |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 -- This project is MIT/X11 licensed. Please see the |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 -- COPYING file in the source package for more information. |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 -- |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
10 module:set_global(); |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 |
4376
99277a1abe58
mod_proxy65: Apply stringprep to activation target JID.
Waqas Hussain <waqas20@gmail.com>
parents:
4375
diff
changeset
|
12 local jid_compare, jid_prep = require "util.jid".compare, require "util.jid".prep; |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local st = require "util.stanza"; |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 local sha1 = require "util.hashes".sha1; |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
15 local b64 = require "util.encodings".base64.encode; |
3004
c20b9fe1624b
mod_proxy65: Use new server.link to link proxied connections, now works with either connection backend
Matthew Wild <mwild1@gmail.com>
parents:
2729
diff
changeset
|
16 local server = require "net.server"; |
4917
d1dca1d12d53
mod_proxy65: Add missing import of portmanager
Kim Alvefur <zash@zash.se>
parents:
4916
diff
changeset
|
17 local portmanager = require "core.portmanager"; |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 |
9146
6bd3602a70e2
mod_proxy65: Split module:shared() into multiple calls, multiple params may be deprecated soon
Matthew Wild <mwild1@gmail.com>
parents:
8728
diff
changeset
|
19 local sessions = module:shared("sessions"); |
6bd3602a70e2
mod_proxy65: Split module:shared() into multiple calls, multiple params may be deprecated soon
Matthew Wild <mwild1@gmail.com>
parents:
8728
diff
changeset
|
20 local transfers = module:shared("transfers"); |
3004
c20b9fe1624b
mod_proxy65: Use new server.link to link proxied connections, now works with either connection backend
Matthew Wild <mwild1@gmail.com>
parents:
2729
diff
changeset
|
21 local max_buffer_size = 4096; |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
23 local listener = {}; |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
25 function listener.onincoming(conn, data) |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 local session = sessions[conn] or {}; |
4414
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
27 |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
28 local transfer = transfers[session.sha]; |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
29 if transfer and transfer.activated then -- copy data between initiator and target |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
30 local initiator, target = transfer.initiator, transfer.target; |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
31 (conn == initiator and target or initiator):write(data); |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
32 return; |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
33 end -- FIXME server.link should be doing this? |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5375
diff
changeset
|
34 |
4414
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
35 if not session.greeting_done then |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
36 local nmethods = data:byte(2) or 0; |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
37 if data:byte(1) == 0x05 and nmethods > 0 and #data == 2 + nmethods then -- check if we have all the data |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
38 if data:find("%z") then -- 0x00 = 'No authentication' is supported |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
39 session.greeting_done = true; |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
40 sessions[conn] = session; |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
41 conn:write("\5\0"); -- send (SOCKS version 5, No authentication) |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
42 module:log("debug", "SOCKS5 greeting complete"); |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 return; |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 end |
4414
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
45 end -- else error, unexpected input |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
46 conn:write("\5\255"); -- send (SOCKS version 5, no acceptable method) |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
47 conn:close(); |
8728
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
8643
diff
changeset
|
48 module:log("debug", "Invalid SOCKS5 greeting received: '%s'", b64(data)); |
4414
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
49 else -- connection request |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
50 --local head = string.char( 0x05, 0x01, 0x00, 0x03, 40 ); -- ( VER=5=SOCKS5, CMD=1=CONNECT, RSV=0=RESERVED, ATYP=3=DOMAIMNAME, SHA-1 size ) |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
51 if #data == 47 and data:sub(1,5) == "\5\1\0\3\40" and data:sub(-2) == "\0\0" then |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
52 local sha = data:sub(6, 45); |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
53 conn:pause(); |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
54 conn:write("\5\0\0\3\40" .. sha .. "\0\0"); -- VER, REP, RSV, ATYP, BND.ADDR (sha), BND.PORT (2 Byte) |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
55 if not transfers[sha] then |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 transfers[sha] = {}; |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 transfers[sha].target = conn; |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 session.sha = sha; |
4414
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
59 module:log("debug", "SOCKS5 target connected for session %s", sha); |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
60 else -- transfers[sha].target ~= nil |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 transfers[sha].initiator = conn; |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 session.sha = sha; |
4414
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
63 module:log("debug", "SOCKS5 initiator connected for session %s", sha); |
3004
c20b9fe1624b
mod_proxy65: Use new server.link to link proxied connections, now works with either connection backend
Matthew Wild <mwild1@gmail.com>
parents:
2729
diff
changeset
|
64 server.link(conn, transfers[sha].target, max_buffer_size); |
c20b9fe1624b
mod_proxy65: Use new server.link to link proxied connections, now works with either connection backend
Matthew Wild <mwild1@gmail.com>
parents:
2729
diff
changeset
|
65 server.link(transfers[sha].target, conn, max_buffer_size); |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 end |
4414
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
67 else -- error, unexpected input |
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
68 conn:write("\5\1\0\3\0\0\0"); -- VER, REP, RSV, ATYP, BND.ADDR (sha), BND.PORT (2 Byte) |
2729
7e0c35713bf5
mod_proxy65: Fix for old-style closing of connections (another source of tracebacks with libevent enabled)
Matthew Wild <mwild1@gmail.com>
parents:
2320
diff
changeset
|
69 conn:close(); |
8728
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
8643
diff
changeset
|
70 module:log("debug", "Invalid SOCKS5 negotiation received: '%s'", b64(data)); |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 end |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 end |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 end |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 |
8643
11b6aa30b3e0
mod_proxy65: Fix all warnings from luacheck
Matthew Wild <mwild1@gmail.com>
parents:
8642
diff
changeset
|
75 function listener.ondisconnect(conn) |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 local session = sessions[conn]; |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 if session then |
4414
aa2e79f20962
mod_proxy65: Major cleanup, better logging, handling of all error cases, less code, and other goodness.
Waqas Hussain <waqas20@gmail.com>
parents:
4376
diff
changeset
|
78 if transfers[session.sha] then |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 local initiator, target = transfers[session.sha].initiator, transfers[session.sha].target; |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 if initiator == conn and target ~= nil then |
2729
7e0c35713bf5
mod_proxy65: Fix for old-style closing of connections (another source of tracebacks with libevent enabled)
Matthew Wild <mwild1@gmail.com>
parents:
2320
diff
changeset
|
81 target:close(); |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 elseif target == conn and initiator ~= nil then |
8643
11b6aa30b3e0
mod_proxy65: Fix all warnings from luacheck
Matthew Wild <mwild1@gmail.com>
parents:
8642
diff
changeset
|
83 initiator:close(); |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 end |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 transfers[session.sha] = nil; |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 end |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 -- Clean up any session-related stuff here |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 sessions[conn] = nil; |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 end |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 end |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
92 function module.add_host(module) |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
93 local host, name = module:get_host(), module:get_option_string("name", "SOCKS5 Bytestreams Service"); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5375
diff
changeset
|
94 |
6948
e6968e47826d
mod_proxy65: Use typed config API (fix issues when options are set to unexpected types)
Kim Alvefur <zash@zash.se>
parents:
6021
diff
changeset
|
95 local proxy_address = module:get_option_string("proxy65_address", host); |
e6968e47826d
mod_proxy65: Use typed config API (fix issues when options are set to unexpected types)
Kim Alvefur <zash@zash.se>
parents:
6021
diff
changeset
|
96 local proxy_acl = module:get_option_array("proxy65_acl"); |
3694
a7d88f58abbb
mod_proxy65: Add service discovery identity and feature, to help out mod_disco when loaded on a normal host.
Waqas Hussain <waqas20@gmail.com>
parents:
3693
diff
changeset
|
97 |
5375
b31ab26f9997
mod_proxy65: Fix typo in comment
Kim Alvefur <zash@zash.se>
parents:
5336
diff
changeset
|
98 -- COMPAT w/pre-0.9 where proxy65_port was specified in the components section of the config |
4916
31496e8227e8
mod_proxy65: Warn about pre-0.9 config style (per host proxy65_port)
Kim Alvefur <zash@zash.se>
parents:
4729
diff
changeset
|
99 local legacy_config = module:get_option_number("proxy65_port"); |
31496e8227e8
mod_proxy65: Warn about pre-0.9 config style (per host proxy65_port)
Kim Alvefur <zash@zash.se>
parents:
4729
diff
changeset
|
100 if legacy_config then |
31496e8227e8
mod_proxy65: Warn about pre-0.9 config style (per host proxy65_port)
Kim Alvefur <zash@zash.se>
parents:
4729
diff
changeset
|
101 module:log("warn", "proxy65_port is deprecated, please put proxy65_ports = { %d } into the global section instead", legacy_config); |
31496e8227e8
mod_proxy65: Warn about pre-0.9 config style (per host proxy65_port)
Kim Alvefur <zash@zash.se>
parents:
4729
diff
changeset
|
102 end |
31496e8227e8
mod_proxy65: Warn about pre-0.9 config style (per host proxy65_port)
Kim Alvefur <zash@zash.se>
parents:
4729
diff
changeset
|
103 |
6021
f8c17af769d9
mod_proxy65: Use mod_disco
Florian Zeitz <florob@babelmonkeys.de>
parents:
5776
diff
changeset
|
104 module:depends("disco"); |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
105 module:add_identity("proxy", "bytestreams", name); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
106 module:add_feature("http://jabber.org/protocol/bytestreams"); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5375
diff
changeset
|
107 |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
108 module:hook("iq-get/host/http://jabber.org/protocol/bytestreams:query", function(event) |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
109 local origin, stanza = event.origin, event.stanza; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5375
diff
changeset
|
110 |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
111 -- check ACL |
8643
11b6aa30b3e0
mod_proxy65: Fix all warnings from luacheck
Matthew Wild <mwild1@gmail.com>
parents:
8642
diff
changeset
|
112 -- using 'while' instead of 'if' so we can break out of it |
11b6aa30b3e0
mod_proxy65: Fix all warnings from luacheck
Matthew Wild <mwild1@gmail.com>
parents:
8642
diff
changeset
|
113 while proxy_acl and #proxy_acl > 0 do --luacheck: ignore 512 |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
114 local jid = stanza.attr.from; |
4921 | 115 local allow; |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
116 for _, acl in ipairs(proxy_acl) do |
4921 | 117 if jid_compare(jid, acl) then allow = true; break; end |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
118 end |
4921 | 119 if allow then break; end |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
120 module:log("warn", "Denying use of proxy for %s", tostring(stanza.attr.from)); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
121 origin.send(st.error_reply(stanza, "auth", "forbidden")); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
122 return true; |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
123 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5375
diff
changeset
|
124 |
9643
bb8486491b48
mod_proxy65: Check what port is used at the time of the query
Kim Alvefur <zash@zash.se>
parents:
9642
diff
changeset
|
125 local proxy_port = next(portmanager.get_active_services():search("proxy65", nil)[1] or {}); |
9642
e31053344231
mod_proxy65: Return an error if no port is open (fixes #1240)
Kim Alvefur <zash@zash.se>
parents:
6948
diff
changeset
|
126 if not proxy_port then |
e31053344231
mod_proxy65: Return an error if no port is open (fixes #1240)
Kim Alvefur <zash@zash.se>
parents:
6948
diff
changeset
|
127 module:log("warn", "Not listening on any port"); |
e31053344231
mod_proxy65: Return an error if no port is open (fixes #1240)
Kim Alvefur <zash@zash.se>
parents:
6948
diff
changeset
|
128 origin.send(st.error_reply(stanza, "wait", "item-not-found", "Not listening on any port")); |
e31053344231
mod_proxy65: Return an error if no port is open (fixes #1240)
Kim Alvefur <zash@zash.se>
parents:
6948
diff
changeset
|
129 return true; |
e31053344231
mod_proxy65: Return an error if no port is open (fixes #1240)
Kim Alvefur <zash@zash.se>
parents:
6948
diff
changeset
|
130 end |
e31053344231
mod_proxy65: Return an error if no port is open (fixes #1240)
Kim Alvefur <zash@zash.se>
parents:
6948
diff
changeset
|
131 |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
132 local sid = stanza.tags[1].attr.sid; |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
133 origin.send(st.reply(stanza):tag("query", {xmlns="http://jabber.org/protocol/bytestreams", sid=sid}) |
8642
d2556f237bc2
mod_proxy65: Fix passing number to stanza API (thanks mimi89999)
Matthew Wild <mwild1@gmail.com>
parents:
6948
diff
changeset
|
134 :tag("streamhost", {jid=host, host=proxy_address, port=("%d"):format(proxy_port)})); |
4374 | 135 return true; |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
136 end); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5375
diff
changeset
|
137 |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
138 module:hook("iq-set/host/http://jabber.org/protocol/bytestreams:query", function(event) |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
139 local origin, stanza = event.origin, event.stanza; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5375
diff
changeset
|
140 |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
141 local query = stanza.tags[1]; |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
142 local sid = query.attr.sid; |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
143 local from = stanza.attr.from; |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
144 local to = query:get_child_text("activate"); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
145 local prepped_to = jid_prep(to); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5375
diff
changeset
|
146 |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
147 local info = "sid: "..tostring(sid)..", initiator: "..tostring(from)..", target: "..tostring(prepped_to or to); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
148 if prepped_to and sid then |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
149 local sha = sha1(sid .. from .. prepped_to, true); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
150 if not transfers[sha] then |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
151 module:log("debug", "Activation request has unknown session id; activation failed (%s)", info); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
152 origin.send(st.error_reply(stanza, "modify", "item-not-found")); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
153 elseif not transfers[sha].initiator then |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
154 module:log("debug", "The sender was not connected to the proxy; activation failed (%s)", info); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
155 origin.send(st.error_reply(stanza, "cancel", "not-allowed", "The sender (you) is not connected to the proxy")); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
156 --elseif not transfers[sha].target then -- can't happen, as target is set when a transfer object is created |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
157 -- module:log("debug", "The recipient was not connected to the proxy; activation failed (%s)", info); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
158 -- origin.send(st.error_reply(stanza, "cancel", "not-allowed", "The recipient is not connected to the proxy")); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
159 else -- if transfers[sha].initiator ~= nil and transfers[sha].target ~= nil then |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
160 module:log("debug", "Transfer activated (%s)", info); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
161 transfers[sha].activated = true; |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
162 transfers[sha].target:resume(); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
163 transfers[sha].initiator:resume(); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
164 origin.send(st.reply(stanza)); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
165 end |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
166 elseif to and sid then |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
167 module:log("debug", "Malformed activation jid; activation failed (%s)", info); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
168 origin.send(st.error_reply(stanza, "modify", "jid-malformed")); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
169 else |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
170 module:log("debug", "Bad request; activation failed (%s)", info); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
171 origin.send(st.error_reply(stanza, "modify", "bad-request")); |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
172 end |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
173 return true; |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
174 end); |
2137
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
175 end |
c5d87a3316f8
mod_proxy65: Import from prosody-modules, thanks Ephraim :)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
176 |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
177 module:provides("net", { |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
178 default_port = 5000; |
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
179 listener = listener; |
4685
3d90264c7b3d
mod_proxy65: Add multiplex pattern.
Waqas Hussain <waqas20@gmail.com>
parents:
4679
diff
changeset
|
180 multiplex = { |
3d90264c7b3d
mod_proxy65: Add multiplex pattern.
Waqas Hussain <waqas20@gmail.com>
parents:
4679
diff
changeset
|
181 pattern = "^\5"; |
3d90264c7b3d
mod_proxy65: Add multiplex pattern.
Waqas Hussain <waqas20@gmail.com>
parents:
4679
diff
changeset
|
182 }; |
4679
5b52b5eaa03d
mod_proxy65: Port to portmanager, make a shared module
Matthew Wild <mwild1@gmail.com>
parents:
4414
diff
changeset
|
183 }); |