about summary refs log tree commit diff
path: root/wqflask/utility
diff options
context:
space:
mode:
authorzsloan2020-06-05 16:52:56 -0500
committerzsloan2020-06-05 16:52:56 -0500
commita302a2b0ac0e7c0f26a0d063c3f2b057f61d47f1 (patch)
treea9f5c88f7d2818bf4e0481b85872c7580a8d577c /wqflask/utility
parent218576a04f90cc0bc9e53685323e1caa8cffe986 (diff)
downloadgenenetwork2-a302a2b0ac0e7c0f26a0d063c3f2b057f61d47f1.tar.gz
Commiting other current group/resource management code, plus the new files
Diffstat (limited to 'wqflask/utility')
-rw-r--r--wqflask/utility/authentication_tools.py46
-rw-r--r--wqflask/utility/redis_tools.py37
2 files changed, 75 insertions, 8 deletions
diff --git a/wqflask/utility/authentication_tools.py b/wqflask/utility/authentication_tools.py
new file mode 100644
index 00000000..537881a5
--- /dev/null
+++ b/wqflask/utility/authentication_tools.py
@@ -0,0 +1,46 @@
+from __future__ import absolute_import, print_function, division

+

+import json

+import requests

+

+from base import data_set

+

+from utility import hmac

+from utility.redis_tools import get_redis_conn, get_resource_info, get_resource_id

+

+from flask import Flask, g, redirect, url_for

+

+import logging

+logger = logging.getLogger(__name__ )

+

+def check_resource_availability(dataset, trait_id=None):

+    resource_id = get_resource_id(dataset, trait_id)

+

+    if resource_id:

+        the_url = "http://localhost:8080/available?resource={}&user={}".format(resource_id, g.user_session.user_id)

+        try:

+            response = json.loads(requests.get(the_url).content)['data']

+        except:

+            resource_info = get_resource_info(resource_id)

+            response = resource_info['default_mask']['data']

+

+        if 'view' in response:

+            return True

+        else:

+            return redirect(url_for("no_access_page"))

+

+    return True

+

+def check_owner(dataset=None, trait_id=None, resource_id=None):

+    if resource_id:

+        resource_info = get_resource_info(resource_id)

+        if g.user_session.user_id == resource_info['owner_id']:

+            return resource_id

+    else:

+        resource_id = get_resource_id(dataset, trait_id)

+        if resource_id:

+            resource_info = get_resource_info(resource_id)

+            if g.user_session.user_id == resource_info['owner_id']:

+                return resource_id

+

+    return False
\ No newline at end of file
diff --git a/wqflask/utility/redis_tools.py b/wqflask/utility/redis_tools.py
index 0ad96879..bc30a0af 100644
--- a/wqflask/utility/redis_tools.py
+++ b/wqflask/utility/redis_tools.py
@@ -95,14 +95,17 @@ def get_user_groups(user_id):
     user_group_ids = []   #ZS: Group IDs where user is a regular user
     groups_list = Redis.hgetall("groups")
     for key in groups_list:
-        group_ob = json.loads(groups_list[key])
-        group_admins = set(group_ob['admins'])
-        group_members = set(group_ob['members'])
-        if user_id in group_admins:
-            admin_group_ids.append(group_ob['id'])
-        elif user_id in group_members:
-            user_group_ids.append(group_ob['id'])
-        else:
+        try:
+            group_ob = json.loads(groups_list[key])
+            group_admins = set(group_ob['admins'])
+            group_members = set(group_ob['members'])
+            if user_id in group_admins:
+                admin_group_ids.append(group_ob['id'])
+            elif user_id in group_members:
+                user_group_ids.append(group_ob['id'])
+            else:
+                continue
+        except:
             continue
 
     admin_groups = []
@@ -122,6 +125,24 @@ def get_group_info(group_id):
 
     return group_info
 
+def get_group_by_unique_column(column_name, column_value):
+    """ Get group by column; not sure if there's a faster way to do this """
+
+    matched_groups = []
+
+    all_group_list = Redis.hgetall("groups")
+    for key in all_group_list:
+        group_info = json.loads(all_group_list[key])
+        if column_name == "admins" or column_name == "members": #ZS: Since these fields are lists, search in the list
+            if column_value in group_info[column_name]:
+                matched_groups.append(group_info)
+        else:
+            if group_info[column_name] == column_value:
+                matched_groups.append(group_info)
+
+    return matched_groups
+
+
 def create_group(admin_user_ids, member_user_ids = [], group_name = "Default Group Name"):
     group_id = str(uuid.uuid4())
     new_group = {