added db migrations and group support, still problems with json serialization

This commit is contained in:
Tobias Kurze
2019-04-02 16:10:46 +02:00
parent 024f063bea
commit 8cf8632c8c
10 changed files with 295 additions and 10 deletions

View File

@@ -13,12 +13,13 @@ from functools import wraps
from random import randint
from flask_login import logout_user, login_user
from typing import Iterable
from werkzeug.routing import BuildError
from backend import db, app
from backend.api import auth_api_bp
from backend.auth import AUTH_PROVIDERS, oidc_auth
from backend.models.user_model import User
from backend.models.user_model import User, Group
def create_jwt(user: User, validity_min=30):
@@ -68,20 +69,40 @@ def login():
return jsonify({'token': token.decode('UTF-8')})
def check_and_create_groups(groups: Iterable[str]):
user_groups = []
for g in groups:
group = Group.get_by_name(g)
if group is None:
group = Group(name=g)
db.session.add(group)
user_groups.append(group)
db.session.commit()
return user_groups
def create_or_retrieve_user_from_userinfo(userinfo):
try:
email = userinfo["email"]
except KeyError:
return None
user_groups = check_and_create_groups(groups=userinfo.get("memberOf", []))
user = User.get_by_identifier(email)
if user is not None:
app.logger.info("user found")
app.logger.info("user found -> update user")
user.first_name = userinfo.get("given_name", "")
user.last_name = userinfo.get("family_name", "")
for g in user_groups:
user.groups.append(g)
db.session.commit()
return user
user = User(email=email, first_name=userinfo.get("given_name", ""),
last_name=userinfo.get("family_name", ""))
last_name=userinfo.get("family_name", ""), external_user=True,
groups=userinfo.get("memberOf", []))
app.logger.info("creating new user")
@@ -93,7 +114,10 @@ def create_or_retrieve_user_from_userinfo(userinfo):
@auth_api_bp.route('/oidc', methods=['GET'])
@oidc_auth.oidc_auth()
def oidc():
user = create_or_retrieve_user_from_userinfo(flask.session['userinfo'])
return jsonify(user.to_dict())
if user is None:
return "Could not authenticate: could not find or create user.", 401
if current_app.config.get("AUTH_RETURN_EXTERNAL_JWT", False):