示例#1
0
    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
示例#2
0
    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()
示例#3
0
    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()