about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBonfaceKilz2021-10-15 15:48:46 +0300
committerBonfaceKilz2021-10-25 14:00:14 +0300
commit712318f7ab5e676b229ba0d479be09e9f92b9568 (patch)
treeb3f0ec943a4e21b238c669a8eef0e6524736f953
parent8dd3457b20b5ce96cf7e0f5029e3541d57ca116d (diff)
downloadgenenetwork2-712318f7ab5e676b229ba0d479be09e9f92b9568.tar.gz
decorators: Add `@login_required` decorator
-rw-r--r--wqflask/wqflask/decorators.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/wqflask/wqflask/decorators.py b/wqflask/wqflask/decorators.py
index 5930e7ec..cc69902e 100644
--- a/wqflask/wqflask/decorators.py
+++ b/wqflask/wqflask/decorators.py
@@ -1,6 +1,8 @@
 """This module contains gn2 decorators"""
 import hashlib
 import hmac
+import redis
+
 from flask import current_app, g
 from typing import Dict
 from functools import wraps
@@ -13,6 +15,23 @@ def create_hmac(data: str, secret: str) -> str:
     return hmac.new(bytearray(secret, "latin-1"),
                     bytearray(data, "utf-8"),
                     hashlib.sha1).hexdigest[:20]
+
+
+def login_required(f):
+    """Use this for endpoints where login is required"""
+    @wraps(f)
+    def wrap(*args, **kwargs):
+        user_id = (g.user_session.record.get(b"user_id",
+                                        b"").decode("utf-8") or
+                   g.user_session.record.get("user_id", ""))
+        redis_conn = redis.from_url(current_app.config["REDIS_URL"],
+                                    decode_responses=True)
+        if not redis_conn.hget("users", user_id):
+            return "You need to be logged in!", 401
+        return f(*args, **kwargs)
+    return wrap
+
+
 def edit_access_required(f):
     """Use this for endpoints where admins are required"""
     @wraps(f)