コード例 #1
0
    def get(self, service):
        client = oauth.create_client(service)

        if client.authorize_access_token():
            profile = get_remote_profile(service, client)
            if session.get('oauth_link', False):
                user = session['auth'].user
                service_name = f'{service}_id'
                service_id = profile['id']
                if User.query.filter_by(**{
                        service_name: str(service_id)
                }).first():
                    flash(
                        f'Данный аккаунт {service} уже привязан ' +
                        'к другому аккаунту на данном сайте.',
                        'error',
                    )
                    return redirect(url_for('auth.profile'))

                User.query.filter_by(id=user.id).update({
                    service_name: service_id,
                    'is_oauth': True,
                    'is_aproved': True,
                })

                session['oauth_link'] = False
                flash(f'Ваш аккаунт был привязан к {service}.', 'info')
                return redirect(url_for('auth.profile_oauth'))
            else:
                session['auth'] = SessionAuth.create_from_oauth(
                    service, profile)
                if session.get('oauth_new', False):
                    return redirect(url_for('auth.profile_oauth'))

        return redirect(url_for('index.home'))
コード例 #2
0
    def get(self, service):
        user = session['auth'].user

        # разрешаем отвязывать только при наличии пароля или других привязок
        # иначе нельзя будет войти на сайт с пустым паролем
        oauth_list = filter(lambda x: x is not None,
                            user.get_oauth_dict().values())  # noqa: WPS111
        if user.password or len(list(oauth_list)) > 1:
            User.query.filter_by(login=user.login).update({
                f'{service}_id': '',
            })

            update_is_oauth(user)
            session['auth'].logout()
            session['auth'] = SessionAuth(True, user)

            flash(f'Ваш аккаунт был отвязан от {service}.', 'info')
            return redirect(url_for('auth.profile'))

        flash(
            'Для отвязки аккаунта у вас должен быть установлен пароль.<br>' +
            'Или привяжите другой OAuth-сервис к аккаунту.',
            'error',
        )
        return redirect(url_for('auth.profile_oauth'))
コード例 #3
0
    def test(self):
        oauth_auth: SessionAuth = SessionAuth.create_from_oauth(
            'github',
            {
                'email': self.user.email,
                'login': self.user.login,
                'id': self.user.github_id,
            })

        self.assertTrue(oauth_auth.user.email, self.user.email)
        self.assertTrue(oauth_auth.user.login, self.user.login)
        self.assertTrue(oauth_auth.user.id, self.user.id)
コード例 #4
0
    def get(self):
        user = session['auth'].user
        # разрешаем отвязывать только при наличии пароля, иначе нельзя будет войти
        if user.password:
            User.query.filter_by(login=user.login).update({
                'github_id': '',
                'is_oauth': False,
                'is_aproved': True,
            })

            session.get('auth').logout()
            session['auth'] = SessionAuth(True, user)

            flash('Ваш аккаунт был отвязан от GitHub.', 'info')
            return redirect(url_for('auth.profile'))

        flash('Для отвязки аккаунта у вас должен быть установлен пароль.', 'error')
        return redirect(url_for('auth.profile_oauth'))
コード例 #5
0
    def post(self):
        form = self.form(request.form)

        if not form.validate():
            return render_template(self.template, **{'form': form})

        login = request.form['login']
        password = request.form['password']

        user = User.query.filter_by(login=login, ).first()

        if user and User.check_password(user, password):
            if not user.is_aproved:
                flash(
                    'Завершите регистрацию, пройдя по ссылке, отправленной на почту'
                )
                return redirect(url_for('auth.login'))
            session['auth'] = SessionAuth(True, user)
        return redirect('/')
コード例 #6
0
    def post(self):
        self.context['form'] = form = self.form(request.form)

        if not form.validate():
            return render_template(self.template, **self.context)

        login = request.form['login']
        password = request.form['password']

        user = User.query.filter_by(login=login, ).first()

        if user and User.check_password(user, password):
            if not user.is_aproved:
                flash(
                    'Завершите регистрацию, пройдя по ссылке, отправленной на почту',
                    'error')
                return redirect(url_for('auth.login'))
            session['auth'] = SessionAuth(True, user)
            if request.referrer and 'answer' in request.referrer:
                return redirect(request.referrer)
            return redirect(url_for('index.home'))
        flash('Неверный логин или пароль!', 'error')
        return render_template(self.template, **self.context)
コード例 #7
0
 def test(self):
     github_profile: dict = adapt_remote_profile('github', get_github_profile_mock())
     github_auth: SessionAuth = SessionAuth.create_from_oauth('github', github_profile)
     user: User = github_auth.user
     self.assertEqual(user.email, github_profile['email'])
     self.assertEqual(user.login, github_profile['login'])