aboutsummaryrefslogtreecommitdiffstats
path: root/pysite
diff options
context:
space:
mode:
authorGravatar JoeBanks13 <[email protected]>2018-02-13 17:01:37 +0000
committerGravatar JoeBanks13 <[email protected]>2018-02-13 17:01:37 +0000
commitf45f8baf97973a7f80bc4b468de6195c1e881094 (patch)
treea1854a0a5c320dc10d96d223d2692b4c70895aca /pysite
parentRethinkDB API Views #yqhg (diff)
@APIView.valid_api_key decorator
Diffstat (limited to 'pysite')
-rw-r--r--pysite/base_route.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/pysite/base_route.py b/pysite/base_route.py
index c705a350..faec103c 100644
--- a/pysite/base_route.py
+++ b/pysite/base_route.py
@@ -3,10 +3,11 @@ import os
import random
import string
-from flask import Blueprint, jsonify, render_template
+from flask import Blueprint, jsonify, render_template, request
from flask.views import MethodView
from pysite.constants import ErrorCodes
+from functools import wraps
class BaseView(MethodView):
@@ -33,13 +34,27 @@ class RouteView(BaseView):
class APIView(RouteView):
def validate_key(self, api_key: str):
""" Placeholder! """
- return api_key == os.environ("API_KEY")
+ return api_key == os.environ.get("API_KEY")
def generate_api_key(self):
""" Generate a random string of n characters. """
pool = random.choices(string.ascii_letters + string.digits, k=32)
return "".join(pool)
+ def valid_api_key(f):
+ """
+ Decorator to check if X-API-Key is valid.
+ """
+ @wraps(f)
+ def has_valid_api_key(*args, **kwargs):
+ if not request.headers.get("X-API-Key") == os.environ.get("API_KEY"):
+ resp = jsonify({"error_code": 401, "error_message": "Invalid API-Key"})
+ resp.status_code = 401
+ return resp
+ return f(*args, **kwargs)
+
+ return has_valid_api_key
+
def error(self, error_code: ErrorCodes):
data = {