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, { |