diff --git a/login_provider/app.py b/login_provider/app.py index 8f64f535da46aaa2eae43251dc79b68b39484ff2..0fd85b00a8d9cae7cfaa7815be586641b7f235dd 100644 --- a/login_provider/app.py +++ b/login_provider/app.py @@ -1,18 +1,12 @@ from flask import abort, Flask, redirect, request, render_template, url_for from os import urandom, environ from hydra_client import HydraAdmin -from sqlalchemy.ext.hybrid import hybrid_property, hybrid_method from wtforms import SubmitField, StringField, PasswordField from flask_wtf import FlaskForm -from wtforms.validators import required -from flask_login import UserMixin, login_user, logout_user, LoginManager, login_required, current_user -from graphqlclient import GraphQLClient -from json import loads - +from flask_login import login_user, logout_user, LoginManager, login_required, current_user +from db import User HYDRA_ADMIN_URL = environ['HYDRA_ADMIN_URL'] -GRAPHQL_URL = environ['GRAPHQL_URL'] -graphql_client = GraphQLClient(GRAPHQL_URL) app = Flask(__name__) app.config['SECRET_KEY'] = urandom(16) @@ -21,38 +15,6 @@ login_manager = LoginManager() login_manager.init_app(app) login_manager.login_view = "login" - -class User(UserMixin): - def __init__(self, username): - self.id = username - self.username = username - self.active = False - self._load_remote_user_info() - - def _load_remote_user_info(self): - querystring = '''{{ - getUser(username: "{0}"){{ - email, - active - }}}}'''.format(self.username).strip() - result = loads(graphql_client.execute(querystring)) - if "data" in result: - self.active = result["data"]["getUser"]["active"] - self.email = result["data"]["getUser"]["email"] - - def authenticate(self, password): - querystring = '''{{ - verifyPassword( - username: "{0}", - password: "{1}") - }}'''.format(self.username, password).strip() - result = loads(graphql_client.execute(querystring)) - auth = False - if "data" in result: - auth = result["data"]["verifyPassword"] - return auth - - @login_manager.user_loader def user_loader(username): user = User(username) @@ -87,7 +49,7 @@ def login(): login_form = LoginForm() if login_form.validate_on_submit(): user = User(login_form.username.data) - if user.active and user.authenticate(login_form.password.data): + if user.active and user.verify_password(login_form.password.data): login_user(user) next_url = request.args.get('next') if not is_safe_url(next): diff --git a/login_provider/db.py b/login_provider/db.py new file mode 100644 index 0000000000000000000000000000000000000000..e9b5fa6d0ff14aebd66bff28158b148e0beabb0c --- /dev/null +++ b/login_provider/db.py @@ -0,0 +1,39 @@ +from os import environ +from hydra_client import HydraAdmin +from flask_login import UserMixin +from graphqlclient import GraphQLClient +from json import loads + +GRAPHQL_URL = environ['GRAPHQL_URL'] +graphql_client = GraphQLClient(GRAPHQL_URL) + +class User(UserMixin): + def __init__(self, username): + self.id = username + self.username = username + self.active = False + self._load_remote_user_info() + + def _load_remote_user_info(self): + querystring = '''{{ + getUser(username: "{0}"){{ + email, + active + }}}}'''.format(self.username).strip() + result = loads(graphql_client.execute(querystring)) + if "data" in result: + self.active = result["data"]["getUser"]["active"] + self.email = result["data"]["getUser"]["email"] + + def verify_password(self, password): + querystring = '''{{ + verifyPassword( + username: "{0}", + password: "{1}") + }}'''.format(self.username, password).strip() + result = loads(graphql_client.execute(querystring)) + verified = False + if "data" in result: + verified = result["data"]["verifyPassword"] + return verified +