bsw@1003: trace.disable() bsw@989: bsw@989: local email = param.get("email") bsw@989: bsw@989: local members = Member:new_selector() bsw@990: :add_where{ "split_part(notify_email, '@', 1) = split_part(?, '@', 1)", email } bsw@990: :add_where{ "lower(split_part(notify_email, '@', 2)) = lower(split_part(?, '@', 2))", email } bsw@989: :add_where("login_recovery_expiry ISNULL OR login_recovery_expiry < now()") bsw@989: :exec() bsw@989: bsw@1003: if #members > 0 then bsw@1003: bsw@1003: local logins = {} bsw@1003: bsw@1003: for i, member in ipairs(members) do bsw@1003: local expiry = db:query("SELECT now() + '7 days'::interval as expiry", "object").expiry bsw@1003: member.login_recovery_expiry = expiry bsw@1003: member:save() bsw@1003: logins[#logins+1] = member.login bsw@1003: end bsw@1003: bsw@1003: local content = slot.use_temporary(function() bsw@1003: slot.put(_"Hello,\n\n") bsw@1003: slot.put(_"the following login is connected to this email address:\n\n") bsw@1003: for i, login in ipairs(logins) do bsw@1003: slot.put(_"Login-Name: " .. login .. "\n") bsw@1003: end bsw@1003: end) bsw@1003: bsw@1003: local success = net.send_mail{ bsw@1003: envelope_from = config.mail_envelope_from, bsw@1003: from = config.mail_from, bsw@1003: reply_to = config.mail_reply_to, bsw@1003: to = email, bsw@1003: subject = config.mail_subject_prefix .. _"Login name request", bsw@1003: content_type = "text/plain; charset=UTF-8", bsw@1003: content = content bsw@1003: } bsw@1003: bsw@989: end bsw@989: bsw@990: slot.put_into("notice", _"Your request has been processed.")