41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
# 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('/<id>', 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
|