about summary refs log tree commit diff
path: root/wqflask/wqflask/oauth2/routes.py
diff options
context:
space:
mode:
Diffstat (limited to 'wqflask/wqflask/oauth2/routes.py')
-rw-r--r--wqflask/wqflask/oauth2/routes.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/wqflask/wqflask/oauth2/routes.py b/wqflask/wqflask/oauth2/routes.py
index deb540e8..83994284 100644
--- a/wqflask/wqflask/oauth2/routes.py
+++ b/wqflask/wqflask/oauth2/routes.py
@@ -1,4 +1,5 @@
 """Routes for the OAuth2 auth system in GN3"""
+import requests
 from urllib.parse import urljoin
 
 from pymonad.maybe import Just, Maybe, Nothing
@@ -72,6 +73,39 @@ def logout():
 
     return redirect("/")
 
+@oauth2.route("/register-user", methods=["GET", "POST"])
+def register_user():
+    if user_logged_in():
+        next_endpoint=request.args.get("next", url_for("/"))
+        flash(("You cannot register a new user while logged in. "
+               "Please logout to register a new user."),
+              "alert-danger")
+        return redirect(next_endpoint)
+
+    if request.method == "GET":
+        return render_template("oauth2/register_user.html")
+
+    config = app.config
+    form = request.form
+    response = requests.post(
+        urljoin(config["GN_SERVER_URL"], "oauth2/register-user"),
+        data = {
+            "user_name": form.get("user_name"),
+            "email": form.get("email_address"),
+            "password": form.get("password"),
+            "confirm_password": form.get("confirm_password")})
+    results = response.json()
+    if "error" in results:
+        error_messages = tuple(
+            f"{results['error']}: {msg.strip()}"
+            for msg in results.get("error_description").split("::"))
+        for message in error_messages:
+            flash(message, "alert-danger")
+        return redirect(url_for("oauth2.register_user"))
+
+    flash("Registration successful! Please login to continue.", "alert-success")
+    return redirect(url_for("oauth2.login"))
+
 @oauth2.route("/register-client", methods=["GET", "POST"])
 @require_oauth2
 def register_client():