def create_user(self, email): try: data = is_vouched(email) except BadStatusCodeError: data = None if data and data['is_vouched']: user = User.objects.create_user(username=USERNAME_ALGO(email), email=email) return user
def form_valid(self, form): """Custom mozillians login form validation""" self.assertion = form.cleaned_data['assertion'] self.audience = get_audience(self.request) result = verify(self.assertion, self.audience) try: _is_valid_login = False if result: if User.objects.filter(email=result['email']).exists(): _is_valid_login = True else: data = is_vouched(result['email']) if data and data['is_vouched']: _is_valid_login = True user = User.objects.create_user( username=default_username_algo(data['email']), email=data['email']) profile = user.userprofile profile.username = data['username'] profile.avatar_url = data['photo'] profile.save() if _is_valid_login: try: self.user = auth.authenticate(assertion=self.assertion, audience=self.audience) auth.login(self.request, self.user) except BrowserIDException as e: return self.login_failure(e) if self.user and self.user.is_active: return self.login_success() except BadStatusCodeError: msg = ('Email (%s) authenticated but unable to ' 'connect to Mozillians to see if you are vouched' % result['email']) messages.warning(self.request, msg) return self.login_failure() messages.error(self.request, ('Login failed. Make sure you are using ' 'a valid email address and you are ' 'a vouched Mozillian.')) return self.login_failure()
def form_valid(self, form): """Custom mozillians login form validation""" self.assertion = form.cleaned_data["assertion"] self.audience = get_audience(self.request) result = verify(self.assertion, self.audience) try: _is_valid_login = False if result: if User.objects.filter(email=result["email"]).exists(): _is_valid_login = True else: data = is_vouched(result["email"]) if data and data["is_vouched"]: _is_valid_login = True user = User.objects.create_user( username=default_username_algo(data["email"]), email=data["email"] ) MozillianProfile.objects.create(user=user, username=data["username"], avatar_url=data["photo"]) if _is_valid_login: try: self.user = auth.authenticate(assertion=self.assertion, audience=self.audience) auth.login(self.request, self.user) except BrowserIDException as e: return self.login_failure(e) if self.user and self.user.is_active: return self.login_success() except BadStatusCodeError: msg = ( "Email (%s) authenticated but unable to " "connect to Mozillians to see if you are vouched" % result["email"] ) messages.warning(self.request, msg) return self.login_failure() messages.error( self.request, ("Login failed. Make sure you are using " "a valid email address and you are " "a vouched Mozillian."), ) return self.login_failure()