diff options
Diffstat (limited to 'qvisqve/authz_attempt.py')
-rw-r--r-- | qvisqve/authz_attempt.py | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/qvisqve/authz_attempt.py b/qvisqve/authz_attempt.py new file mode 100644 index 0000000..229c802 --- /dev/null +++ b/qvisqve/authz_attempt.py @@ -0,0 +1,120 @@ +# 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 <http://www.gnu.org/licenses/>. + + +import qvisqve + + +class AuthorizationAttempt: + + def __init__(self): + self._attempt_id = None + self._client_id = None + self._subject_id = None + self._state = None + self._redirect_uri = None + self._scope = None + self._authorization_code = None + + def set_client_id(self, client_id): + self._client_id = client_id + + def get_client_id(self): + return self._client_id + + def set_subject_id(self, subject_id): + self._subject_id = subject_id + + def get_subject_id(self): + return self._subject_id + + def set_state(self, state): + self._state = state + + def get_state(self): + return self._state + + def set_redirect_uri(self, uri): + self._redirect_uri = uri + + def get_redirect_uri(self): + return self._redirect_uri + + def set_scope(self, scope): + self._scope = scope + + def get_scope(self): + return self._scope + + def set_attempt_id(self, attempt_id): + required = [ + '_client_id', + '_state', + '_redirect_uri', + '_scope', + ] + for attr in required: + if getattr(self, attr, None) is None: + raise AuthorizationAttemptError() + + self._attempt_id = attempt_id + + def get_attempt_id(self): + return self._attempt_id + + def set_authorization_code(self, authorization_code): + self._authorization_code = authorization_code + + def get_authorization_code(self): + return self._authorization_code + + +class AuthorizationAttemptError(Exception): + + pass + + +class AuthorizationAttempts: + + def __init__(self): + self._attempts = [] + + def create_attempt(self, urlparams): + gen = qvisqve.NonceGenerator() + attempt_id = gen.create_nonce() + + aa = AuthorizationAttempt() + + aa.set_client_id(urlparams['client_id']) + aa.set_state(urlparams['state']) + aa.set_redirect_uri(urlparams['redirect_uri']) + aa.set_scope(urlparams['scope']) + + aa.set_attempt_id(attempt_id) + + self._attempts.append(aa) + return aa + + def find_by_id(self, attempt_id): + for aa in self._attempts: + if aa.get_attempt_id() == attempt_id: + return aa + return None + + def find_by_code(self, code): + for aa in self._attempts: + if aa.get_authorization_code() == code: + return aa + return None |