Software /
code /
prosody-modules
Comparison
mod_http_muc_log/mod_http_muc_log.lua @ 3059:14d8f2a9d5f4
mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 28 May 2018 20:11:37 +0200 |
parent | 3058:4d46658b6998 |
child | 3060:982668000163 |
comparison
equal
deleted
inserted
replaced
3058:4d46658b6998 | 3059:14d8f2a9d5f4 |
---|---|
46 link.path = url.build_path(path); | 46 link.path = url.build_path(path); |
47 return url.build(link); | 47 return url.build(link); |
48 end | 48 end |
49 end | 49 end |
50 | 50 |
51 local function public_room(room) -- : boolean | 51 -- Whether room can be joined by anyone |
52 local function open_room(room) -- : boolean | |
52 if type(room) == "string" then | 53 if type(room) == "string" then |
53 room = get_room(room); | 54 room = get_room(room); |
54 end | 55 end |
55 if not room then | 56 if not room then |
56 return nil; | 57 return nil; |
57 end | 58 end |
58 | 59 |
59 if (room.get_hidden or room.is_hidden)(room) then | |
60 return nil; | |
61 end | |
62 | |
63 if (room.get_members_only or room.is_members_only)(room) then | 60 if (room.get_members_only or room.is_members_only)(room) then |
61 return false; | |
62 end | |
63 | |
64 if room:get_password() then | |
64 return false; | 65 return false; |
65 end | 66 end |
66 | 67 |
67 return true; | 68 return true; |
68 end | 69 end |
95 -- Produce the calendar view | 96 -- Produce the calendar view |
96 local function years_page(event, path) | 97 local function years_page(event, path) |
97 local response = event.response; | 98 local response = event.response; |
98 | 99 |
99 local room = nodeprep(path:match("^(.*)/$")); | 100 local room = nodeprep(path:match("^(.*)/$")); |
100 if not room or not public_room(room) then return end | 101 local is_open = open_room(room); |
102 if is_open == nil then | |
103 return -- implicit 404 | |
104 elseif is_open == false then | |
105 return 403; | |
106 end | |
101 | 107 |
102 -- Collect each date that has messages | 108 -- Collect each date that has messages |
103 -- convert it to a year / month / day tree | 109 -- convert it to a year / month / day tree |
104 local date_list = archive.dates and archive:dates(room); | 110 local date_list = archive.dates and archive:dates(room); |
105 local dates = mt.new(); | 111 local dates = mt.new(); |
198 local room, date = path:match("^(.-)/(%d%d%d%d%-%d%d%-%d%d)$"); | 204 local room, date = path:match("^(.-)/(%d%d%d%d%-%d%d%-%d%d)$"); |
199 room = nodeprep(room); | 205 room = nodeprep(room); |
200 if not room then | 206 if not room then |
201 return years_page(event, path); | 207 return years_page(event, path); |
202 end | 208 end |
203 if not public_room(room) then return end | 209 local is_open = open_room(room); |
210 if is_open == nil then | |
211 return -- implicit 404 | |
212 elseif is_open == false then | |
213 return 403; | |
214 end | |
204 local day_start = datetime.parse(date.."T00:00:00Z"); | 215 local day_start = datetime.parse(date.."T00:00:00Z"); |
205 | 216 |
206 local logs, i = {}, 1; | 217 local logs, i = {}, 1; |
207 local iter, err = archive:find(room, { | 218 local iter, err = archive:find(room, { |
208 ["start"] = day_start; | 219 ["start"] = day_start; |