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'))
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'))
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)
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'))
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('/')
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)
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'])