summaryrefslogtreecommitdiff
path: root/muck/authz.py
diff options
context:
space:
mode:
Diffstat (limited to 'muck/authz.py')
-rw-r--r--muck/authz.py23
1 files changed, 20 insertions, 3 deletions
diff --git a/muck/authz.py b/muck/authz.py
index e9336b8..c48294c 100644
--- a/muck/authz.py
+++ b/muck/authz.py
@@ -13,10 +13,27 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# import muck
+import muck
class AuthorizationChecker:
- def request_is_allowed(self, r):
- return False and r
+ def __init__(self, signing_key_text):
+ self._tc = muck.TokenChecker(signing_key_text.strip().encode('ascii'))
+
+ def request_is_allowed(self, r, required_scopes):
+ token = self._get_token(r)
+ if token is None:
+ return False
+
+ scope = token.get('scope', '')
+ scopes = set(scope.split())
+ required_scopes = set(required_scopes)
+ return scopes.intersection(required_scopes) == required_scopes
+
+ def _get_token(self, r):
+ authz = r.get_authorization()
+ try:
+ return self._tc.parse_header(authz)
+ except muck.Error:
+ return None