# Copyright (C) 2018 Lars Wirzenius # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import muck class AuthorizationChecker: 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