Software / code / prosody-modules
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 }); |