about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--wqflask/wqflask/oauth2/data.py34
-rw-r--r--wqflask/wqflask/oauth2/routes.py2
-rw-r--r--wqflask/wqflask/oauth2/users.py5
-rw-r--r--wqflask/wqflask/templates/oauth2/data-list.html37
-rw-r--r--wqflask/wqflask/templates/oauth2/profile_nav.html11
-rw-r--r--wqflask/wqflask/templates/oauth2/view-user.html2
6 files changed, 88 insertions, 3 deletions
diff --git a/wqflask/wqflask/oauth2/data.py b/wqflask/wqflask/oauth2/data.py
new file mode 100644
index 00000000..44b65575
--- /dev/null
+++ b/wqflask/wqflask/oauth2/data.py
@@ -0,0 +1,34 @@
+"""Handle linking data to groups."""
+
+from flask import Response, Blueprint, render_template
+
+from .request_utils import process_error
+from .client import oauth2_get, oauth2_post
+
+data = Blueprint("data", __name__)
+
+@data.route("/list")
+def list_data():
+    
+    def __render__(**kwargs):
+        roles = kwargs.get("roles", [])
+        user_privileges = tuple(
+                privilege["privilege_id"] for role in roles
+                for privilege in role["privileges"])
+        return render_template(
+            "oauth2/data-list.html",
+            groups=kwargs.get("groups", []),
+            data_items=kwargs.get("data_items", []),
+            user_privileges=kwargs.get("user_privileges",[]),
+            **{key:val for key,val in kwargs.items()
+               if key not in ("groups", "data_items", "user_privileges")})
+
+    groups = oauth2_get("oauth2/group/list").either(
+        lambda err: {"groups_error": process_error(err)},
+        lambda grp: {"groups": grp})
+    roles = oauth2_get("oauth2/roles").either(
+        lambda err: {"roles_error": process_error(err)},
+        lambda roles: {"roles": roles})
+    data_items = {}
+
+    return __render__(**{**groups, **roles, **data_items})
diff --git a/wqflask/wqflask/oauth2/routes.py b/wqflask/wqflask/oauth2/routes.py
index 93219bce..4c4b877b 100644
--- a/wqflask/wqflask/oauth2/routes.py
+++ b/wqflask/wqflask/oauth2/routes.py
@@ -1,6 +1,7 @@
 """Routes for the OAuth2 auth system in GN3"""
 from flask import Blueprint
 
+from .data import data
 from .users import users
 from .roles import roles
 from .groups import groups
@@ -10,6 +11,7 @@ from .resources import resources
 oauth2 = Blueprint("oauth2", __name__, template_folder="templates/oauth2")
 
 oauth2.register_blueprint(toplevel, url_prefix="/")
+oauth2.register_blueprint(data, url_prefix="/data")
 oauth2.register_blueprint(users, url_prefix="/user")
 oauth2.register_blueprint(roles, url_prefix="/role")
 oauth2.register_blueprint(groups, url_prefix="/group")
diff --git a/wqflask/wqflask/oauth2/users.py b/wqflask/wqflask/oauth2/users.py
index 28a495aa..d1bf0e5b 100644
--- a/wqflask/wqflask/oauth2/users.py
+++ b/wqflask/wqflask/oauth2/users.py
@@ -21,6 +21,9 @@ def user_profile():
     def __render__(usr_dets, roles=[], **kwargs):
         return render_template(
             "oauth2/view-user.html", user_details=usr_dets, roles=roles,
+            user_privileges = tuple(
+                privilege["privilege_id"] for role in roles
+                for privilege in role["privileges"]),
             **kwargs)
 
     def __roles_success__(roles):
@@ -29,7 +32,7 @@ def user_profile():
         return oauth2_get("oauth2/user/group/join-request").either(
             lambda err: __render__(
                 user_details, group_join_error=process_error(err)),
-            lambda gjr: __render__(usr_dets, group_join_request=gjr))
+            lambda gjr: __render__(usr_dets, roles=roles, group_join_request=gjr))
 
     return oauth2_get("oauth2/user/roles").either(
         lambda err: __render__(usr_dets, role_error=process_error(err)),
diff --git a/wqflask/wqflask/templates/oauth2/data-list.html b/wqflask/wqflask/templates/oauth2/data-list.html
new file mode 100644
index 00000000..ebe00843
--- /dev/null
+++ b/wqflask/wqflask/templates/oauth2/data-list.html
@@ -0,0 +1,37 @@
+{%extends "base.html"%}
+{%from "oauth2/profile_nav.html" import profile_nav%}
+{%from "oauth2/display_error.html" import display_error%}
+{%block title%}View User{%endblock%}
+{%block content%}
+<div class="container" style="min-width: 1250px;">
+  {{profile_nav("data")}}
+
+  {{flash_me()}}
+
+  <div class="container-fluid">
+    <div class="row">
+      <form method="POST" action="#/data/list/items">
+	<legend>Link Data to Group</legend>
+	<div class="form-group">
+	  <label class="form-label" for="sel-group-id">Group</label>
+	  <select id="sel-group-id" name="group_id" required="required"
+		  {%if groups | count == 0 or groups_error is defined %}
+		  disabled="disabled"
+		  {%endif%}>
+	    <option value="">Select Group</option>
+	    {%for group in groups %}
+	    <option value="{{group.group_id}}">{{group.group_name}}</option>
+	    {%endfor%}
+	  </select>
+	  {%if groups_error is defined%}
+	  {{display_error("Groups Error", groups_error)}}
+	  {%endif%}
+	</div>
+
+	<input type="submit" value="Next" class="btn btn-primary" />
+      </form>
+    </div>
+  </div>
+
+</div>
+{%endblock%}
diff --git a/wqflask/wqflask/templates/oauth2/profile_nav.html b/wqflask/wqflask/templates/oauth2/profile_nav.html
index 5c69a17d..69eb1024 100644
--- a/wqflask/wqflask/templates/oauth2/profile_nav.html
+++ b/wqflask/wqflask/templates/oauth2/profile_nav.html
@@ -1,4 +1,4 @@
-{%macro profile_nav(calling_page)%}
+{%macro profile_nav(calling_page, user_privileges=[])%}
 
 <ul class="nav nav-pills">
 
@@ -30,6 +30,15 @@
     <a href="{{url_for('oauth2.resource.user_resources')}}">Resources</a>
   </li>
 
+  {%if "system:data:link-to-group" in user_privileges %}
+  <li role="presentation"
+      {%if calling_page == "data"%}
+      class="active"
+      {%endif%}>
+    <a href="{{url_for('oauth2.data.list_data')}}">Link Data</a>
+  </li>
+  {%endif%}
+
 </ul>
 
 {%endmacro%}
diff --git a/wqflask/wqflask/templates/oauth2/view-user.html b/wqflask/wqflask/templates/oauth2/view-user.html
index 6a7d6be5..34526b14 100644
--- a/wqflask/wqflask/templates/oauth2/view-user.html
+++ b/wqflask/wqflask/templates/oauth2/view-user.html
@@ -3,7 +3,7 @@
 {%block title%}View User{%endblock%}
 {%block content%}
 <div class="container" style="min-width: 1250px;">
-  {{profile_nav("dashboard")}}
+  {{profile_nav("dashboard", user_privileges)}}
   <h3>View User</h3>
 
   {{flash_me()}}