diff --git a/r2/r2/controllers/promotecontroller.py b/r2/r2/controllers/promotecontroller.py index d853cd505..a5792cf43 100644 --- a/r2/r2/controllers/promotecontroller.py +++ b/r2/r2/controllers/promotecontroller.py @@ -393,6 +393,7 @@ class PromoteController(ListingController): rate_ip=True, prefix='create_promo_'), VShamedDomain('url'), + username=VLength('username', 100, empty_error=None), l=VLink('link_id'), title=VTitle('title'), url=VUrl('url', allow_self=False, lookup=False), @@ -406,10 +407,9 @@ class PromoteController(ListingController): media_override=VBoolean("media-override"), domain_override=VLength("domain", 100) ) - def POST_edit_promo(self, form, jquery, ip, l, title, url, selftext, kind, - disable_comments, - media_height, media_width, media_embed, - media_override, domain_override): + def POST_edit_promo(self, form, jquery, ip, username, l, title, url, + selftext, kind, disable_comments, media_height, + media_width, media_embed, media_override, domain_override): should_ratelimit = False if not c.user_is_sponsor: @@ -418,6 +418,27 @@ class PromoteController(ListingController): if not should_ratelimit: c.errors.remove((errors.RATELIMIT, 'ratelimit')) + # check for user override + if not l and c.user_is_sponsor and username: + try: + user = Account._by_name(username) + except NotFound: + c.errors.add(errors.USER_DOESNT_EXIST, field="username") + form.set_error(errors.USER_DOESNT_EXIST, "username") + return + + if not user.email: + c.errors.add(errors.NO_EMAIL_FOR_USER, field="username") + form.set_error(errors.NO_EMAIL_FOR_USER, "username") + return + + if not user.email_verified: + c.errors.add(errors.NO_VERIFIED_EMAIL, field="username") + form.set_error(errors.NO_VERIFIED_EMAIL, "username") + return + else: + user = c.user + # check for shame banned domains if form.has_errors("url", errors.DOMAIN_BANNED): g.stats.simple_event('spam.shame.link') @@ -446,7 +467,7 @@ class PromoteController(ListingController): if not l: l = promote.new_promotion(title, url if kind == 'link' else 'self', selftext if kind == 'self' else '', - c.user, ip) + user, ip) elif promote.is_promo(l): # changing link type is not allowed diff --git a/r2/r2/lib/errors.py b/r2/r2/lib/errors.py index 4caa3b939..544ace3a3 100644 --- a/r2/r2/lib/errors.py +++ b/r2/r2/lib/errors.py @@ -52,6 +52,7 @@ error_list = dict(( ('NO_NAME', _('please enter a name')), ('NO_EMAIL', _('please enter an email address')), ('NO_EMAIL_FOR_USER', _('no email address for that user')), + ('NO_VERIFIED_EMAIL', _('no verified email address for that user')), ('NO_TO_ADDRESS', _('send it to whom?')), ('NO_SUBJECT', _('please enter a subject')), ('USER_DOESNT_EXIST', _("that user doesn't exist")), diff --git a/r2/r2/templates/promotelinknew.html b/r2/r2/templates/promotelinknew.html index 212ccd2e1..03555bbcd 100644 --- a/r2/r2/templates/promotelinknew.html +++ b/r2/r2/templates/promotelinknew.html @@ -32,6 +32,9 @@
${_("Create a promotion on another user's account.")}
+