diff --git a/zerver/forms.py b/zerver/forms.py
index 2df36a93e4..1ae8283241 100644
--- a/zerver/forms.py
+++ b/zerver/forms.py
@@ -9,6 +9,7 @@ from zproject import settings
from zerver.models import Realm, get_user_profile_by_email, UserProfile, \
completely_open
from zerver.lib.actions import do_change_password
+import DNS
def is_inactive(value):
try:
@@ -26,6 +27,19 @@ def isnt_mit(value):
if "@mit.edu" in value:
raise ValidationError(mark_safe(u'Zulip for MIT is by invitation only. ' + SIGNUP_STRING))
+def not_mit_mailing_list(value):
+ # I don't want ec-discuss signed up for Zulip
+ if "@mit.edu" in value:
+ username = value.rsplit("@", 1)[0]
+ # Check whether the user exists and can get mail.
+ try:
+ DNS.dnslookup("%s.pobox.ns.athena.mit.edu" % username, DNS.Type.TXT)
+ except DNS.Base.ServerError, e:
+ if e.rcode == DNS.Status.NXDOMAIN:
+ raise ValidationError(mark_safe(u'That user does not exist at MIT or is a mailing list. If you want to sign up an alias for Zulip, contact us.'))
+ else:
+ raise
+
class RegistrationForm(forms.Form):
full_name = forms.CharField(max_length=100)
password = forms.CharField(widget=forms.PasswordInput, max_length=100)
@@ -42,7 +56,7 @@ class HomepageForm(forms.Form):
if settings.ALLOW_REGISTER:
email = forms.EmailField()
else:
- validators = [isnt_mit, is_inactive]
+ validators = [not_mit_mailing_list, is_inactive]
email = forms.EmailField(validators=validators)
def __init__(self, *args, **kwargs):
diff --git a/zerver/views.py b/zerver/views.py
index 856f4d3225..5a22bb1e5a 100644
--- a/zerver/views.py
+++ b/zerver/views.py
@@ -36,7 +36,7 @@ from zerver.lib.actions import do_remove_subscription, bulk_remove_subscriptions
user_email_is_unique, do_invite_users, do_refer_friend
from zerver.lib.create_user import random_api_key
from zerver.forms import RegistrationForm, HomepageForm, ToSForm, CreateBotForm, \
- is_inactive, isnt_mit
+ is_inactive, isnt_mit, not_mit_mailing_list
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django_openid_auth.views import default_render_failure, login_complete
from openid.consumer.consumer import SUCCESS as openid_SUCCESS
@@ -405,8 +405,8 @@ def json_invite_users(request, user_profile, invitee_emails=REQ):
if settings.ALLOW_REGISTER == False:
try:
isnt_mit(user_profile.email)
- except ValidationError:
- return json_error("Invitations are not enabled for MIT at this time.")
+ except ValidationError, e:
+ return json_error(e.message)
if not invitee_emails:
return json_error("You must specify at least one email address.")