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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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