about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2023-01-19 11:59:03 +0300
committerFrederick Muriuki Muriithi2023-01-19 11:59:57 +0300
commitb1177ae6e48410ec4919d27577dab960a266b2dd (patch)
tree747c2772cc92cf632d74b1d314333034c1236779
parent2009ff99ca7d07304bc182c01c76e7a84c5a0246 (diff)
downloadgenenetwork2-b1177ae6e48410ec4919d27577dab960a266b2dd.tar.gz
oauth2: Implement user registration.
-rw-r--r--wqflask/wqflask/oauth2/routes.py34
-rw-r--r--wqflask/wqflask/templates/oauth2/register_user.html61
-rw-r--r--wqflask/wqflask/views.py1
3 files changed, 96 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():
diff --git a/wqflask/wqflask/templates/oauth2/register_user.html b/wqflask/wqflask/templates/oauth2/register_user.html
new file mode 100644
index 00000000..0cdcd5ff
--- /dev/null
+++ b/wqflask/wqflask/templates/oauth2/register_user.html
@@ -0,0 +1,61 @@
+{%extends "base.html"%}
+{%block title%}Register New User{%endblock%}
+{%block content%}
+<div class="container" style="min-width: 1250px;">
+  <h3>Register User</h3>
+
+  <form class="form-horizontal" action="{{url_for('oauth2.register_user')}}"
+	method="POST" id="oauth2-register-user-form">
+    <fieldset>
+      <legend>Register User</legend>
+      {{flash_me()}}
+      <div class="form-group">
+	<label class="col-xs-1 control-label" for="name"
+	       style="text-align:left;">Name</label>
+	<div style="margin-left:20px;" class="col-xs-4">
+	  <input id="user_name" name="user_name" type="text"
+		 placeholder="Your Name" size="50"
+		 class="form-control" required="required" />
+	</div>
+      </div>
+
+      <div class="form-group">
+	<label class="col-xs-1 control-label" for="email_address"
+	       style="text-align:left;">Email</label>
+	<div style="margin-left:20px;" class="col-xs-4">
+	  <input id="email_address" name="email_address" type="email"
+		 placeholder="your@email.address" size="50"
+		 class="form-control" required="required" />
+	</div>
+      </div>
+
+      <div class="form-group">
+	<label class="col-xs-1 control-label" for="password"
+	       style="text-align:left;">Password</label>
+	<div style="margin-left:20px;" class="col-xs-4">
+	  <input id="password" name="password" type="password"
+		 size="50" class="form-control"
+		 placeholder="your password" required="required" />
+	</div>
+      </div>
+
+      <div class="form-group">
+	<label class="col-xs-1 control-label" for="confirm_password"
+	       style="text-align:left;">Confirm Password</label>
+	<div style="margin-left:20px;" class="col-xs-4">
+	  <input id="confirm_password" name="confirm_password" type="password"
+		 size="50" class="form-control" required="required"
+		 placeholder="your password, again" />
+	</div>
+      </div>
+
+      <div class="form-group">
+	<div style="margin-left:20px;" class="col-xs-4 controls">
+	  <input type="submit" class="btn btn-primary form-control" id="submit" name="submit"
+		 value="Register" />
+	</div>
+      </div>
+    </fieldset>
+  </form>
+</div>
+{%endblock%}
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index a7a43a22..5f91edc8 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -874,6 +874,7 @@ def corr_compute_page():
             return render_template("correlation_page.html", **output)
 
         if jobs.completed_erroneously(job):
+            ## The "parseable" error report is actually in STDOUT
             output = json.loads(job.get("stdout", "{}"))
             return render_template("correlation_error_page.html", error=output)