about summary refs log tree commit diff
path: root/uploader/oauth2
diff options
context:
space:
mode:
Diffstat (limited to 'uploader/oauth2')
-rw-r--r--uploader/oauth2/client.py20
-rw-r--r--uploader/oauth2/views.py16
2 files changed, 21 insertions, 15 deletions
diff --git a/uploader/oauth2/client.py b/uploader/oauth2/client.py
index b94a044..e37816d 100644
--- a/uploader/oauth2/client.py
+++ b/uploader/oauth2/client.py
@@ -4,7 +4,7 @@ import time
 import uuid
 import random
 from datetime import datetime, timedelta
-from urllib.parse import urljoin, urlparse
+from urllib.parse import urljoin, urlparse, urlencode
 
 import requests
 from flask import request, current_app as app
@@ -18,6 +18,7 @@ from authlib.integrations.requests_client import OAuth2Session
 
 from uploader import session
 import uploader.monadic_requests as mrequests
+from uploader.flask_extensions import fetch_flags
 
 SCOPE = ("profile group role resource register-client user masquerade "
          "introspect migrate-data")
@@ -157,7 +158,10 @@ def fetch_user_details() -> Either:
                 "user_id": uuid.UUID(usrdets["user_id"]),
                 "name": usrdets["name"],
                 "email": usrdets["email"],
-                "token": session.user_token()}))
+                "token": session.user_token(),
+                "logged_in": session.user_token().either(
+                    lambda _e: False, lambda _t: True)
+            }))
         return udets
     return Right(suser)
 
@@ -173,11 +177,13 @@ def authserver_authorise_uri():
     """Build up the authorisation URI."""
     req_baseurl = urlparse(request.base_url, scheme=request.scheme)
     host_uri = f"{req_baseurl.scheme}://{req_baseurl.netloc}/"
-    return urljoin(
-        authserver_uri(),
-        "auth/authorise?response_type=code"
-        f"&client_id={oauth2_clientid()}"
-        f"&redirect_uri={urljoin(host_uri, 'oauth2/code')}")
+    args = {
+        "response_type": "code",
+        "client_id": oauth2_clientid(),
+        "redirect_uri": (
+            f"{urljoin(host_uri, 'oauth2/code')}?{urlencode(fetch_flags())}")
+    }
+    return f"{urljoin(authserver_uri(), 'auth/authorise')}?{urlencode(args)}"
 
 
 def __no_token__(_err) -> Left:
diff --git a/uploader/oauth2/views.py b/uploader/oauth2/views.py
index 1ee4257..b1b740f 100644
--- a/uploader/oauth2/views.py
+++ b/uploader/oauth2/views.py
@@ -4,13 +4,13 @@ from urllib.parse import urljoin, urlparse, urlunparse
 from flask import (
     flash,
     jsonify,
-    url_for,
     request,
     redirect,
     Blueprint,
     current_app as app)
 
 from uploader import session
+from uploader.flask_extensions import url_for
 from uploader import monadic_requests as mrequests
 from uploader.monadic_requests import make_error_handler
 
@@ -33,16 +33,16 @@ def authorisation_code():
         app.logger.debug("ERROR: (%s)", error_response.content)
         flash("There was an error retrieving the authorisation token.",
               "alert alert-danger")
-        return redirect("/")
+        return redirect(url_for("base.index"))
 
     def __fail_set_user_details__(_failure):
         app.logger.debug("Fetching user details fails: %s", _failure)
         flash("Could not retrieve the user details", "alert alert-danger")
-        return redirect("/")
+        return redirect(url_for("base.index"))
 
     def __success_set_user_details__(_success):
         app.logger.debug("Session info: %s", _success)
-        return redirect("/")
+        return redirect(url_for("base.index"))
 
     def __success__(token):
         session.set_user_token(token)
@@ -53,7 +53,7 @@ def authorisation_code():
     code = request.args.get("code", "").strip()
     if not bool(code):
         flash("AuthorisationError: No code was provided.", "alert alert-danger")
-        return redirect("/")
+        return redirect(url_for("base.index"))
 
     baseurl = urlparse(request.base_url, scheme=request.scheme)
     return request_token(
@@ -87,7 +87,7 @@ def logout():
         _user_str = f"{_user['name']} ({_user['email']})"
         session.clear_session_info()
         flash("Successfully signed out.", "alert alert-success")
-        return redirect("/")
+        return redirect(url_for("base.index"))
 
     if user_logged_in():
         return session.user_token().then(
@@ -100,9 +100,9 @@ def logout():
                     "client_secret": oauth2_clientsecret()
                 })).either(
                     make_error_handler(
-                        redirect_to=redirect("/"),
+                        redirect_to=redirect(url_for("base.index")),
                         cleanup_thunk=lambda: __unset_session__(
                             session.session_info())),
                     lambda res: __unset_session__(session.session_info()))
     flash("There is no user that is currently logged in.", "alert alert-info")
-    return redirect("/")
+    return redirect(url_for("base.index"))