plugins/mod_proxy65.lua
branch0.11
changeset 11559 65dcc175ef5b
parent 9649 cc642c9c5ad5
child 11564 3bbb1af92514
equal deleted inserted replaced
11558:db8e41eb6eff 11559:65dcc175ef5b
    92 function module.add_host(module)
    92 function module.add_host(module)
    93 	local host, name = module:get_host(), module:get_option_string("name", "SOCKS5 Bytestreams Service");
    93 	local host, name = module:get_host(), module:get_option_string("name", "SOCKS5 Bytestreams Service");
    94 
    94 
    95 	local proxy_address = module:get_option_string("proxy65_address", host);
    95 	local proxy_address = module:get_option_string("proxy65_address", host);
    96 	local proxy_acl = module:get_option_array("proxy65_acl");
    96 	local proxy_acl = module:get_option_array("proxy65_acl");
       
    97 	local proxy_open_access = module:get_option_boolean("proxy65_open_access", false);
    97 
    98 
    98 	-- COMPAT w/pre-0.9 where proxy65_port was specified in the components section of the config
    99 	-- COMPAT w/pre-0.9 where proxy65_port was specified in the components section of the config
    99 	local legacy_config = module:get_option_number("proxy65_port");
   100 	local legacy_config = module:get_option_number("proxy65_port");
   100 	if legacy_config then
   101 	if legacy_config then
   101 		module:log("warn", "proxy65_port is deprecated, please put proxy65_ports = { %d } into the global section instead", legacy_config);
   102 		module:log("warn", "proxy65_port is deprecated, please put proxy65_ports = { %d } into the global section instead", legacy_config);
   108 	module:hook("iq-get/host/http://jabber.org/protocol/bytestreams:query", function(event)
   109 	module:hook("iq-get/host/http://jabber.org/protocol/bytestreams:query", function(event)
   109 		local origin, stanza = event.origin, event.stanza;
   110 		local origin, stanza = event.origin, event.stanza;
   110 
   111 
   111 		-- check ACL
   112 		-- check ACL
   112 		-- using 'while' instead of 'if' so we can break out of it
   113 		-- using 'while' instead of 'if' so we can break out of it
   113 		while proxy_acl and #proxy_acl > 0 do --luacheck: ignore 512
   114 		local allow;
       
   115 		if proxy_acl and #proxy_acl > 0 then
   114 			local jid = stanza.attr.from;
   116 			local jid = stanza.attr.from;
   115 			local allow;
       
   116 			for _, acl in ipairs(proxy_acl) do
   117 			for _, acl in ipairs(proxy_acl) do
   117 				if jid_compare(jid, acl) then allow = true; break; end
   118 				if jid_compare(jid, acl) then
       
   119 					allow = true;
       
   120 					break;
       
   121 				end
   118 			end
   122 			end
   119 			if allow then break; end
   123 		elseif proxy_open_access or origin.type == "c2s" then
       
   124 			allow = true;
       
   125 		end
       
   126 
       
   127 		if not allow then
   120 			module:log("warn", "Denying use of proxy for %s", tostring(stanza.attr.from));
   128 			module:log("warn", "Denying use of proxy for %s", tostring(stanza.attr.from));
   121 			origin.send(st.error_reply(stanza, "auth", "forbidden"));
   129 			origin.send(st.error_reply(stanza, "auth", "forbidden"));
   122 			return true;
   130 			return true;
   123 		end
   131 		end
   124 
   132