Comparison

mod_http_connect/mod_http_connect.lua @ 6313:5bd4cbe2bfee

mod_http_connect: HTTP CONNECT proxy Meant to allow anonymizing connections to remote HTTP Upload services A work in progress
author Kim Alvefur <zash@zash.se>
date Wed, 25 Jun 2025 15:21:00 +0200
child 6314:706867e05809
comparison
equal deleted inserted replaced
6312:2488254c1bc2 6313:5bd4cbe2bfee
1 module:set_global();
2
3 local server = require "prosody.net.server";
4 local async = require "prosody.util.async";
5 local connect = require"prosody.net.connect".connect;
6 local basic = require "prosody.net.resolvers.basic";
7
8 local sessions = {};
9
10 local listeners = {};
11
12 function listeners.onconnect(conn)
13 local event = sessions[conn];
14 local response = event.response;
15 response.status_code = 200;
16 response:send("");
17 response.conn:onwritable();
18 response.conn:setlistener(listeners, event);
19 server.link(conn, response.conn);
20 server.link(response.conn, conn);
21 response.conn = nil;
22 end
23
24 function listeners.onattach(conn, event)
25 sessions[conn] = event;
26 end
27
28 function listeners.onfail(event, err)
29 local response = event.response;
30 if assert(response) then
31 response.status_code = 500;
32 response:send(err);
33 end
34 end
35
36 function listeners.ondisconnect(conn, err)
37 end
38
39 module:depends("http");
40 module:provides("http", {
41 default_path = "/";
42 route = {
43 ["CONNECT /*"] = function(event)
44 local request = event.request;
45 local host, port = request.url.scheme, request.url.path;
46 if port == "" then return 400 end
47 -- TODO proxy-auth here, presumably same as stun/turn?
48 local resolve = basic.new(host, port);
49 connect(resolve, listeners, nil, event)
50 return true;
51 end;
52 }
53 });