Mercurial > prosody-modules
comparison mod_mam/mod_mam.lua @ 751:3c37445f26ac
mod_mam: Stricter validation, reject invalid timestamps, jids.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 27 Jul 2012 04:39:48 +0200 |
parents | 53afd87f3612 |
children | 2b8ceb4d1a73 |
comparison
equal
deleted
inserted
replaced
750:8133dd5f266a | 751:3c37445f26ac |
---|---|
9 | 9 |
10 local st = require "util.stanza"; | 10 local st = require "util.stanza"; |
11 local rsm = module:require "rsm"; | 11 local rsm = module:require "rsm"; |
12 local jid_bare = require "util.jid".bare; | 12 local jid_bare = require "util.jid".bare; |
13 local jid_split = require "util.jid".split; | 13 local jid_split = require "util.jid".split; |
14 local jid_prep = require "util.jid".prep; | |
14 local host = module.host; | 15 local host = module.host; |
15 | 16 |
16 local dm_load = require "util.datamanager".load; | 17 local dm_load = require "util.datamanager".load; |
17 local dm_store = require "util.datamanager".store; | 18 local dm_store = require "util.datamanager".store; |
18 local dm_list_load = require "util.datamanager".list_load; | 19 local dm_list_load = require "util.datamanager".list_load; |
123 local qend = query:get_child_text("end"); | 124 local qend = query:get_child_text("end"); |
124 local qset = rsm.get(query); | 125 local qset = rsm.get(query); |
125 module:log("debug", "Archive query, id %s with %s from %s until %s)", | 126 module:log("debug", "Archive query, id %s with %s from %s until %s)", |
126 tostring(qid), qwith or "anyone", qstart or "the dawn of time", qend or "now"); | 127 tostring(qid), qwith or "anyone", qstart or "the dawn of time", qend or "now"); |
127 | 128 |
128 qstart, qend = (qstart and timestamp_parse(qstart)), (qend and timestamp_parse(qend)) | 129 if qstart or qend then -- Validate timestamps |
130 local vstart, vend = (qstart and timestamp_parse(qstart)), (qend and timestamp_parse(qend)) | |
131 if (qstart and not qwith) or (qend and not vend) then | |
132 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid timestamp")) | |
133 return true | |
134 end | |
135 qstart, qend = vstart, vend; | |
136 end | |
137 | |
138 if qwith then -- Validate the 'with' jid | |
139 local pwith = qwith and jid_prep(qwith); | |
140 if pwith and not qwith then -- it failed prepping | |
141 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid JID")) | |
142 return true | |
143 end | |
144 qwith = pwith; | |
145 end | |
129 | 146 |
130 -- Load all the data! | 147 -- Load all the data! |
131 local data, err = dm_list_load(origin.username, origin.host, archive_store); | 148 local data, err = dm_list_load(origin.username, origin.host, archive_store); |
132 if not data then | 149 if not data then |
133 if (not err) then | 150 if (not err) then |