Mercurial > prosody-modules
annotate mod_onions/mod_onions.lua @ 2712:d89ab70808f6
mod_cloud_notify: fix bug when multiple resources are used
This bug was triggered under the rare circumstances that a message arrived
and one resource was smacks hibernated while the other one(s) were offline.
Then only the hibernated resource but not the offline one(s) (or the other
way round) got notified.
| author | tmolitor <thilo@eightysoft.de> |
|---|---|
| date | Mon, 08 May 2017 18:24:29 +0200 |
| parents | 5ab27d3741b4 |
| children | 9e693d433a41 |
| rev | line source |
|---|---|
|
1780
b3e3ad35391a
mod_onions: Small fixes making bounce_sendq match mod_s2s again.
Thijs Alkemade <me@thijsalkema.de>
parents:
1617
diff
changeset
|
1 local prosody = prosody; |
|
b3e3ad35391a
mod_onions: Small fixes making bounce_sendq match mod_s2s again.
Thijs Alkemade <me@thijsalkema.de>
parents:
1617
diff
changeset
|
2 local core_process_stanza = prosody.core_process_stanza; |
|
b3e3ad35391a
mod_onions: Small fixes making bounce_sendq match mod_s2s again.
Thijs Alkemade <me@thijsalkema.de>
parents:
1617
diff
changeset
|
3 |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
4 local wrapclient = require "net.server".wrapclient; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
5 local s2s_new_outgoing = require "core.s2smanager".new_outgoing; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
6 local initialize_filters = require "util.filters".initialize; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
7 local st = require "util.stanza"; |
|
2703
c0237567bbb1
mod_onions: Import luasocket (fixes #898)
Kim Alvefur <zash@zash.se>
parents:
2345
diff
changeset
|
8 local socket = require "socket"; |
|
1071
8f59b45fe6a7
mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents:
1061
diff
changeset
|
9 |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
10 local portmanager = require "core.portmanager"; |
|
1071
8f59b45fe6a7
mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents:
1061
diff
changeset
|
11 |
|
8f59b45fe6a7
mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents:
1061
diff
changeset
|
12 local softreq = require "util.dependencies".softreq; |
|
8f59b45fe6a7
mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents:
1061
diff
changeset
|
13 |
|
8f59b45fe6a7
mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents:
1061
diff
changeset
|
14 local bit; |
|
8f59b45fe6a7
mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents:
1061
diff
changeset
|
15 pcall(function() bit = require"bit"; end); |
|
8f59b45fe6a7
mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents:
1061
diff
changeset
|
16 bit = bit or softreq"bit32" |
|
8f59b45fe6a7
mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents:
1061
diff
changeset
|
17 if not bit then module:log("error", "No bit module found. Either LuaJIT 2, lua-bitop or Lua 5.2 is required"); end |
|
8f59b45fe6a7
mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents:
1061
diff
changeset
|
18 |
|
8f59b45fe6a7
mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents:
1061
diff
changeset
|
19 local band = bit.band; |
|
8f59b45fe6a7
mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents:
1061
diff
changeset
|
20 local rshift = bit.rshift; |
|
8f59b45fe6a7
mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents:
1061
diff
changeset
|
21 local lshift = bit.lshift; |
|
8f59b45fe6a7
mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents:
1061
diff
changeset
|
22 |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
23 local byte = string.byte; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
24 local c = string.char; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
25 |
|
1617
e0d8caffa209
mod_onions: Depend on mod_s2s to avoid a traceback when loaded before mod_s2s
Matthew Wild <mwild1@gmail.com>
parents:
1468
diff
changeset
|
26 module:depends("s2s"); |
|
e0d8caffa209
mod_onions: Depend on mod_s2s to avoid a traceback when loaded before mod_s2s
Matthew Wild <mwild1@gmail.com>
parents:
1468
diff
changeset
|
27 |
|
2344
c928b7ac75b7
mod_onions: Use typed config API
Kim Alvefur <zash@zash.se>
parents:
2306
diff
changeset
|
28 local proxy_ip = module:get_option_string("onions_socks5_host", "127.0.0.1"); |
|
c928b7ac75b7
mod_onions: Use typed config API
Kim Alvefur <zash@zash.se>
parents:
2306
diff
changeset
|
29 local proxy_port = module:get_option_number("onions_socks5_port", 9050); |
|
c928b7ac75b7
mod_onions: Use typed config API
Kim Alvefur <zash@zash.se>
parents:
2306
diff
changeset
|
30 local forbid_else = module:get_option_boolean("onions_only", false); |
|
c928b7ac75b7
mod_onions: Use typed config API
Kim Alvefur <zash@zash.se>
parents:
2306
diff
changeset
|
31 local torify_all = module:get_option_boolean("onions_tor_all", false); |
|
c928b7ac75b7
mod_onions: Use typed config API
Kim Alvefur <zash@zash.se>
parents:
2306
diff
changeset
|
32 local onions_map = module:get_option("onions_map", {}); |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
33 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
34 local sessions = module:shared("sessions"); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
35 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
36 -- The socks5listener handles connection while still connecting to the proxy, |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
37 -- then it hands them over to the normal listener (in mod_s2s) |
|
1061
f4031e7ccec1
mod_onions: The SOCKS5 port is now a string, as it should be. Added a boolean option onions_tor_all to pass all s2s traffic through Tor.
Thijs Alkemade <me@thijsalkema.de>
parents:
1060
diff
changeset
|
38 local socks5listener = { default_port = proxy_port, default_mode = "*a", default_interface = "*" }; |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
39 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
40 local function socks5_connect_sent(conn, data) |
|
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
1299
diff
changeset
|
41 |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
42 local session = sessions[conn]; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
43 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
44 if #data < 5 then |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
45 session.socks5_buffer = data; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
46 return; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
47 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
48 |
|
2704
5ab27d3741b4
mod_onions: Make variable local
Kim Alvefur <zash@zash.se>
parents:
2703
diff
changeset
|
49 local request_status = byte(data, 2); |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
50 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
51 if not request_status == 0x00 then |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
52 module:log("debug", "Failed to connect to the SOCKS5 proxy. :("); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
53 session:close(false); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
54 return; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
55 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
56 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
57 module:log("debug", "Succesfully connected to SOCKS5 proxy."); |
|
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
1299
diff
changeset
|
58 |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
59 local response = byte(data, 4); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
60 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
61 if response == 0x01 then |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
62 if #data < 10 then |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
63 -- let's try again when we have enough |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
64 session.socks5_buffer = data; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
65 return; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
66 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
67 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
68 -- this means the server tells us to connect on an IPv4 address |
|
2345
2df32ac11b31
mod_onions: Reduce line count for redirect check
Kim Alvefur <zash@zash.se>
parents:
2344
diff
changeset
|
69 local ip = string.format("%d.%d.%d.%d", byte(data, 5,8)); |
|
1071
8f59b45fe6a7
mod_onions: Copy the code to find the bit module from mod_websockets.
Thijs Alkemade <me@thijsalkema.de>
parents:
1061
diff
changeset
|
70 local port = band(byte(data, 9), lshift(byte(data, 10), 8)); |
|
2345
2df32ac11b31
mod_onions: Reduce line count for redirect check
Kim Alvefur <zash@zash.se>
parents:
2344
diff
changeset
|
71 module:log("debug", "Should connect to: %s:%d", ip, port); |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
72 |
|
2345
2df32ac11b31
mod_onions: Reduce line count for redirect check
Kim Alvefur <zash@zash.se>
parents:
2344
diff
changeset
|
73 if not (ip == "0.0.0.0" and port == 0) then |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
74 module:log("debug", "The SOCKS5 proxy tells us to connect to a different IP, don't know how. :("); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
75 session:close(false); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
76 return; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
77 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
78 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
79 -- Now the real s2s listener can take over the connection. |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
80 local listener = portmanager.get_service("s2s").listener; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
81 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
82 module:log("debug", "SOCKS5 done, handing over listening to "..tostring(listener)); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
83 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
84 session.socks5_handler = nil; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
85 session.socks5_buffer = nil; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
86 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
87 local w, log = conn.send, session.log; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
88 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
89 local filter = initialize_filters(session); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
90 |
|
1467
f10a3a5ba28f
mod_onions: Set the stream version to 1.0 on onionized streams, so TLS is offered.
Thijs Alkemade <me@thijsalkema.de>
parents:
1343
diff
changeset
|
91 session.version = 1; |
|
f10a3a5ba28f
mod_onions: Set the stream version to 1.0 on onionized streams, so TLS is offered.
Thijs Alkemade <me@thijsalkema.de>
parents:
1343
diff
changeset
|
92 |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
93 session.sends2s = function (t) |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
94 log("debug", "sending (s2s over socks5): %s", (t.top_tag and t:top_tag()) or t:match("^[^>]*>?")); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
95 if t.name then |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
96 t = filter("stanzas/out", t); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
97 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
98 if t then |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
99 t = filter("bytes/out", tostring(t)); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
100 if t then |
|
1299
a7d6c6d2c7b5
mod_onions: Accepted patch that should fix problems when using libevent.
Thijs Alkemade <me@thijsalkema.de>
parents:
1071
diff
changeset
|
101 return conn:write(tostring(t)); |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
102 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
103 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
104 end |
|
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
1299
diff
changeset
|
105 |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
106 session.open_stream = function () |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
107 session.sends2s(st.stanza("stream:stream", { |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
108 xmlns='jabber:server', ["xmlns:db"]='jabber:server:dialback', |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
109 ["xmlns:stream"]='http://etherx.jabber.org/streams', |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
110 from=session.from_host, to=session.to_host, version='1.0', ["xml:lang"]='en'}):top_tag()); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
111 end |
|
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
1299
diff
changeset
|
112 |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
113 conn.setlistener(conn, listener); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
114 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
115 listener.register_outgoing(conn, session); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
116 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
117 listener.onconnect(conn); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
118 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
119 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
120 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
121 local function socks5_handshake_sent(conn, data) |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
122 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
123 local session = sessions[conn]; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
124 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
125 if #data < 2 then |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
126 session.socks5_buffer = data; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
127 return; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
128 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
129 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
130 -- version, method |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
131 local request_status = byte(data, 2); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
132 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
133 module:log("debug", "SOCKS version: "..byte(data, 1)); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
134 module:log("debug", "Response: "..request_status); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
135 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
136 if not request_status == 0x00 then |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
137 module:log("debug", "Failed to connect to the SOCKS5 proxy. :( It seems to require authentication."); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
138 session:close(false); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
139 return; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
140 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
141 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
142 module:log("debug", "Sending connect message."); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
143 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
144 -- version 5, connect, (reserved), type: domainname, (length, hostname), port |
|
1299
a7d6c6d2c7b5
mod_onions: Accepted patch that should fix problems when using libevent.
Thijs Alkemade <me@thijsalkema.de>
parents:
1071
diff
changeset
|
145 conn:write(c(5) .. c(1) .. c(0) .. c(3) .. c(#session.socks5_to) .. session.socks5_to); |
|
a7d6c6d2c7b5
mod_onions: Accepted patch that should fix problems when using libevent.
Thijs Alkemade <me@thijsalkema.de>
parents:
1071
diff
changeset
|
146 conn:write(c(rshift(session.socks5_port, 8)) .. c(band(session.socks5_port, 0xff))); |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
147 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
148 session.socks5_handler = socks5_connect_sent; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
149 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
150 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
151 function socks5listener.onconnect(conn) |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
152 module:log("debug", "Connected to SOCKS5 proxy, sending SOCKS5 handshake."); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
153 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
154 -- Socks version 5, 1 method, no auth |
|
1299
a7d6c6d2c7b5
mod_onions: Accepted patch that should fix problems when using libevent.
Thijs Alkemade <me@thijsalkema.de>
parents:
1071
diff
changeset
|
155 conn:write(c(5) .. c(1) .. c(0)); |
|
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
1299
diff
changeset
|
156 |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
157 sessions[conn].socks5_handler = socks5_handshake_sent; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
158 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
159 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
160 function socks5listener.register_outgoing(conn, session) |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
161 session.direction = "outgoing"; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
162 sessions[conn] = session; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
163 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
164 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
165 function socks5listener.ondisconnect(conn, err) |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
166 sessions[conn] = nil; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
167 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
168 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
169 function socks5listener.onincoming(conn, data) |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
170 local session = sessions[conn]; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
171 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
172 if session.socks5_buffer then |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
173 data = session.socks5_buffer .. data; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
174 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
175 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
176 if session.socks5_handler then |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
177 session.socks5_handler(conn, data); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
178 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
179 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
180 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
181 local function connect_socks5(host_session, connect_host, connect_port) |
|
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
1299
diff
changeset
|
182 |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
183 local conn, handler = socket.tcp(); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
184 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
185 module:log("debug", "Connecting to " .. connect_host .. ":" .. connect_port); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
186 |
|
1781
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
187 -- this is not necessarily the same as .to_host (it can be that this is from the onions_map) |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
188 host_session.socks5_to = connect_host; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
189 host_session.socks5_port = connect_port; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
190 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
191 conn:settimeout(0); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
192 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
193 local success, err = conn:connect(proxy_ip, proxy_port); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
194 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
195 conn = wrapclient(conn, connect_host, connect_port, socks5listener, "*a"); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
196 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
197 socks5listener.register_outgoing(conn, host_session); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
198 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
199 host_session.conn = conn; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
200 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
201 |
|
1780
b3e3ad35391a
mod_onions: Small fixes making bounce_sendq match mod_s2s again.
Thijs Alkemade <me@thijsalkema.de>
parents:
1617
diff
changeset
|
202 local bouncy_stanzas = { message = true, presence = true, iq = true }; |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
203 local function bounce_sendq(session, reason) |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
204 local sendq = session.sendq; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
205 if not sendq then return; end |
|
1780
b3e3ad35391a
mod_onions: Small fixes making bounce_sendq match mod_s2s again.
Thijs Alkemade <me@thijsalkema.de>
parents:
1617
diff
changeset
|
206 session.log("info", "Sending error replies for "..#sendq.." queued stanzas because of failed outgoing connection to "..tostring(session.to_host)); |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
207 local dummy = { |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
208 type = "s2sin"; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
209 send = function(s) |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
210 (session.log or log)("error", "Replying to to an s2s error reply, please report this! Traceback: %s", traceback()); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
211 end; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
212 dummy = true; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
213 }; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
214 for i, data in ipairs(sendq) do |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
215 local reply = data[2]; |
|
1780
b3e3ad35391a
mod_onions: Small fixes making bounce_sendq match mod_s2s again.
Thijs Alkemade <me@thijsalkema.de>
parents:
1617
diff
changeset
|
216 if reply and not(reply.attr.xmlns) and bouncy_stanzas[reply.name] then |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
217 reply.attr.type = "error"; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
218 reply:tag("error", {type = "cancel"}) |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
219 :tag("remote-server-not-found", {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}):up(); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
220 if reason then |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
221 reply:tag("text", {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}) |
|
1780
b3e3ad35391a
mod_onions: Small fixes making bounce_sendq match mod_s2s again.
Thijs Alkemade <me@thijsalkema.de>
parents:
1617
diff
changeset
|
222 :text("Server-to-server connection failed: "..reason):up(); |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
223 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
224 core_process_stanza(dummy, reply); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
225 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
226 sendq[i] = nil; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
227 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
228 session.sendq = nil; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
229 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
230 -- Try to intercept anything to *.onion |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
231 local function route_to_onion(event) |
|
1468
cf32265eb4c7
mod_onions: Actually define the variable "stanza" to contain "event.stanza", fixing problems of stanzas being dropped for outgoing connections.
Thijs Alkemade <me@thijsalkema.de>
parents:
1467
diff
changeset
|
232 local stanza = event.stanza; |
|
1781
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
233 local to_host = event.to_host; |
|
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
234 local onion_host = nil; |
|
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
235 local onion_port = nil; |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
236 |
|
2304
a881494238af
mod_onions: Remove capture of final period (stripped by util.jid)
Kim Alvefur <zash@zash.se>
parents:
2303
diff
changeset
|
237 if not to_host:find("%.onion$") then |
|
1781
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
238 if onions_map[to_host] then |
|
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
239 if type(onions_map[to_host]) == "string" then |
|
1910
720b291cb340
mod_onions: Patch from David Goulet: Fix onions_map when the target is a string.
Thijs Alkemade <me@thijsalkema.de>
parents:
1781
diff
changeset
|
240 onion_host = onions_map[to_host]; |
|
1781
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
241 else |
|
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
242 onion_host = onions_map[to_host].host; |
|
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
243 onion_port = onions_map[to_host].port; |
|
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
244 end |
|
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
245 elseif forbid_else then |
|
1780
b3e3ad35391a
mod_onions: Small fixes making bounce_sendq match mod_s2s again.
Thijs Alkemade <me@thijsalkema.de>
parents:
1617
diff
changeset
|
246 module:log("debug", event.to_host .. " is not an onion. Blocking it."); |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
247 return false; |
|
1061
f4031e7ccec1
mod_onions: The SOCKS5 port is now a string, as it should be. Added a boolean option onions_tor_all to pass all s2s traffic through Tor.
Thijs Alkemade <me@thijsalkema.de>
parents:
1060
diff
changeset
|
248 elseif not torify_all then |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
249 return; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
250 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
251 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
252 |
|
1781
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
253 module:log("debug", "Onion routing something to ".. to_host); |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
254 |
|
1781
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
255 if hosts[event.from_host].s2sout[to_host] then |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
256 return; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
257 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
258 |
|
1781
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
259 local host_session = s2s_new_outgoing(event.from_host, to_host); |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
260 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
261 host_session.bounce_sendq = bounce_sendq; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
262 host_session.sendq = { {tostring(stanza), stanza.attr and stanza.attr.type ~= "error" and stanza.attr.type ~= "result" and st.reply(stanza)} }; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
263 |
|
1781
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
264 hosts[event.from_host].s2sout[to_host] = host_session; |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
265 |
|
1781
12ac88940fe3
mod_onions: Now allows configuration of an "onions_map", allowing administrator to manually specify alternate hidden services for clearnet addresses.
Thijs Alkemade <me@thijsalkema.de>
parents:
1780
diff
changeset
|
266 connect_socks5(host_session, onion_host or to_host, onion_port or 5269); |
|
1060
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
267 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
268 return true; |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
269 end |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
270 |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
271 module:log("debug", "Onions ready and loaded"); |
|
25b83ed7838a
mod_onions: Added mod_onions. This module allows Prosody to make s2s connections to Tor hidden services.
Thijs Alkemade <me@thijsalkema.de>
parents:
diff
changeset
|
272 |
|
2305
7db4d3f5fb73
mod_onions: Hook event using moduleapi
Kim Alvefur <zash@zash.se>
parents:
2304
diff
changeset
|
273 module:hook("route/remote", route_to_onion, 200); |
|
2306
ad40c094e7d7
mod_onions: Prevent s2s_secure_auth policy enforcement from rejecting .onion connections
Kim Alvefur <zash@zash.se>
parents:
2305
diff
changeset
|
274 |
|
ad40c094e7d7
mod_onions: Prevent s2s_secure_auth policy enforcement from rejecting .onion connections
Kim Alvefur <zash@zash.se>
parents:
2305
diff
changeset
|
275 module:hook_global("s2s-check-certificate", function (event) |
|
ad40c094e7d7
mod_onions: Prevent s2s_secure_auth policy enforcement from rejecting .onion connections
Kim Alvefur <zash@zash.se>
parents:
2305
diff
changeset
|
276 local host = event.host; |
|
ad40c094e7d7
mod_onions: Prevent s2s_secure_auth policy enforcement from rejecting .onion connections
Kim Alvefur <zash@zash.se>
parents:
2305
diff
changeset
|
277 if host and host:find("%.onion$") then |
|
ad40c094e7d7
mod_onions: Prevent s2s_secure_auth policy enforcement from rejecting .onion connections
Kim Alvefur <zash@zash.se>
parents:
2305
diff
changeset
|
278 return true; |
|
ad40c094e7d7
mod_onions: Prevent s2s_secure_auth policy enforcement from rejecting .onion connections
Kim Alvefur <zash@zash.se>
parents:
2305
diff
changeset
|
279 end |
|
ad40c094e7d7
mod_onions: Prevent s2s_secure_auth policy enforcement from rejecting .onion connections
Kim Alvefur <zash@zash.se>
parents:
2305
diff
changeset
|
280 end); |
|
ad40c094e7d7
mod_onions: Prevent s2s_secure_auth policy enforcement from rejecting .onion connections
Kim Alvefur <zash@zash.se>
parents:
2305
diff
changeset
|
281 |
