Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Implement domain bans that inform user of block at submit time.

commit 44ebdeb378f4bf09d6bd1f395764868b57d9fd82 1 parent dbaa48e
@spladug spladug authored
View
11 r2/r2/controllers/api.py
@@ -187,6 +187,7 @@ def POST_compose(self, form, jquery, to, subject, body, ip):
VCaptcha(),
VRatelimit(rate_user = True, rate_ip = True,
prefix = "rate_submit_"),
+ VShamedDomain('url'),
ip = ValidIP(),
sr = VSubmitSR('sr', 'kind'),
url = VUrl(['url', 'sr', 'resubmit']),
@@ -248,7 +249,8 @@ def POST_submit(self, form, jquery, url, selftext, kind, title,
check_domain = True
# check for no url, or clear that error field on return
- if form.has_errors("url", errors.NO_URL, errors.BAD_URL):
+ if form.has_errors("url", errors.NO_URL, errors.BAD_URL,
+ errors.DOMAIN_BANNED):
pass
elif form.has_errors("url", errors.ALREADY_SUB):
check_domain = False
@@ -266,13 +268,8 @@ def POST_submit(self, form, jquery, url, selftext, kind, title,
g.log.warning("%s is trying to submit url=None (title: %r)"
% (request.ip, title))
elif check_domain:
- banmsg = is_banned_domain(url, request.ip)
-
-# Uncomment if we want to let spammers know we're on to them
-# if banmsg:
-# form.set_html(".field-url.BAD_URL", banmsg)
-# return
+ banmsg = is_banned_domain(url, request.ip)
else:
form.has_errors('text', errors.TOO_LONG)
View
1  r2/r2/controllers/errors.py
@@ -94,6 +94,7 @@
('OAUTH2_ACCESS_DENIED', _('access denied by the user')),
('CONFIRM', _("please confirm the form")),
('NO_API', _('cannot perform this action via the API')),
+ ('DOMAIN_BANNED', _('%(domain)s is not allowed on reddit: %(reason)s')),
))
errors = Storage([(e, e) for e in error_list.keys()])
View
11 r2/r2/controllers/validator/validator.py
@@ -1025,6 +1025,17 @@ def param_docs(self):
pass
return params
+class VShamedDomain(Validator):
+ def run(self, url):
+ if not url:
+ return
+
+ is_shamed, domain, reason = is_shamed_domain(url, request.ip)
+
+ if is_shamed:
+ self.set_error(errors.DOMAIN_BANNED, dict(domain=domain,
+ reason=reason))
+
class VExistingUname(VRequired):
def __init__(self, item, *a, **kw):
VRequired.__init__(self, item, errors.NO_USER, *a, **kw)
View
3  r2/r2/models/admintools.py
@@ -329,6 +329,9 @@ def is_banned_IP(ip):
def is_banned_domain(dom, ip):
return None
+def is_shamed_domain(dom, ip):
+ return False, None, None
+
def valid_thing(v, karma, *a, **kw):
return not v._thing1._spam
View
1  r2/r2/templates/newlink.html
@@ -72,6 +72,7 @@
<input id="url" name="url" type="text" value="${thing.url}"/>
${error_field("NO_URL", "url", "div")}
${error_field("BAD_URL", "url", "div")}
+ ${error_field("DOMAIN_BANNED", "url", "div")}
${error_field("ALREADY_SUB", "url", "div")}
${error_field("NO_LINKS", "sr")}
${error_field("NO_SELFS", "sr")}

1 comment on commit 44ebdeb

@sixcorners

Instead of banning link shorteners why not follow the link and pull the rel="canonical" from the page, then use that link? Why not do this too for all pages? http://support.google.com/webmasters/bin/answer.py?hl=en&answer=139394

Please sign in to comment.
Something went wrong with that request. Please try again.