aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--wqflask/wqflask/oauth2/checks.py7
-rw-r--r--wqflask/wqflask/oauth2/client.py32
-rw-r--r--wqflask/wqflask/oauth2/data.py18
-rw-r--r--wqflask/wqflask/oauth2/request_utils.py12
-rw-r--r--wqflask/wqflask/oauth2/users.py14
5 files changed, 47 insertions, 36 deletions
diff --git a/wqflask/wqflask/oauth2/checks.py b/wqflask/wqflask/oauth2/checks.py
index 3b6d2471..38561c6f 100644
--- a/wqflask/wqflask/oauth2/checks.py
+++ b/wqflask/wqflask/oauth2/checks.py
@@ -27,11 +27,12 @@ def require_oauth2(func):
return redirect("/")
def __with_token__(token):
+ from utility.tools import (
+ GN_SERVER_URL, OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET)
client = OAuth2Session(
- config["OAUTH2_CLIENT_ID"], config["OAUTH2_CLIENT_SECRET"],
- token=token)
+ OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET, token=token)
resp = client.get(
- urljoin(config["GN_SERVER_URL"], "oauth2/user"))
+ urljoin(GN_SERVER_URL, "oauth2/user"))
user_details = resp.json()
if not user_details.get("error", False):
return func(*args, **kwargs)
diff --git a/wqflask/wqflask/oauth2/client.py b/wqflask/wqflask/oauth2/client.py
index b992f0ad..2a06b156 100644
--- a/wqflask/wqflask/oauth2/client.py
+++ b/wqflask/wqflask/oauth2/client.py
@@ -16,10 +16,11 @@ SCOPE = ("profile group role resource register-client user masquerade "
"introspect migrate-data")
def oauth2_client():
- config = app.config
def __client__(token) -> OAuth2Session:
+ from utility.tools import (
+ GN_SERVER_URL, OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET)
return OAuth2Session(
- config["OAUTH2_CLIENT_ID"], config["OAUTH2_CLIENT_SECRET"],
+ OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET,
scope=SCOPE, token_endpoint_auth_method="client_secret_post",
token=token)
return session.user_token().either(
@@ -38,12 +39,13 @@ def __no_token__(_err) -> Left:
def oauth2_get(uri_path: str, data: dict = {}, **kwargs) -> Either:
def __get__(token) -> Either:
- config = app.config
+ from utility.tools import (
+ GN_SERVER_URL, OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET)
client = OAuth2Session(
- config["OAUTH2_CLIENT_ID"], config["OAUTH2_CLIENT_SECRET"],
+ OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET,
token=token, scope=SCOPE)
resp = client.get(
- urljoin(config["GN_SERVER_URL"], uri_path),
+ urljoin(GN_SERVER_URL, uri_path),
data=data,
**kwargs)
if resp.status_code == 200:
@@ -57,12 +59,13 @@ def oauth2_post(
uri_path: str, data: Optional[dict] = None, json: Optional[dict] = None,
**kwargs) -> Either:
def __post__(token) -> Either:
- config = app.config
+ from utility.tools import (
+ GN_SERVER_URL, OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET)
client = OAuth2Session(
- config["OAUTH2_CLIENT_ID"], config["OAUTH2_CLIENT_SECRET"],
+ OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET,
token=token, scope=SCOPE)
resp = client.post(
- urljoin(config["GN_SERVER_URL"], uri_path), data=data, json=json,
+ urljoin(GN_SERVER_URL, uri_path), data=data, json=json,
**kwargs)
if resp.status_code == 200:
return Right(resp.json())
@@ -72,21 +75,22 @@ def oauth2_post(
return session.user_token().either(__no_token__, __post__)
def no_token_get(uri_path: str, **kwargs) -> Either:
- config = app.config
- resp = requests.get(urljoin(config["GN_SERVER_URL"], uri_path), **kwargs)
+ from utility.tools import GN_SERVER_URL
+ resp = requests.get(urljoin(GN_SERVER_URL, uri_path), **kwargs)
if resp.status_code == 200:
return Right(resp.json())
return Left(resp)
def no_token_post(uri_path: str, **kwargs) -> Either:
- config = app.config
+ from utility.tools import (
+ GN_SERVER_URL, OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET)
data = kwargs.get("data", {})
the_json = kwargs.get("json", {})
request_data = {
**data,
**the_json,
- "client_id": config["OAUTH2_CLIENT_ID"],
- "client_secret": config["OAUTH2_CLIENT_SECRET"]
+ "client_id": OAUTH2_CLIENT_ID,
+ "client_secret": OAUTH2_CLIENT_SECRET
}
new_kwargs = {
**{
@@ -95,7 +99,7 @@ def no_token_post(uri_path: str, **kwargs) -> Either:
},
("data" if bool(data) else "json"): request_data
}
- resp = requests.post(urljoin(config["GN_SERVER_URL"], uri_path),
+ resp = requests.post(urljoin(GN_SERVER_URL, uri_path),
**new_kwargs)
if resp.status_code == 200:
return Right(resp.json())
diff --git a/wqflask/wqflask/oauth2/data.py b/wqflask/wqflask/oauth2/data.py
index 8b8f4f20..795e9ea3 100644
--- a/wqflask/wqflask/oauth2/data.py
+++ b/wqflask/wqflask/oauth2/data.py
@@ -18,8 +18,9 @@ from .client import oauth2_get, oauth2_post
data = Blueprint("data", __name__)
def __search_mrna__(query, template, **kwargs):
+ from utility.tools import GN_SERVER_URL
species_name = kwargs["species_name"]
- search_uri = urljoin(app.config["GN_SERVER_URL"], "oauth2/data/search")
+ search_uri = urljoin(GN_SERVER_URL, "oauth2/data/search")
datasets = oauth2_get(
"oauth2/data/search",
json = {
@@ -42,8 +43,9 @@ def __selected_datasets__():
request.form.get("selected", []))
def __search_genotypes__(query, template, **kwargs):
+ from utility.tools import GN_SERVER_URL
species_name = kwargs["species_name"]
- search_uri = urljoin(app.config["GN_SERVER_URL"], "oauth2/data/search")
+ search_uri = urljoin(GN_SERVER_URL, "oauth2/data/search")
datasets = oauth2_get(
"oauth2/data/search",
json = {
@@ -57,6 +59,7 @@ def __search_genotypes__(query, template, **kwargs):
return render_ui(template, search_uri=search_uri, **datasets, **kwargs)
def __search_phenotypes__(query, template, **kwargs):
+ from utility.tools import GN_SERVER_URL
page = int(request.args.get("page", 1))
per_page = int(request.args.get("per_page", 50))
selected_traits = request.form.getlist("selected_traits")
@@ -68,10 +71,10 @@ def __search_phenotypes__(query, template, **kwargs):
template, traits=[], per_page=per_page, query=query,
selected_traits=selected_traits, search_results=search_results,
search_endpoint=urljoin(
- app.config["GN_SERVER_URL"], "oauth2/data/search"),
- gn_server_url = app.config["GN_SERVER_URL"],
+ GN_SERVER_URL, "oauth2/data/search"),
+ gn_server_url = GN_SERVER_URL,
results_endpoint=urljoin(
- app.config["GN_SERVER_URL"],
+ GN_SERVER_URL,
f"oauth2/data/search/phenotype/{job_id}"),
**kwargs)
return oauth2_get("oauth2/data/search", json={
@@ -79,7 +82,7 @@ def __search_phenotypes__(query, template, **kwargs):
"species_name": kwargs["species_name"],
"per_page": per_page,
"page": page,
- "gn3_server_uri": app.config["GN_SERVER_URL"]
+ "gn3_server_uri": GN_SERVER_URL
}).either(
lambda err: __search_error__(process_error(err)),
__search_success__)
@@ -121,6 +124,7 @@ def json_search_mrna() -> Response:
@data.route("/phenotype/search", methods=["POST"])
def json_search_phenotypes() -> Response:
"""Search for phenotypes."""
+ from utility.tools import GN_SERVER_URL
form = request.json
def __handle_error__(err):
error = process_error(err)
@@ -134,7 +138,7 @@ def json_search_phenotypes() -> Response:
"query": form.get("query", ""),
"per_page": int(form.get("per_page", 50)),
"page": int(form.get("page", 1)),
- "gn3_server_uri": app.config["GN_SERVER_URL"],
+ "gn3_server_uri": GN_SERVER_URL,
"selected_traits": form.get("selected_traits", [])
}).either(__handle_error__, jsonify)
diff --git a/wqflask/wqflask/oauth2/request_utils.py b/wqflask/wqflask/oauth2/request_utils.py
index d994cd36..b9f2aa7d 100644
--- a/wqflask/wqflask/oauth2/request_utils.py
+++ b/wqflask/wqflask/oauth2/request_utils.py
@@ -10,12 +10,13 @@ from flask import (
from .client import SCOPE, oauth2_get
def authserver_authorise_uri():
+ from utility.tools import GN_SERVER_URL, OAUTH2_CLIENT_ID
req_baseurl = urlparse(request.base_url)
host_uri = f"{req_baseurl.scheme}://{req_baseurl.netloc}/"
return urljoin(
- app.config["GN_SERVER_URL"],
+ GN_SERVER_URL,
"oauth2/authorise?response_type=code"
- f"&client_id={app.config['OAUTH2_CLIENT_ID']}"
+ f"&client_id={OAUTH2_CLIENT_ID}"
f"&redirect_uri={urljoin(host_uri, 'oauth2/code')}")
def raise_unimplemented():
@@ -30,13 +31,14 @@ def process_error(error: Response,
message: str=("Requested endpoint was not found on the API "
"server.")
) -> dict:
- if error.status_code == 404:
+ if error.status_code in (401, 404):
try:
- msg = error.json()["error_description"]
+ err = error.json()
+ msg = err.get("error_description", f"{error.reason}")
except simplejson.errors.JSONDecodeError as _jde:
msg = message
return {
- "error": "NotFoundError",
+ "error": error.reason,
"error_message": msg,
"error_description": msg,
"status_code": error.status_code
diff --git a/wqflask/wqflask/oauth2/users.py b/wqflask/wqflask/oauth2/users.py
index 51a4ca4c..1ff23d17 100644
--- a/wqflask/wqflask/oauth2/users.py
+++ b/wqflask/wqflask/oauth2/users.py
@@ -65,19 +65,19 @@ def request_add_to_group() -> Response:
@users.route("/login", methods=["GET", "POST"])
def login():
"""Route to allow users to sign up."""
+ from utility.tools import GN_SERVER_URL
next_endpoint=request.args.get("next", False)
if request.method == "POST":
form = request.form
client = oauth2_client()
- config = app.config
try:
token = client.fetch_token(
- urljoin(config["GN_SERVER_URL"], "oauth2/token"),
+ urljoin(GN_SERVER_URL, "oauth2/token"),
username=form.get("email_address"),
password=form.get("password"),
grant_type="password")
- session.set_token(token)
+ session.set_user_token(token)
udets = user_details()
session.set_user_details({
"user_id": UUID(udets["user_id"]),
@@ -101,10 +101,10 @@ def login():
@users.route("/logout", methods=["GET", "POST"])
def logout():
+ from utility.tools import GN_SERVER_URL
if user_logged_in():
- config = app.config
resp = oauth2_client().revoke_token(
- urljoin(config["GN_SERVER_URL"], "oauth2/revoke"))
+ urljoin(GN_SERVER_URL, "oauth2/revoke"))
the_session = session.session_info()
if not bool(the_session["masquerading"]):
# Normal session - clear and go back.
@@ -124,6 +124,7 @@ def logout():
@users.route("/register", methods=["GET", "POST"])
def register_user():
+ from utility.tools import GN_SERVER_URL
if user_logged_in():
next_endpoint=request.args.get("next", "/")
flash(("You cannot register a new user while logged in. "
@@ -134,10 +135,9 @@ def register_user():
if request.method == "GET":
return render_ui("oauth2/register_user.html")
- config = app.config
form = request.form
response = requests.post(
- urljoin(config["GN_SERVER_URL"], "oauth2/user/register"),
+ urljoin(GN_SERVER_URL, "oauth2/user/register"),
data = {
"user_name": form.get("user_name"),
"email": form.get("email_address"),