diff --git a/app/api/route_register.py b/app/api/route_register.py index 04106fed..f04cbff7 100644 --- a/app/api/route_register.py +++ b/app/api/route_register.py @@ -122,12 +122,15 @@ def valid_temp_user(): # recherche de l'utilisateur temporaire correspondant au token temp_user = db.session.query(TempUser).filter(token == TempUser.token_role).first() if not temp_user: - return { - "msg": f""" + return ( + { + "msg": f""" Il n'y a pas d'utilisateur temporaire correspondant au token fourni {token}.
Il se peut que la demande de création de compte ai déjà été validée, ou bien que l'adresse de validation soit erronée.
""" - }, 422 + }, + 422, + ) req_data = temp_user.as_dict() # Récupération du groupe par défaut @@ -167,6 +170,7 @@ def set_cor_role_token(email): Fonction pour la création d'un token associé a un id_role Parametres : email """ + if not email: return {"msg": "Aucun email"}, 404 @@ -220,7 +224,6 @@ def create_cor_role_token(): data = request.get_json() email = data["email"] - return set_cor_role_token(email) diff --git a/app/app.py b/app/app.py index 24ef03b6..99352e48 100644 --- a/app/app.py +++ b/app/app.py @@ -7,10 +7,19 @@ import json import logging from pkg_resources import iter_entry_points -from urllib.parse import urlsplit +from urllib.parse import urlsplit, urlencode from pathlib import Path -from flask import Flask, redirect, url_for, request, session, render_template, g +from flask import ( + Flask, + Response, + redirect, + url_for, + request, + session, + render_template, + g, +) from werkzeug.middleware.proxy_fix import ProxyFix from sqlalchemy.exc import ProgrammingError from flask_migrate import Migrate @@ -19,6 +28,7 @@ from pypnusershub.db.models import Application from pypnusershub.login_manager import login_manager +from app.utils.errors import handle_unauthenticated_request migrate = Migrate() @@ -129,4 +139,6 @@ def inject_user(): route_register.route, url_prefix="/api_register" ) # noqa + app.login_manager.unauthorized_handler(handle_unauthenticated_request) + return app diff --git a/app/utils/errors.py b/app/utils/errors.py new file mode 100644 index 00000000..93f0bde8 --- /dev/null +++ b/app/utils/errors.py @@ -0,0 +1,23 @@ +from flask import current_app, Response, request, redirect, url_for +from urllib.parse import urlencode +from werkzeug.exceptions import Unauthorized + + +# Unauthorized means disconnected +# (logged but not allowed to perform an action = Forbidden) + + +def handle_unauthenticated_request(): + """ + To avoid returning the login page html when a route is used by geonature API + this function overrides `LoginManager.unauthorized()` from `flask-login` . + + Returns + ------- + flask.Response + response + """ + if "application/json" in request.headers.get("Content-Type", ""): + raise Unauthorized + else: + return redirect(url_for("login.login", next=request.path))