# Copyright (c) 2019. Tobias Kurze """ This module provides functions related to authentication through the API. For example: listing of available auth providers or registration of users. Login through API does not start a new session, but instead returns JWT. """ import flask from datetime import datetime, timedelta import jwt from flask import request, jsonify, current_app, url_for from flask_jwt_extended import jwt_required 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, group_api_bp from backend.auth import AUTH_PROVIDERS, oidc_auth from backend.models.user_model import User, Group @group_api_bp.route('/', methods=['GET']) @jwt_required def get_group(): 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): token = jwt.encode(flask.session['id_token'], current_app.config['SECRET_KEY']) else: token = create_jwt(user) return token