Mercurial > prosody-modules
view mod_http_connect/mod_http_connect.lua @ 6268: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 |
| parents | |
| children | 706867e05809 |
line wrap: on
line source
module:set_global(); local server = require "prosody.net.server"; local async = require "prosody.util.async"; local connect = require"prosody.net.connect".connect; local basic = require "prosody.net.resolvers.basic"; local sessions = {}; local listeners = {}; function listeners.onconnect(conn) local event = sessions[conn]; local response = event.response; response.status_code = 200; response:send(""); response.conn:onwritable(); response.conn:setlistener(listeners, event); server.link(conn, response.conn); server.link(response.conn, conn); response.conn = nil; end function listeners.onattach(conn, event) sessions[conn] = event; end function listeners.onfail(event, err) local response = event.response; if assert(response) then response.status_code = 500; response:send(err); end end function listeners.ondisconnect(conn, err) end module:depends("http"); module:provides("http", { default_path = "/"; route = { ["CONNECT /*"] = function(event) local request = event.request; local host, port = request.url.scheme, request.url.path; if port == "" then return 400 end -- TODO proxy-auth here, presumably same as stun/turn? local resolve = basic.new(host, port); connect(resolve, listeners, nil, event) return true; end; } });
