| rev | 
   line source | 
| 
bsw@224
 | 
     1 trace.disable()
 | 
| 
bsw@224
 | 
     2     
 | 
| 
bsw/jbe@6
 | 
     3 local secret = param.get("secret")
 | 
| 
bsw/jbe@6
 | 
     4 
 | 
| 
bsw/jbe@6
 | 
     5 if not secret then
 | 
| 
bsw/jbe@6
 | 
     6 
 | 
| 
bsw/jbe@6
 | 
     7   local member = Member:new_selector()
 | 
| 
bsw/jbe@6
 | 
     8     :add_where{ "login = ?", param.get("login") }
 | 
| 
bsw/jbe@6
 | 
     9     :add_where("password_reset_secret ISNULL OR password_reset_secret_expiry < now()")
 | 
| 
bsw/jbe@6
 | 
    10     :optional_object_mode()
 | 
| 
bsw/jbe@6
 | 
    11     :exec()
 | 
| 
bsw/jbe@6
 | 
    12 
 | 
| 
bsw/jbe@6
 | 
    13   if member then
 | 
| 
bsw/jbe@6
 | 
    14     if not member.notify_email then
 | 
| 
bsw/jbe@6
 | 
    15       slot.put_into("error", _"Sorry, but there is not confirmed email address for your account. Please contact the administrator or support.")
 | 
| 
bsw/jbe@6
 | 
    16       return false
 | 
| 
bsw/jbe@6
 | 
    17     end
 | 
| 
bsw/jbe@6
 | 
    18     member.password_reset_secret = multirand.string( 24, "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" )
 | 
| 
bsw/jbe@6
 | 
    19     local expiry = db:query("SELECT now() + '1 days'::interval as expiry", "object").expiry
 | 
| 
bsw/jbe@6
 | 
    20     member.password_reset_secret_expiry = expiry
 | 
| 
bsw/jbe@6
 | 
    21     member:save()
 | 
| 
bsw/jbe@6
 | 
    22     local content = slot.use_temporary(function()
 | 
| 
bsw/jbe@6
 | 
    23       slot.put(_"Hello " .. member.name .. ",\n\n")
 | 
| 
bsw/jbe@6
 | 
    24       slot.put(_"to reset your password please click on the following link:\n\n")
 | 
| 
jbe@326
 | 
    25       slot.put(request.get_absolute_baseurl() .. "index/reset_password.html?secret=" .. member.password_reset_secret .. "\n\n")
 | 
| 
bsw/jbe@6
 | 
    26       slot.put(_"If this link is not working, please open following url in your web browser:\n\n")
 | 
| 
jbe@326
 | 
    27       slot.put(request.get_absolute_baseurl() .. "index/reset_password.html\n\n")
 | 
| 
bsw/jbe@6
 | 
    28       slot.put(_"On that page please enter the reset code:\n\n")
 | 
| 
bsw/jbe@6
 | 
    29       slot.put(member.password_reset_secret .. "\n\n")
 | 
| 
bsw/jbe@6
 | 
    30     end)
 | 
| 
bsw/jbe@6
 | 
    31     local success = net.send_mail{
 | 
| 
bsw/jbe@6
 | 
    32       envelope_from = config.mail_envelope_from,
 | 
| 
bsw/jbe@6
 | 
    33       from          = config.mail_from,
 | 
| 
bsw/jbe@6
 | 
    34       reply_to      = config.mail_reply_to,
 | 
| 
bsw/jbe@6
 | 
    35       to            = member.notify_email,
 | 
| 
bsw/jbe@6
 | 
    36       subject       = config.mail_subject_prefix .. _"Password reset request",
 | 
| 
bsw/jbe@6
 | 
    37       content_type  = "text/plain; charset=UTF-8",
 | 
| 
bsw/jbe@6
 | 
    38       content       = content
 | 
| 
bsw/jbe@6
 | 
    39     }
 | 
| 
bsw/jbe@6
 | 
    40   end
 | 
| 
bsw/jbe@6
 | 
    41 
 | 
| 
bsw/jbe@6
 | 
    42   slot.put_into("notice", _"Reset link has been send for this member")
 | 
| 
bsw/jbe@6
 | 
    43 
 | 
| 
bsw/jbe@6
 | 
    44 else
 | 
| 
bsw/jbe@6
 | 
    45   local member = Member:new_selector()
 | 
| 
bsw/jbe@6
 | 
    46     :add_where{ "password_reset_secret = ?", secret }
 | 
| 
bsw/jbe@6
 | 
    47     :add_where{ "password_reset_secret_expiry > now()" }
 | 
| 
bsw/jbe@6
 | 
    48     :optional_object_mode()
 | 
| 
bsw/jbe@6
 | 
    49     :exec()
 | 
| 
bsw/jbe@6
 | 
    50 
 | 
| 
bsw/jbe@6
 | 
    51   if not member then
 | 
| 
bsw/jbe@6
 | 
    52     slot.put_into("error", _"Reset code is invalid!")
 | 
| 
bsw/jbe@6
 | 
    53     return false
 | 
| 
bsw/jbe@6
 | 
    54   end
 | 
| 
bsw/jbe@6
 | 
    55 
 | 
| 
bsw/jbe@6
 | 
    56   local password1 = param.get("password1")
 | 
| 
bsw/jbe@6
 | 
    57   local password2 = param.get("password2")
 | 
| 
bsw/jbe@6
 | 
    58 
 | 
| 
bsw/jbe@6
 | 
    59   if password1 ~= password2 then
 | 
| 
bsw/jbe@6
 | 
    60     slot.put_into("error", _"Passwords don't match!")
 | 
| 
bsw/jbe@6
 | 
    61     return false
 | 
| 
bsw/jbe@6
 | 
    62   end
 | 
| 
bsw/jbe@6
 | 
    63 
 | 
| 
bsw/jbe@6
 | 
    64   if #password1 < 8 then
 | 
| 
bsw/jbe@6
 | 
    65     slot.put_into("error", _"Passwords must consist of at least 8 characters!")
 | 
| 
bsw/jbe@6
 | 
    66     return false
 | 
| 
bsw/jbe@6
 | 
    67   end
 | 
| 
bsw/jbe@6
 | 
    68 
 | 
| 
bsw/jbe@6
 | 
    69   member:set_password(password1)
 | 
| 
bsw/jbe@6
 | 
    70   member.password_reset_secret = nil
 | 
| 
bsw/jbe@6
 | 
    71   member.password_reset_secret_expiry = nil
 | 
| 
bsw/jbe@6
 | 
    72   member:save()
 | 
| 
bsw/jbe@6
 | 
    73 
 | 
| 
bsw/jbe@6
 | 
    74   slot.put_into("notice", _"Password has been reset successfully")
 | 
| 
bsw/jbe@6
 | 
    75 
 | 
| 
jbe@326
 | 
    76 end
 |