Mercurial > prosody-modules
comparison mod_email_pass/mod_email_pass.lua @ 1343:7dbde05b48a9
all the things: Remove trailing whitespace
author | Florian Zeitz <florob@babelmonkeys.de> |
---|---|
date | Tue, 11 Mar 2014 18:44:01 +0100 |
parents | 0ae065453dc9 |
children | c60e9943dcb9 |
comparison
equal
deleted
inserted
replaced
1342:0ae065453dc9 | 1343:7dbde05b48a9 |
---|---|
24 | 24 |
25 -- This table has the tokens submited by the server | 25 -- This table has the tokens submited by the server |
26 tokens_mails = {}; | 26 tokens_mails = {}; |
27 tokens_expiration = {}; | 27 tokens_expiration = {}; |
28 | 28 |
29 -- URL | 29 -- URL |
30 local https_host = module:get_option_string("https_host"); | 30 local https_host = module:get_option_string("https_host"); |
31 local http_host = module:get_option_string("http_host"); | 31 local http_host = module:get_option_string("http_host"); |
32 local https_port = module:get_option("https_ports", { 443 }); | 32 local https_port = module:get_option("https_ports", { 443 }); |
33 local http_port = module:get_option("http_ports", { 80 }); | 33 local http_port = module:get_option("http_ports", { 80 }); |
34 | 34 |
160 module:log("error", "Reset password token collision: '%s'", token); | 160 module:log("error", "Reset password token collision: '%s'", token); |
161 return generateToken(address) | 161 return generateToken(address) |
162 end | 162 end |
163 end | 163 end |
164 | 164 |
165 function isExpired(token) | 165 function isExpired(token) |
166 if not tokens_expiration[token] then | 166 if not tokens_expiration[token] then |
167 return nil; | 167 return nil; |
168 end | 168 end |
169 if os.difftime(os.time(), tokens_expiration[token]) < 86400 then -- 86400 secs == 24h | 169 if os.difftime(os.time(), tokens_expiration[token]) < 86400 then -- 86400 secs == 24h |
170 -- token is valid yet | 170 -- token is valid yet |
171 return nil; | 171 return nil; |
172 else | 172 else |
173 -- token invalid, we can create a fresh one. | 173 -- token invalid, we can create a fresh one. |
174 return true; | 174 return true; |
175 end | 175 end |
176 end | 176 end |
177 | 177 |
178 -- Expire tokens | 178 -- Expire tokens |
179 expireTokens = function() | 179 expireTokens = function() |
180 for token,value in pairs(tokens_mails) do | 180 for token,value in pairs(tokens_mails) do |
181 if isExpired(token) then | 181 if isExpired(token) then |
182 module:log("info","Expiring password reset request from user '%s', not used.", tokens_mails[token]); | 182 module:log("info","Expiring password reset request from user '%s', not used.", tokens_mails[token]); |
183 tokens_mails[token] = nil; | 183 tokens_mails[token] = nil; |
197 return nil; | 197 return nil; |
198 end | 198 end |
199 | 199 |
200 function generateUrl(token) | 200 function generateUrl(token) |
201 local url; | 201 local url; |
202 | 202 |
203 if https_host then | 203 if https_host then |
204 url = "https://" .. https_host; | 204 url = "https://" .. https_host; |
205 else | 205 else |
206 url = "http://" .. http_host; | 206 url = "http://" .. http_host; |
207 end | 207 end |
208 | 208 |
209 if https_port then | 209 if https_port then |
210 url = url .. ":" .. https_port[1]; | 210 url = url .. ":" .. https_port[1]; |
211 else | 211 else |
212 url = url .. ":" .. http_port[1]; | 212 url = url .. ":" .. http_port[1]; |
213 end | 213 end |
214 | 214 |
215 url = url .. url_path .. "token.html?" .. token; | 215 url = url .. url_path .. "token.html?" .. token; |
216 | 216 |
217 return url; | 217 return url; |
218 end | 218 end |
219 | 219 |
220 function sendMessage(jid, subject, message) | 220 function sendMessage(jid, subject, message) |
221 local msg = st.message({ from = module.host; to = jid; }): | 221 local msg = st.message({ from = module.host; to = jid; }): |
227 function send_token_mail(form, origin) | 227 function send_token_mail(form, origin) |
228 local user, host, resource = jidutil.split(form.username); | 228 local user, host, resource = jidutil.split(form.username); |
229 local prepped_username = nodeprep(user); | 229 local prepped_username = nodeprep(user); |
230 local prepped_mail = form.email; | 230 local prepped_mail = form.email; |
231 local jid = prepped_username .. "@" .. host; | 231 local jid = prepped_username .. "@" .. host; |
232 | 232 |
233 if not prepped_username then | 233 if not prepped_username then |
234 return nil, "El usuario contiene caracteres incorrectos"; | 234 return nil, "El usuario contiene caracteres incorrectos"; |
235 end | 235 end |
236 if #prepped_username == 0 then | 236 if #prepped_username == 0 then |
237 return nil, "El campo usuario está vacio"; | 237 return nil, "El campo usuario está vacio"; |
238 end | 238 end |
239 if not usermanager.user_exists(prepped_username, module.host) then | 239 if not usermanager.user_exists(prepped_username, module.host) then |
240 return nil, "El usuario NO existe"; | 240 return nil, "El usuario NO existe"; |
241 end | 241 end |
242 | 242 |
243 if #prepped_mail == 0 then | 243 if #prepped_mail == 0 then |
244 return nil, "El campo email está vacio"; | 244 return nil, "El campo email está vacio"; |
245 end | 245 end |
246 | 246 |
247 local vcarduser = get_user_vcard(prepped_username, module.host); | 247 local vcarduser = get_user_vcard(prepped_username, module.host); |
248 | 248 |
249 if not vcarduser then | 249 if not vcarduser then |
250 return nil, "User has not vCard"; | 250 return nil, "User has not vCard"; |
251 else | 251 else |
252 if not vcarduser.EMAIL then | 252 if not vcarduser.EMAIL then |
253 return nil, "Esa cuente no tiene ningún email configurado en su vCard"; | 253 return nil, "Esa cuente no tiene ningún email configurado en su vCard"; |
256 email = string.lower(vcarduser.EMAIL[1]); | 256 email = string.lower(vcarduser.EMAIL[1]); |
257 | 257 |
258 if email ~= string.lower(prepped_mail) then | 258 if email ~= string.lower(prepped_mail) then |
259 return nil, "Dirección eMail incorrecta"; | 259 return nil, "Dirección eMail incorrecta"; |
260 end | 260 end |
261 | 261 |
262 -- Check if has already a valid token, not used yet. | 262 -- Check if has already a valid token, not used yet. |
263 if hasTokenActive(jid) then | 263 if hasTokenActive(jid) then |
264 local valid_until = tokens_expiration[hasTokenActive(jid)] + 86400; | 264 local valid_until = tokens_expiration[hasTokenActive(jid)] + 86400; |
265 return nil, "Ya tienes una petición de restablecimiento de clave válida hasta: " .. datetime.date(valid_until) .. " " .. datetime.time(valid_until); | 265 return nil, "Ya tienes una petición de restablecimiento de clave válida hasta: " .. datetime.date(valid_until) .. " " .. datetime.time(valid_until); |
266 end | 266 end |
267 | 267 |
268 local url_token = generateToken(jid); | 268 local url_token = generateToken(jid); |
269 local url = generateUrl(url_token); | 269 local url = generateUrl(url_token); |
270 local email_body = render(get_template("sendtoken",".mail"), {jid = jid, url = url} ); | 270 local email_body = render(get_template("sendtoken",".mail"), {jid = jid, url = url} ); |
271 | 271 |
272 module:log("info", "Sending password reset mail to user %s", jid); | 272 module:log("info", "Sending password reset mail to user %s", jid); |
273 send_email(email, smtp_address, email_body, mail_subject); | 273 send_email(email, smtp_address, email_body, mail_subject); |
274 return "ok"; | 274 return "ok"; |
275 end | 275 end |
276 | 276 |
277 end | 277 end |
278 | 278 |
279 function reset_password_with_token(form, origin) | 279 function reset_password_with_token(form, origin) |
280 local token = form.token; | 280 local token = form.token; |
281 local password = form.newpassword; | 281 local password = form.newpassword; |
282 | 282 |
283 if not token then | 283 if not token then |
284 return nil, "El Token es inválido"; | 284 return nil, "El Token es inválido"; |
285 end | 285 end |
286 if not tokens_mails[token] then | 286 if not tokens_mails[token] then |
287 return nil, "El Token no existe o ya fué usado"; | 287 return nil, "El Token no existe o ya fué usado"; |
292 if #password < 5 then | 292 if #password < 5 then |
293 return nil, "La clave debe tener una longitud de al menos 5 caracteres"; | 293 return nil, "La clave debe tener una longitud de al menos 5 caracteres"; |
294 end | 294 end |
295 local jid = tokens_mails[token]; | 295 local jid = tokens_mails[token]; |
296 local user, host, resource = jidutil.split(jid); | 296 local user, host, resource = jidutil.split(jid); |
297 | 297 |
298 usermanager.set_password(user, password, host); | 298 usermanager.set_password(user, password, host); |
299 module:log("info", "Password changed with token for user %s", jid); | 299 module:log("info", "Password changed with token for user %s", jid); |
300 tokens_mails[token] = nil; | 300 tokens_mails[token] = nil; |
301 tokens_expiration[token] = nil; | 301 tokens_expiration[token] = nil; |
302 sendMessage(jid, mail_subject, mail_body); | 302 sendMessage(jid, mail_subject, mail_body); |