aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2023-06-16 08:28:52 +0300
committerFrederick Muriuki Muriithi2023-06-20 13:36:50 +0300
commitc0fd60447099ea4ce215d399cadb18af1918e6fb (patch)
tree4f70786f2061d9e07184abec8f2b3f0492e8685e
parent3ac57ba09a504bf0f03c0786c1d2504363a660ec (diff)
downloadgenenetwork2-c0fd60447099ea4ce215d399cadb18af1918e6fb.tar.gz
Blueprints for user_session and user_login modules.
-rw-r--r--wqflask/wqflask/__init__.py24
-rw-r--r--wqflask/wqflask/top_level_routes.py4
-rw-r--r--wqflask/wqflask/user_login.py57
-rw-r--r--wqflask/wqflask/user_session.py38
4 files changed, 73 insertions, 50 deletions
diff --git a/wqflask/wqflask/__init__.py b/wqflask/wqflask/__init__.py
index 45b5a14b..9a8460e4 100644
--- a/wqflask/wqflask/__init__.py
+++ b/wqflask/wqflask/__init__.py
@@ -19,7 +19,7 @@ from utility.configuration import tempdir, override_from_envvars
from gn3.authentication import DataRole, AdminRole
from wqflask.database import parse_db_url
-
+from wqflask.user_session import UserSession
from wqflask.group_manager import group_management
from wqflask.resource_manager import resource_management
from wqflask.metadata_edits import metadata_edit
@@ -129,6 +129,26 @@ def include_admin_role_class():
def include_data_role_class():
return {'DataRole': DataRole}
+@app.before_request
+def get_user_session():
+ g.user_session = UserSession()
+ # I think this should solve the issue of deleting the cookie and redirecting to the home page when a user's session has expired
+ if not g.user_session:
+ response = make_response(redirect(url_for('login')))
+ response.set_cookie('session_id_v2', '', expires=0)
+ return response
+
+
+@app.after_request
+def set_user_session(response):
+ if hasattr(g, 'user_session'):
+ if not request.cookies.get(g.user_session.cookie_name):
+ response.set_cookie(g.user_session.cookie_name,
+ g.user_session.cookie)
+ else:
+ response.set_cookie('session_id_v2', '', expires=0)
+ return response
+
from wqflask import group_manager
from wqflask import resource_manager
@@ -138,8 +158,6 @@ from wqflask import gsearch
from wqflask import update_search_results
from wqflask import docs
from wqflask import db_info
-from wqflask import user_login
-from wqflask import user_session
import wqflask.views
import wqflask.partial_correlations_views
diff --git a/wqflask/wqflask/top_level_routes.py b/wqflask/wqflask/top_level_routes.py
index 680736ec..a1f26725 100644
--- a/wqflask/wqflask/top_level_routes.py
+++ b/wqflask/wqflask/top_level_routes.py
@@ -4,6 +4,8 @@ from flask import Blueprint
from .api import api_bp
# from .views import main_views
from base.trait import trait_bp
+from .user_login import ulogin_bp
+from .user_session import usession_bp
from .collect import collections_bp
from .partial_correlations_views import pcorrs_bp
@@ -13,7 +15,9 @@ toplevel = Blueprint("toplevel", __name__)
toplevel.register_blueprint(trait_bp)
toplevel.register_blueprint(pcorrs_bp)
+toplevel.register_blueprint(ulogin_bp)
# toplevel.register_blueprint(main_views)
+toplevel.register_blueprint(usession_bp)
toplevel.register_blueprint(collections_bp)
toplevel.register_blueprint(api_bp, url_prefix="/api")
diff --git a/wqflask/wqflask/user_login.py b/wqflask/wqflask/user_login.py
index ae61edb0..69ae9e10 100644
--- a/wqflask/wqflask/user_login.py
+++ b/wqflask/wqflask/user_login.py
@@ -7,24 +7,34 @@ import hmac
import base64
import requests
+from smtplib import SMTP
import simplejson as json
+from flask import (
+ g,
+ Flask,
+ flash,
+ abort,
+ url_for,
+ request,
+ redirect,
+ Blueprint,
+ make_response,
+ render_template,
+ current_app as app)
-from flask import (Flask, g, render_template, url_for, request, make_response,
- redirect, flash, abort)
-
-from wqflask import app
from wqflask import pbkdf2
from wqflask.user_session import UserSession
from utility import hmac
+from utility.configuration import get_setting
from utility.redis_tools import is_redis_available, get_redis_conn, get_user_id, get_user_by_unique_column, set_user_attribute, save_user, save_verification_code, check_verification_code, get_user_collections, save_collections
-Redis = get_redis_conn()
-from smtplib import SMTP
-from utility.tools import SMTP_CONNECT, SMTP_USERNAME, SMTP_PASSWORD, LOG_SQL_ALCHEMY, GN2_BRANCH_URL
+Redis = get_redis_conn()
THREE_DAYS = 60 * 60 * 24 * 3
+ulogin_bp = Blueprint("user_login", __name__)
+
def timestamp():
return datetime.datetime.utcnow().isoformat()
@@ -116,13 +126,14 @@ def send_email(toaddr, msg, fromaddr="no-reply@genenetwork.org"):
'UNKNOWN' TLS is used
"""
- if SMTP_USERNAME == 'UNKNOWN':
- server = SMTP(SMTP_CONNECT)
+ if get_setting(app, "SMTP_USERNAME") == 'UNKNOWN':
+ server = SMTP(get_setting(app, "SMTP_CONNECT"))
server.sendmail(fromaddr, toaddr, msg)
else:
- server = SMTP(SMTP_CONNECT)
+ server = SMTP(get_setting(app, "SMTP_CONNECT"))
server.starttls()
- server.login(SMTP_USERNAME, SMTP_PASSWORD)
+ server.login(get_setting(app, "SMTP_USERNAME"),
+ get_setting(app, "SMTP_PASSWORD"))
server.sendmail(fromaddr, toaddr, msg)
server.quit()
@@ -149,7 +160,7 @@ def send_invitation_email(user_email, temp_password, template_name="email/user_i
return {"recipient": recipient, "subject": subject, "body": body}
-@app.route("/manage/verify_email")
+@ulogin_bp.route("/manage/verify_email")
def verify_email():
if 'code' in request.args:
user_details = check_verification_code(request.args['code'])
@@ -169,7 +180,7 @@ def verify_email():
"Invalid code: Password reset code does not exist or might have expired!", "error")
-@app.route("/n/login", methods=('GET', 'POST'))
+@ulogin_bp.route("/n/login", methods=('GET', 'POST'))
def login():
params = request.form if request.form else request.args
if not params: # ZS: If coming to page for first time
@@ -249,7 +260,7 @@ def login():
return response
-@app.route("/n/login/github_oauth2", methods=('GET', 'POST'))
+@ulogin_bp.route("/n/login/github_oauth2", methods=('GET', 'POST'))
def github_oauth2():
from utility.tools import GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, GITHUB_AUTH_URL
code = request.args.get("code")
@@ -292,7 +303,7 @@ def get_github_user_details(access_token):
return json.loads(result)
-@app.route("/n/login/orcid_oauth2", methods=('GET', 'POST'))
+@ulogin_bp.route("/n/login/orcid_oauth2", methods=('GET', 'POST'))
def orcid_oauth2():
from uuid import uuid4
from utility.tools import ORCID_CLIENT_ID, ORCID_CLIENT_SECRET, ORCID_TOKEN_URL, ORCID_AUTH_URL
@@ -304,7 +315,7 @@ def orcid_oauth2():
"client_id": ORCID_CLIENT_ID,
"client_secret": ORCID_CLIENT_SECRET,
"grant_type": "authorization_code",
- "redirect_uri": GN2_BRANCH_URL + "n/login/orcid_oauth2",
+ "redirect_uri": get_setting(app, "GN2_BRANCH_URL") + "n/login/orcid_oauth2",
"code": code
}
@@ -339,7 +350,7 @@ def get_github_user_details(access_token):
return json.loads(result)
-@app.route("/n/logout")
+@ulogin_bp.route("/n/logout")
def logout():
UserSession().delete_session()
flash("You are now logged out. We hope you come back soon!")
@@ -349,7 +360,7 @@ def logout():
return response
-@app.route("/n/forgot_password", methods=['GET'])
+@ulogin_bp.route("/n/forgot_password", methods=['GET'])
def forgot_password():
"""Entry point for forgotten password"""
print("ARGS: ", request.args)
@@ -391,7 +402,7 @@ def send_forgot_password_email(verification_email):
return subject
-@app.route("/n/forgot_password_submit", methods=('POST',))
+@ulogin_bp.route("/n/forgot_password_submit", methods=('POST',))
def forgot_password_submit():
"""When a forgotten password form is submitted we get here"""
params = request.form
@@ -415,7 +426,7 @@ def forgot_password_submit():
return redirect(url_for("forgot_password"))
-@app.route("/n/password_reset", methods=['GET'])
+@ulogin_bp.route("/n/password_reset", methods=['GET'])
def password_reset():
"""Entry point after user clicks link in E-mail"""
verification_code = request.args.get('code')
@@ -434,7 +445,7 @@ def password_reset():
return redirect(url_for("login"))
-@app.route("/n/password_reset_step2", methods=('POST',))
+@ulogin_bp.route("/n/password_reset_step2", methods=('POST',))
def password_reset_step2():
"""Handle confirmation E-mail for password reset"""
errors = []
@@ -496,7 +507,7 @@ def register_user(params):
return errors
-@app.route("/n/register", methods=('GET', 'POST'))
+@ulogin_bp.route("/n/register", methods=('GET', 'POST'))
def register():
errors = []
@@ -514,6 +525,6 @@ def register():
return render_template("new_security/register_user.html", values=params, errors=errors)
-@app.errorhandler(401)
+@ulogin_bp.errorhandler(401)
def unauthorized(error):
return redirect(url_for('login'))
diff --git a/wqflask/wqflask/user_session.py b/wqflask/wqflask/user_session.py
index 39b2aec1..54bfb609 100644
--- a/wqflask/wqflask/user_session.py
+++ b/wqflask/wqflask/user_session.py
@@ -4,10 +4,19 @@ import uuid
import simplejson as json
-from flask import (Flask, g, render_template, url_for, request, make_response,
- redirect, flash, abort)
+from flask import (
+ g,
+ Flask,
+ flash,
+ abort,
+ url_for,
+ request,
+ redirect,
+ Blueprint,
+ make_response,
+ render_template,
+ current_app as app)
-from wqflask import app
from utility import hmac
from utility.redis_tools import get_redis_conn, get_user_id, get_user_by_unique_column, set_user_attribute, get_user_collections, save_collections
@@ -17,26 +26,7 @@ Redis = get_redis_conn()
THREE_DAYS = 60 * 60 * 24 * 3
THIRTY_DAYS = 60 * 60 * 24 * 30
-
-@app.before_request
-def get_user_session():
- g.user_session = UserSession()
- # I think this should solve the issue of deleting the cookie and redirecting to the home page when a user's session has expired
- if not g.user_session:
- response = make_response(redirect(url_for('login')))
- response.set_cookie('session_id_v2', '', expires=0)
- return response
-
-
-@app.after_request
-def set_user_session(response):
- if hasattr(g, 'user_session'):
- if not request.cookies.get(g.user_session.cookie_name):
- response.set_cookie(g.user_session.cookie_name,
- g.user_session.cookie)
- else:
- response.set_cookie('session_id_v2', '', expires=0)
- return response
+usession_bp = Blueprint("user_session", __name__)
def verify_cookie(cookie):
@@ -55,7 +45,7 @@ def create_signed_cookie():
return the_uuid, uuid_signed
-@app.route("/user/manage", methods=('GET', 'POST'))
+@usession_bp.route("/user/manage", methods=('GET', 'POST'))
def manage_user():
params = request.form if request.form else request.args
if 'new_full_name' in params: