liquid_feedback_frontend
diff model/member.lua @ 1231:e7fc3fed1593
Refactored password reset functionality
author | bsw |
---|---|
date | Tue Dec 01 18:12:00 2015 +0100 (2015-12-01) |
parents | c80ac323dee7 |
children | 77dc363fa0be |
line diff
1.1 --- a/model/member.lua Tue Dec 01 17:55:08 2015 +0100 1.2 +++ b/model/member.lua Tue Dec 01 18:12:00 2015 +0100 1.3 @@ -326,6 +326,8 @@ 1.4 end 1.5 1.6 self.password = hash 1.7 + self.password_reset_secret = nil 1.8 + self.password_reset_secret_expiry = nil 1.9 end 1.10 1.11 function Member.object:check_password(password) 1.12 @@ -542,6 +544,36 @@ 1.13 :add_where("activated NOTNULL AND active") 1.14 end 1.15 1.16 +function Member.object:send_password_reset_mail() 1.17 + trace.disable() 1.18 + if not self.notify_email then 1.19 + return false 1.20 + end 1.21 + self.password_reset_secret = multirand.string( 24, "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" ) 1.22 + local expiry = db:query("SELECT now() + '1 days'::interval as expiry", "object").expiry 1.23 + self.password_reset_secret_expiry = expiry 1.24 + self:save() 1.25 + local content = slot.use_temporary(function() 1.26 + slot.put(_"Hello " .. self.name .. ",\n\n") 1.27 + slot.put(_"to reset your password please click on the following link:\n\n") 1.28 + slot.put(request.get_absolute_baseurl() .. "index/reset_password.html?secret=" .. self.password_reset_secret .. "\n\n") 1.29 + slot.put(_"If this link is not working, please open following url in your web browser:\n\n") 1.30 + slot.put(request.get_absolute_baseurl() .. "index/reset_password.html\n\n") 1.31 + slot.put(_"On that page please enter the reset code:\n\n") 1.32 + slot.put(self.password_reset_secret .. "\n\n") 1.33 + end) 1.34 + local success = net.send_mail{ 1.35 + envelope_from = config.mail_envelope_from, 1.36 + from = config.mail_from, 1.37 + reply_to = config.mail_reply_to, 1.38 + to = self.notify_email, 1.39 + subject = config.mail_subject_prefix .. _"Password reset request", 1.40 + content_type = "text/plain; charset=UTF-8", 1.41 + content = content 1.42 + } 1.43 + return success 1.44 +end 1.45 + 1.46 function Member.object:send_invitation(template_file, subject) 1.47 trace.disable() 1.48 self.invite_code = multirand.string( 24, "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" )