mod_pastebin/mod_pastebin.lua
changeset 654 7e444de959bb
parent 565 9c2eea631811
child 802 4e43becc3bbe
equal deleted inserted replaced
653:c08b0e4b7b38 654:7e444de959bb
     1 
     1 
     2 local st = require "util.stanza";
     2 local st = require "util.stanza";
     3 local httpserver = require "net.httpserver";
     3 module:depends("http");
     4 local uuid_new = require "util.uuid".generate;
     4 local uuid_new = require "util.uuid".generate;
     5 local os_time = os.time;
     5 local os_time = os.time;
     6 local t_insert, t_remove = table.insert, table.remove;
     6 local t_insert, t_remove = table.insert, table.remove;
     7 local add_task = require "util.timer".add_task;
     7 local add_task = require "util.timer".add_task;
     8 
     8 
    52 		add_task(expire_after, expire_pastes);
    52 		add_task(expire_after, expire_pastes);
    53 	end
    53 	end
    54 	return base_url..uuid;
    54 	return base_url..uuid;
    55 end
    55 end
    56 
    56 
    57 function handle_request(method, body, request)
    57 function handle_request(event, pasteid)
    58 	local pasteid = request.url.path:match("[^/]+$");
       
    59 	if not pasteid or not pastes[pasteid] then
    58 	if not pasteid or not pastes[pasteid] then
    60 		return "Invalid paste id, perhaps it expired?";
    59 		return "Invalid paste id, perhaps it expired?";
    61 	end
    60 	end
    62 	
    61 	
    63 	--module:log("debug", "Received request, replying: %s", pastes[pasteid].text);
    62 	--module:log("debug", "Received request, replying: %s", pastes[pasteid].text);
   125 		end
   124 		end
   126 	end
   125 	end
   127 end
   126 end
   128 
   127 
   129 
   128 
   130 local ports = module:get_option("pastebin_ports", { 5280 });
   129 module:provides("http", {
   131 for _, options in ipairs(ports) do
   130 	route = {
   132 	local port, base, ssl, interface = 5280, "pastebin", false, nil;
   131 		["GET /*"] = handle_request;
   133 	if type(options) == "number" then
   132 	};
   134 		port = options;
   133 });
   135 	elseif type(options) == "table" then
       
   136 		port, base, ssl, interface = options.port or 5280, options.path or "pastebin", options.ssl or false, options.interface;
       
   137 	elseif type(options) == "string" then
       
   138 		base = options;
       
   139 	end
       
   140 	
       
   141 	if not ssl then
       
   142 		base_url = base_url or ("http://"..module:get_host()..(port ~= 80 and (":"..port) or "").."/"..base.."/");
       
   143 	else
       
   144 		base_url = base_url or ("https://"..module:get_host()..(port ~= 443 and (":"..port) or "").."/"..base.."/");
       
   145 	end
       
   146 	
       
   147 	httpserver.new{ interface = interface, port = port, base = base, handler = handle_request, ssl = ssl }
       
   148 end
       
   149 
   134 
   150 local function set_pastes_metatable()
   135 local function set_pastes_metatable()
   151 	if expire_after == 0 then
   136 	if expire_after == 0 then
   152 		local dm = require "util.datamanager";
   137 		local dm = require "util.datamanager";
   153 		setmetatable(pastes, {
   138 		setmetatable(pastes, {