mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-04-27 03:00:12 -04:00
Add back POST_update for API clients.
This commit is contained in:
@@ -1083,6 +1083,80 @@ class ApiController(RedditController):
|
||||
# invalidated. drop a new cookie.
|
||||
self.login(c.user)
|
||||
|
||||
@validatedForm(VUser('curpass', default = ''),
|
||||
VModhash(),
|
||||
email = ValidEmails("email", num = 1),
|
||||
password = VPassword(['newpass', 'verpass']),
|
||||
verify = VBoolean("verify"),
|
||||
dest=VDestination())
|
||||
@api_doc(api_section.account)
|
||||
def POST_update(self, form, jquery, email, password, verify, dest):
|
||||
"""
|
||||
Update account email address and password.
|
||||
|
||||
Called by /prefs/update on the site. For frontend form verification
|
||||
purposes, `newpass` and `verpass` must be equal for a password change
|
||||
to succeed.
|
||||
"""
|
||||
# password is required to proceed
|
||||
if form.has_errors("curpass", errors.WRONG_PASSWORD):
|
||||
return
|
||||
|
||||
# check if the email is valid. If one is given and it is
|
||||
# different from the current address (or there is not one
|
||||
# currently) apply it
|
||||
updated = False
|
||||
if (not form.has_errors("email", errors.BAD_EMAILS) and
|
||||
email):
|
||||
if (not hasattr(c.user,'email') or c.user.email != email):
|
||||
if c.user.email_verified:
|
||||
emailer.email_change_email(c.user)
|
||||
c.user.email = email
|
||||
# unverified email for now
|
||||
c.user.email_verified = None
|
||||
c.user._commit()
|
||||
Award.take_away("verified_email", c.user)
|
||||
updated = True
|
||||
if verify:
|
||||
# TODO: rate limit this?
|
||||
if dest == '/':
|
||||
dest = None
|
||||
|
||||
emailer.verify_email(c.user, dest=dest)
|
||||
form.set_html('.status',
|
||||
_("you should be getting a verification email shortly."))
|
||||
else:
|
||||
form.set_html('.status', _('your email has been updated'))
|
||||
|
||||
# user is removing their email
|
||||
if (not email and c.user.email and
|
||||
(errors.NO_EMAILS, 'email') in c.errors):
|
||||
c.errors.remove((errors.NO_EMAILS, 'email'))
|
||||
c.user.email = ''
|
||||
c.user.email_verified = None
|
||||
c.user._commit()
|
||||
Award.take_away("verified_email", c.user)
|
||||
updated = True
|
||||
form.set_html('.status', _('your email has been updated'))
|
||||
|
||||
# change password
|
||||
if (password and
|
||||
not (form.has_errors("newpass", errors.BAD_PASSWORD) or
|
||||
form.has_errors("verpass", errors.BAD_PASSWORD_MATCH))):
|
||||
change_password(c.user, password)
|
||||
if c.user.email_verified:
|
||||
emailer.password_change_email(c.user)
|
||||
if updated:
|
||||
form.set_html(".status",
|
||||
_('your email and password have been updated'))
|
||||
else:
|
||||
form.set_html('.status',
|
||||
_('your password has been updated'))
|
||||
form.set_inputs(curpass = "", newpass = "", verpass = "")
|
||||
# the password has changed, so the user's cookie has been
|
||||
# invalidated. drop a new cookie.
|
||||
self.login(c.user)
|
||||
|
||||
@validatedForm(VUser(),
|
||||
VModhash(),
|
||||
delete_message = VLength("delete_message", max_length=500),
|
||||
|
||||
Reference in New Issue
Block a user