diff --git a/r2/r2/controllers/api.py b/r2/r2/controllers/api.py
index efd6fd530..fa2a953ab 100755
--- a/r2/r2/controllers/api.py
+++ b/r2/r2/controllers/api.py
@@ -2885,22 +2885,22 @@ class ApiController(RedditController, OAuth2ResourceController):
@validatedForm(VUser(),
VModhash(),
client=VOAuth2ClientDeveloper(),
- account=VExistingUnameNotSelf('name'))
+ account=VExistingUname('name'))
@api_doc(api_section.apps)
def POST_adddeveloper(self, form, jquery, client, account):
if not client:
- form.set_html('.status', _('error'))
return
if form.has_errors('name', errors.USER_DOESNT_EXIST, errors.NO_USER):
- form.set_html('.status', _('invalid user'))
return
if client.has_developer(account):
- form.set_html('.status', _('already added'))
+ c.errors.add(errors.DEVELOPER_ALREADY_ADDED, field='name')
+ form.set_error(errors.DEVELOPER_ALREADY_ADDED, 'name')
return
try:
client.add_developer(account)
except OverflowError:
- form.set_html('.status', _('too many developers'))
+ c.errors.add(errors.TOO_MANY_DEVELOPERS, field='')
+ form.set_error(errors.TOO_MANY_DEVELOPERS, '')
return
form.set_html('.status', _('developer added'))
diff --git a/r2/r2/controllers/errors.py b/r2/r2/controllers/errors.py
index f55d0fc22..3764911b6 100644
--- a/r2/r2/controllers/errors.py
+++ b/r2/r2/controllers/errors.py
@@ -101,6 +101,8 @@ error_list = dict((
('NO_OTP_SECRET', _('you must enable two-factor authentication')),
('NOT_SUPPORTED', _('this feature is not supported')),
('BAD_IMAGE', _('image problem')),
+ ('DEVELOPER_ALREADY_ADDED', _('already added')),
+ ('TOO_MANY_DEVELOPERS', _('too many developers')),
))
errors = Storage([(e, e) for e in error_list.keys()])
diff --git a/r2/r2/controllers/validator/validator.py b/r2/r2/controllers/validator/validator.py
index 3c41cca1b..91ce5dbdf 100644
--- a/r2/r2/controllers/validator/validator.py
+++ b/r2/r2/controllers/validator/validator.py
@@ -1097,20 +1097,14 @@ class VExistingUname(VRequired):
return Account._by_name(name)
except NotFound:
self.error(errors.USER_DOESNT_EXIST)
- self.error()
+ else:
+ self.error()
def param_docs(self):
return {
self.param: _('the name of an existing user')
}
-class VExistingUnameNotSelf(VExistingUname):
- def run(self, name):
- user = super(VExistingUnameNotSelf, self).run(name)
- if not user or user == c.user:
- self.error()
- return user
-
class VMessageRecipient(VExistingUname):
def run(self, name):
if not name:
diff --git a/r2/r2/templates/prefapps.html b/r2/r2/templates/prefapps.html
index 73d77ea98..7daa7a2ba 100644
--- a/r2/r2/templates/prefapps.html
+++ b/r2/r2/templates/prefapps.html
@@ -139,6 +139,11 @@
${_('add developer')}:
+ ${error_field('TOO_MANY_DEVELOPERS', '')}
+ ${error_field('OAUTH2_INVALID_CLIENT', 'client_id')}
+ ${error_field('DEVELOPER_ALREADY_ADDED', 'name')}
+ ${error_field('USER_DOESNT_EXIST', 'name')}
+ ${error_field('NO_USER', 'name')}