about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBonfaceKilz2021-10-25 12:42:11 +0300
committerBonfaceKilz2021-10-25 14:00:14 +0300
commit18e57bad1b44fece0f7b1f98bd73e5556691a3cd (patch)
tree8ad818a36c6f3252e6efbbe87501095f6036454d
parent7337cc6b141933f7b85f6e4928c6a88b73c3cbba (diff)
downloadgenenetwork2-18e57bad1b44fece0f7b1f98bd73e5556691a3cd.tar.gz
Add "POST /resources/<resource_id>/change-owner" endpoint
-rw-r--r--wqflask/wqflask/resource_manager.py31
-rw-r--r--wqflask/wqflask/templates/admin/change_resource_owner.html3
-rw-r--r--wqflask/wqflask/templates/admin/manage_resource.html3
3 files changed, 27 insertions, 10 deletions
diff --git a/wqflask/wqflask/resource_manager.py b/wqflask/wqflask/resource_manager.py
index 58c0b5cb..3371e59d 100644
--- a/wqflask/wqflask/resource_manager.py
+++ b/wqflask/wqflask/resource_manager.py
@@ -1,23 +1,24 @@
-import redis
 import json
+import redis
 import requests
 
 from flask import Blueprint
 from flask import current_app
+from flask import flash
 from flask import g
-from flask import render_template
 from flask import redirect
+from flask import render_template
 from flask import request
 from flask import url_for
 
-from urllib.parse import urljoin
 from typing import Dict, Tuple
+from urllib.parse import urljoin
 
+from wqflask.access_roles import AdminRole
+from wqflask.access_roles import DataRole
 from wqflask.decorators import edit_access_required
 from wqflask.decorators import edit_admins_access_required
 from wqflask.decorators import login_required
-from wqflask.access_roles import AdminRole
-from wqflask.access_roles import DataRole
 
 
 resource_management = Blueprint('resource_management', __name__)
@@ -55,7 +56,7 @@ def get_user_membership(conn: redis.Redis, user_id: str,
 def get_user_access_roles(
         resource_id: str,
         user_id: str,
-        gn_proxy_url: str="http://localhost:8080") -> Dict:
+        gn_proxy_url: str = "http://localhost:8080") -> Dict:
     """Get the highest access roles for a given user
 
     Args:
@@ -189,6 +190,23 @@ def view_resource_owner(resource_id: str):
         resource_id=resource_id)
 
 
+@resource_management.route("/resources/<resource_id>/change-owner",
+                           methods=('POST',))
+@edit_admins_access_required
+@login_required
+def change_owner(resource_id: str):
+    if user_id := request.form.get("new_owner"):
+        redis_conn = redis.from_url(
+            current_app.config["REDIS_URL"],
+            decode_responses=True)
+        resource = json.loads(redis_conn.hget("resources", resource_id))
+        resource["owner_id"] = user_id
+        redis_conn.hset("resources", resource_id, json.dumps(resource))
+        flash("The resource's owner has been changed.", "alert-info")
+    return redirect(url_for("resource_management.view_resource",
+                            resource_id=resource_id))
+
+
 @resource_management.route("<resource_id>/users/search", methods=('POST',))
 @edit_admins_access_required
 @login_required
@@ -204,4 +222,3 @@ def search_user(resource_id: str):
                       q in user.get("full_name")):
                 results[user.get("user_id", "")] = user
     return json.dumps(tuple(results.values()))
-
diff --git a/wqflask/wqflask/templates/admin/change_resource_owner.html b/wqflask/wqflask/templates/admin/change_resource_owner.html
index 74ee1e45..7fd84387 100644
--- a/wqflask/wqflask/templates/admin/change_resource_owner.html
+++ b/wqflask/wqflask/templates/admin/change_resource_owner.html
@@ -10,8 +10,7 @@
         <div class="page-header">
             <h1>Search for user to assign ownership to:</h1>
         </div>
-        <form id="change_owner_form" action="/resources/change_owner" method="POST">
-            <input type="hidden" name="resource_id" value="{{ resource_id }}">
+        <form id="change_owner_form" action="/resource-management/resources/{{ resource_id }}/change-owner" method="POST">
             <div style="min-width: 600px; max-width: 800px;">
                 <fieldset>
                     <div class="form-horizontal" style="width: 900px;">
diff --git a/wqflask/wqflask/templates/admin/manage_resource.html b/wqflask/wqflask/templates/admin/manage_resource.html
index af4d4908..a84bd77f 100644
--- a/wqflask/wqflask/templates/admin/manage_resource.html
+++ b/wqflask/wqflask/templates/admin/manage_resource.html
@@ -2,7 +2,8 @@
 {% block title %}Resource Manager{% endblock %}
 {% block content %}
 <!-- Start of body -->
-    <div class="container">
+<div class="container">
+    {{ flash_me() }}
         {% set DATA_ACCESS = access_role.get('data') %}
         {% set METADATA_ACCESS = access_role.get('metadata') %}
         {% set ADMIN_STATUS = access_role.get('admin') %}