From 9776dc5c4bb0dd0a4bcb6b0e25bb521b3a65bdab Mon Sep 17 00:00:00 2001 From: Ali Haider Date: Mon, 23 Oct 2023 10:40:20 +0500 Subject: [PATCH 1/8] OIDC backend logout --- src/satosa/backends/base.py | 5 +- src/satosa/backends/idpy_oidc.py | 44 ++++++- src/satosa/base.py | 52 +++++++- src/satosa/frontends/base.py | 3 +- src/satosa/frontends/openid_connect.py | 74 +++++++++-- src/satosa/internal.py | 4 + src/satosa/plugin_loader.py | 54 ++++++-- src/satosa/session_storage.py | 167 +++++++++++++++++++++++++ 8 files changed, 371 insertions(+), 32 deletions(-) create mode 100644 src/satosa/session_storage.py diff --git a/src/satosa/backends/base.py b/src/satosa/backends/base.py index 8d0432da8..10d086027 100644 --- a/src/satosa/backends/base.py +++ b/src/satosa/backends/base.py @@ -10,7 +10,8 @@ class BackendModule(object): Base class for a backend module. """ - def __init__(self, auth_callback_func, internal_attributes, base_url, name): + def __init__(self, auth_callback_func, internal_attributes, base_url, name, session_storage=None, + logout_callback_func=None): """ :type auth_callback_func: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -31,6 +32,8 @@ def __init__(self, auth_callback_func, internal_attributes, base_url, name): self.converter = AttributeMapper(internal_attributes) self.base_url = base_url self.name = name + self.session_storage = session_storage + self.logout_callback_func = logout_callback_func def start_auth(self, context, internal_request): """ diff --git a/src/satosa/backends/idpy_oidc.py b/src/satosa/backends/idpy_oidc.py index f3ea43f61..33d34924d 100644 --- a/src/satosa/backends/idpy_oidc.py +++ b/src/satosa/backends/idpy_oidc.py @@ -14,7 +14,7 @@ import satosa.logging_util as lu from ..exception import SATOSAAuthenticationError from ..exception import SATOSAError -from ..response import Redirect +from ..response import Redirect, Response UTC = datetime.timezone.utc @@ -26,7 +26,8 @@ class IdpyOIDCBackend(BackendModule): Backend module for OIDC and OAuth 2.0, can be directly used. """ - def __init__(self, auth_callback_func, internal_attributes, config, base_url, name): + def __init__(self, auth_callback_func, internal_attributes, config, base_url, name, session_storage, + logout_callback_func): """ OIDC backend module. :param auth_callback_func: Callback should be called by the module after the authorization @@ -45,7 +46,7 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :type base_url: str :type name: str """ - super().__init__(auth_callback_func, internal_attributes, base_url, name) + super().__init__(auth_callback_func, internal_attributes, base_url, name, session_storage, logout_callback_func) # self.auth_callback_func = auth_callback_func # self.config = config self.client = StandAloneClient(config=config["client"], client_type="oidc") @@ -57,6 +58,9 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na raise SATOSAError("Missing path in redirect uri") self.redirect_path = urlparse(_redirect_uris[0]).path + front_channel_logout_uri = config["client"].get('front_channel_logout_uri') + self.front_channel_logout_path = urlparse(front_channel_logout_uri).path if front_channel_logout_uri else None + def start_auth(self, context, internal_request): """ See super class method satosa.backends.base#start_auth @@ -76,8 +80,9 @@ def register_endpoints(self): :rtype: Sequence[(str, Callable[[satosa.context.Context], satosa.response.Response]] :return: A list that can be used to map the request to SATOSA to this endpoint. """ - url_map = [] - url_map.append((f"^{self.redirect_path.lstrip('/')}$", self.response_endpoint)) + url_map = [(f"^{self.redirect_path.lstrip('/')}$", self.response_endpoint)] + if self.front_channel_logout_path: + url_map.append((f"^{self.front_channel_logout_path.lstrip('/')}$", self.front_channel_logout_endpoint)) return url_map def response_endpoint(self, context, *args): @@ -108,8 +113,37 @@ def response_endpoint(self, context, *args): logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg) logger.debug(logline) internal_resp = self._translate_response(all_user_claims, _info["issuer"]) + sid = all_user_claims.get("sid") + if sid: + internal_resp.backend_sid = sid + self.session_storage.store_backend_session(sid, _info["issuer"]) return self.auth_callback_func(context, internal_resp) + def front_channel_logout_endpoint(self, context, *args): + """ + Handles the front channel logout request from the OP. + :type context: satosa.context.Context + :type args: Any + :rtype: satosa.response.Response + + :param context: SATOSA context + :param args: None + :return: + """ + + sid = context.request.get("sid") + issuer = context.request.get("iss") + session = self.session_storage.get_backend_session(sid, issuer) + + if session: + internal_req = InternalData( + backend_sid=sid, + issuer=session.get("issuer") + ) + return self.logout_callback_func(context, internal_req) + else: + return Response() + def _translate_response(self, response, issuer): """ Translates oidc response to SATOSA internal response. diff --git a/src/satosa/base.py b/src/satosa/base.py index 1e17c8cbe..9b6cc1e65 100644 --- a/src/satosa/base.py +++ b/src/satosa/base.py @@ -8,7 +8,7 @@ from saml2.s_utils import UnknownSystemEntity from satosa import util -from satosa.response import BadRequest +from satosa.response import BadRequest, Response from satosa.response import NotFound from satosa.response import Redirect from .context import Context @@ -24,10 +24,12 @@ from .plugin_loader import load_frontends from .plugin_loader import load_request_microservices from .plugin_loader import load_response_microservices +from .plugin_loader import load_session_storage from .routing import ModuleRouter from .state import State from .state import cookie_to_state from .state import state_to_cookie +from .routing import STATE_KEY as ROUTER_STATE_KEY import satosa.logging_util as lu @@ -52,12 +54,15 @@ def __init__(self, config): """ self.config = config + logger.info("Loading session storage...") + self.session_storage = load_session_storage(self.config) + logger.info("Loading backend modules...") - backends = load_backends(self.config, self._auth_resp_callback_func, - self.config["INTERNAL_ATTRIBUTES"]) + backends = load_backends(self.config, self._auth_resp_callback_func, self.config["INTERNAL_ATTRIBUTES"], + self.session_storage, self._backend_logout_callback_func) logger.info("Loading frontend modules...") - frontends = load_frontends(self.config, self._auth_req_callback_func, - self.config["INTERNAL_ATTRIBUTES"]) + frontends = load_frontends(self.config, self._auth_req_callback_func, self.config["INTERNAL_ATTRIBUTES"], + self.session_storage) self.response_micro_services = [] self.request_micro_services = [] @@ -130,7 +135,15 @@ def _auth_resp_finish(self, context, internal_response): context.request = None frontend = self.module_router.frontend_routing(context) - return frontend.handle_authn_response(context, internal_response) + response = frontend.handle_authn_response(context, internal_response) + + if internal_response.frontend_sid and internal_response.backend_sid: + self.session_storage.store_session_map( + internal_response["frontend_sid"], + internal_response["backend_sid"], + internal_response.auth_info.issuer) + + return response def _auth_resp_callback_func(self, context, internal_response): """ @@ -163,6 +176,33 @@ def _auth_resp_callback_func(self, context, internal_response): return self._auth_resp_finish(context, internal_response) + def _backend_logout_callback_func(self, context, internal_request): + msg = "Initiating frontend logout(s) for the issuer: {}".format(internal_request.issuer) + logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg) + logger.info(logline) + + frontend_sessions = self.session_storage.get_frontend_sessions_by_backend_sid_and_issuer( + internal_request.backend_sid, + internal_request.issuer) + + for frontend_session in frontend_sessions: + context.state[ROUTER_STATE_KEY] = frontend_session.get("frontend_name") + frontend = self.module_router.frontend_routing(context) + internal_request.frontend_sid = frontend_session.get("sid") + if frontend.start_logout_from_backend(context, internal_request): + self.session_storage.delete_session_map(frontend_session.get("sid"), + internal_request.backend_sid, + internal_request.issuer) + + return self._backend_logout_req_finish(context, internal_request) + + def _backend_logout_req_finish(self, context, internal_request): + self.session_storage.delete_backend_session(internal_request.backend_sid) + msg = "All the frontend logouts for the issuer: {} are processed.".format(internal_request.issuer) + logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg) + logger.info(logline) + return Response() + def _handle_satosa_authentication_error(self, error): """ Sends a response to the requester about the error diff --git a/src/satosa/frontends/base.py b/src/satosa/frontends/base.py index 52840a85c..d6655f5b4 100644 --- a/src/satosa/frontends/base.py +++ b/src/satosa/frontends/base.py @@ -9,7 +9,7 @@ class FrontendModule(object): Base class for a frontend module. """ - def __init__(self, auth_req_callback_func, internal_attributes, base_url, name): + def __init__(self, auth_req_callback_func, internal_attributes, base_url, name, session_storage=None): """ :type auth_req_callback_func: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -25,6 +25,7 @@ def __init__(self, auth_req_callback_func, internal_attributes, base_url, name): self.converter = AttributeMapper(internal_attributes) self.base_url = base_url self.name = name + self.session_storage = session_storage def handle_authn_response(self, context, internal_resp): """ diff --git a/src/satosa/frontends/openid_connect.py b/src/satosa/frontends/openid_connect.py index 88041b373..cde3e5039 100644 --- a/src/satosa/frontends/openid_connect.py +++ b/src/satosa/frontends/openid_connect.py @@ -4,13 +4,16 @@ import json import logging +import uuid +import requests +import time from collections import defaultdict from urllib.parse import urlencode, urlparse from jwkest.jwk import rsa_load, RSAKey from oic.oic import scope2claims -from oic.oic.message import AuthorizationRequest +from oic.oic.message import AuthorizationRequest, LogoutToken from oic.oic.message import AuthorizationErrorResponse from oic.oic.message import TokenErrorResponse from oic.oic.message import UserInfoErrorResponse @@ -56,9 +59,9 @@ class OpenIDConnectFrontend(FrontendModule): A OpenID Connect frontend module """ - def __init__(self, auth_req_callback_func, internal_attributes, conf, base_url, name): + def __init__(self, auth_req_callback_func, internal_attributes, conf, base_url, name, session_storage): _validate_config(conf) - super().__init__(auth_req_callback_func, internal_attributes, base_url, name) + super().__init__(auth_req_callback_func, internal_attributes, base_url, name, session_storage) self.config = conf provider_config = self.config["provider"] @@ -88,14 +91,14 @@ def __init__(self, auth_req_callback_func, internal_attributes, conf, base_url, client_db_uri = self.config.get("client_db_uri") cdb_file = self.config.get("client_db_path") if client_db_uri: - cdb = StorageBase.from_uri( + self.cdb = StorageBase.from_uri( client_db_uri, db_name="satosa", collection="clients", ttl=None ) elif cdb_file: with open(cdb_file) as f: - cdb = json.loads(f.read()) + self.cdb = json.loads(f.read()) else: - cdb = {} + self.cdb = {} self.endpoint_baseurl = "{}/{}".format(self.base_url, self.name) self.provider = _create_provider( @@ -105,7 +108,7 @@ def __init__(self, auth_req_callback_func, internal_attributes, conf, base_url, self.signing_key, authz_state, self.user_db, - cdb, + self.cdb, ) def _get_extra_id_token_claims(self, user_id, client_id): @@ -144,6 +147,15 @@ def handle_authn_response(self, context, internal_resp): del context.state[self.name] http_response = auth_resp.request(auth_req["redirect_uri"], should_fragment_encode(auth_req)) + frontend_sid = context.state.session_id + internal_resp.frontend_sid = frontend_sid + + self.session_storage.store_frontend_session( + self.name, + internal_resp.requester, + internal_resp.subject_id, + frontend_sid) + return SeeOther(http_response) def handle_backend_error(self, exception): @@ -394,6 +406,54 @@ def userinfo_endpoint(self, context): content="application/json") return response + def start_logout_from_backend(self, context, internal_request): + logout_status = True + session = self.session_storage.get_frontend_session(internal_request.frontend_sid) + client = self.cdb[session.get("requester")] + + if client.get("back_channel_logout_uri"): + try: + logout_token = LogoutToken(iss=self.base_url, + sub=session.get("subject_id"), + aud=session.get("requester"), + iat=int(time.time()), + jti=str(uuid.uuid4()), + events={"http://schemas.openid.net/event/backchannel-logout": {}}, + sid=internal_request.frontend_sid + ) + + logout_token_str = logout_token.to_jwt([self.signing_key], "RS256") + logger.debug('signed logout_token {} using alg={}'.format(logout_token_str, "RS256")) + resp = requests.post(client.get("back_channel_logout_uri"), json={"logout_token": logout_token_str}) + + if resp.status_code == 200: + self.session_storage.delete_frontend_session(internal_request.frontend_sid) + msg = "client {} of the frontend {} logged out successfully.".format(session.get("requester"), + self.name) + logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg) + logger.info(logline) + else: + msg = "client {} could not log out successfully - received status code: {} and payload: {} " \ + "from the client.".format( + session.get("requester"), + resp.status_code, + resp.content) + + logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg) + logger.warning(logline) + logout_status = False + except Exception as e: + msg = "client {} could not log out successfully - encountered error: {}".format( + session.get("requester"), e) + logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg) + logger.warning(logline) + logout_status = False + else: + logger.info( + lu.LOG_FMT.format(id=lu.get_session_id(context.state), + message="client {} does not support logout").format(session.get("requester"))) + return logout_status + def _validate_config(config): """ diff --git a/src/satosa/internal.py b/src/satosa/internal.py index 24de31890..c91e39f2f 100644 --- a/src/satosa/internal.py +++ b/src/satosa/internal.py @@ -124,6 +124,8 @@ def __init__( subject_id=None, subject_type=None, attributes=None, + frontend_sid=None, + backend_sid=None, *args, **kwargs, ): @@ -157,3 +159,5 @@ def __init__( self.subject_id = subject_id self.subject_type = subject_type self.attributes = attributes if attributes is not None else {} + self.frontend_sid = frontend_sid + self.backend_sid = backend_sid diff --git a/src/satosa/plugin_loader.py b/src/satosa/plugin_loader.py index b7eb4cf46..22d148508 100644 --- a/src/satosa/plugin_loader.py +++ b/src/satosa/plugin_loader.py @@ -27,46 +27,47 @@ def prepend_to_import_path(import_paths): del sys.path[0:len(import_paths)] # restore sys.path -def load_backends(config, callback, internal_attributes): +def load_backends(config, auth_callback, internal_attributes, session_storage, logout_callback): """ Load all backend modules specified in the config :type config: satosa.satosa_config.SATOSAConfig - :type callback: + :type auth_callback: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response :type internal_attributes: dict[string, dict[str, str | list[str]]] :rtype: Sequence[satosa.backends.base.BackendModule] :param config: The configuration of the satosa proxy - :param callback: Function that will be called by the backend after the authentication is done. + :param auth_callback: Function that will be called by the backend after the authentication is done. :return: A list of backend modules """ backend_modules = _load_plugins( config.get("CUSTOM_PLUGIN_MODULE_PATHS"), config["BACKEND_MODULES"], backend_filter, config["BASE"], - internal_attributes, callback) + internal_attributes, auth_callback, session_storage, logout_callback + ) logger.info("Setup backends: {}".format([backend.name for backend in backend_modules])) return backend_modules -def load_frontends(config, callback, internal_attributes): +def load_frontends(config, auth_callback, internal_attributes, session_storage): """ Load all frontend modules specified in the config :type config: satosa.satosa_config.SATOSAConfig - :type callback: + :type auth_callback: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response :type internal_attributes: dict[string, dict[str, str | list[str]]] :rtype: Sequence[satosa.frontends.base.FrontendModule] :param config: The configuration of the satosa proxy - :param callback: Function that will be called by the frontend after the authentication request - has been processed. + :param auth_callback: Function that will be called by the frontend after the authentication request :return: A list of frontend modules """ frontend_modules = _load_plugins(config.get("CUSTOM_PLUGIN_MODULE_PATHS"), config["FRONTEND_MODULES"], - frontend_filter, config["BASE"], internal_attributes, callback) + frontend_filter, config["BASE"], internal_attributes, auth_callback, + session_storage) logger.info("Setup frontends: {}".format([frontend.name for frontend in frontend_modules])) return frontend_modules @@ -151,7 +152,8 @@ def _load_plugin_config(config): raise SATOSAConfigurationError("The configuration is corrupt.") from exc -def _load_plugins(plugin_paths, plugins, plugin_filter, base_url, internal_attributes, callback): +def _load_plugins(plugin_paths, plugins, plugin_filter, base_url, internal_attributes, auth_callback, + session_storage, logout_callback=None): """ Loads endpoint plugins @@ -178,8 +180,8 @@ def _load_plugins(plugin_paths, plugins, plugin_filter, base_url, internal_attri if module_class: module_config = _replace_variables_in_plugin_module_config(plugin_config["config"], base_url, plugin_config["name"]) - instance = module_class(callback, internal_attributes, module_config, base_url, - plugin_config["name"]) + instance = module_class(auth_callback, internal_attributes, module_config, base_url, + plugin_config["name"], session_storage, logout_callback) loaded_plugin_modules.append(instance) return loaded_plugin_modules @@ -280,3 +282,31 @@ def load_response_microservices(plugin_path, plugins, internal_attributes, base_ base_url) logger.info("Loaded response micro services:{}".format([type(k).__name__ for k in response_services])) return response_services + + +def load_session_storage(config): + """ + Loads the storage database specifies in the config + + :type config: satosa.satosa_config.SATOSAConfig + + :param config: The configuration of the satosa proxy + """ + session_storage = config.get("SESSION_STORAGE") + if session_storage: + try: + storage_type = session_storage["type"] + if storage_type == "memory": + from satosa.session_storage import SessionStorageInMemory + return SessionStorageInMemory(config) + elif storage_type == "postgresql": + from satosa.session_storage import SessionStoragePostgreSQL + try: + return SessionStoragePostgreSQL(config) + except Exception as error: + return error + except SATOSAConfigurationError as err: + logger.error(err) + else: + logger.info("session storage is not defined") + diff --git a/src/satosa/session_storage.py b/src/satosa/session_storage.py new file mode 100644 index 000000000..ad48d2080 --- /dev/null +++ b/src/satosa/session_storage.py @@ -0,0 +1,167 @@ +from sqlalchemy.ext.declarative import declarative_base + + +class SessionStorage: + def __init__(self, config): + self.db_config = config["SESSION_STORAGE"] + + +class SessionStorageInMemory(SessionStorage): + """ + In-memory storage + """ + + def __init__(self, config): + super().__init__(config) + self.frontend_sessions = [] + self.backend_sessions = [] + self.session_maps = [] + + def store_frontend_session(self, frontend_name, requester, subject_id, sid): + self.frontend_sessions.append({"frontend_name": frontend_name, + "requester": requester, + "subject_id": subject_id, + "sid": sid + }) + + def store_backend_session(self, sid, issuer): + self.backend_sessions.append({"sid": sid, + "issuer": issuer}) + + def get_backend_session(self, sid, issuer=None): + for session in self.backend_sessions: + if issuer and session.get("sid") == sid and session.get("issuer") == issuer: + return session + elif session.get("sid") == sid: + return session + + def delete_backend_session(self, sid): + for session in self.backend_sessions: + if session.get("sid") == sid: + self.backend_sessions.remove(session) + return session + + def store_session_map(self, frontend_sid, backend_sid, issuer): + self.session_maps.append({"frontend_sid": frontend_sid, + "backend_sid": backend_sid, + "issuer": issuer + }) + + def delete_session_map(self, frontend_sid, backend_sid, issuer): + for session_map in self.session_maps: + if session_map.get("frontend_sid") == frontend_sid and session_map.get("issuer") == issuer and \ + session_map.get("backend_sid") == backend_sid: + self.session_maps.remove(session_map) + + def get_frontend_session(self, sid): + for session in self.frontend_sessions: + if session.get("sid") == sid: + return session + + def delete_frontend_session(self, sid): + for session in self.frontend_sessions: + if session.get("sid") == sid: + self.frontend_sessions.remove(session) + + def get_frontend_sessions_by_backend_sid_and_issuer(self, backend_sid, issuer): + sessions = list() + for session_map in self.session_maps: + if session_map.get("backend_sid") == backend_sid and session_map.get("issuer") == issuer: + frontend_sid = session_map.get("frontend_sid") + for session in self.frontend_sessions: + if session.get("sid") == frontend_sid: + sessions.append(session) + break + return sessions + + +Base = declarative_base() + + +class FrontendSession(Base): + from sqlalchemy import Column, Integer, String + + __tablename__ = 'frontend_session' + id = Column(Integer, primary_key=True, autoincrement=True) + frontend_name = Column(String) + requester = Column(String) + subject_id = Column(String) + sid = Column(String) + + +class BackendSession(Base): + from sqlalchemy import Column, Integer, String + + __tablename__ = 'backend_session' + id = Column(Integer, primary_key=True, autoincrement=True) + sid = Column(String) + issuer = Column(String) + + +class FrontendBackendSession(Base): + from sqlalchemy import Column, Integer, String + + __tablename__ = 'frontend_backend_session' + id = Column(Integer, primary_key=True, autoincrement=True) + frontend_sid = Column(String) + backend_sid = Column(String) + + +class SessionStoragePostgreSQL(SessionStorage): + """ + PostgreSQL storage + """ + + def __init__(self, config): + super().__init__(config) + + from sqlalchemy import create_engine + from sqlalchemy.orm import sessionmaker + + HOST = self.db_config["host"] + PORT = self.db_config["port"] + DB_NAME = self.db_config["db_name"] + USER = self.db_config["user"] + PWD = self.db_config["password"] + + engine = create_engine("postgresql://{USER}:{PWD}@{HOST}:{PORT}/{DB_NAME}".format( + USER=USER, + PWD=PWD, + HOST=HOST, + PORT=PORT, + DB_NAME=DB_NAME + )) + Base.metadata.create_all(engine) + self.Session = sessionmaker(bind=engine) + + def store_frontend_session(self, frontend_name, requester, subject_id, sid): + session = self.Session() + frontend_session = FrontendSession( + frontend_name=frontend_name, + requester=requester, + subject_id=subject_id, + sid=sid + ) + session.add(frontend_session) + session.commit() + session.close() + + def store_backend_session(self, sid, issuer): + session = self.Session() + backend_session = FrontendSession( + sid=sid, + issuer=issuer + ) + session.add(backend_session) + session.commit() + session.close() + + def store_session_map(self, frontend_sid, backend_sid): + session = self.Session() + frontend_backend_session = FrontendBackendSession( + frontend_sid=frontend_sid, + backend_sid=backend_sid + ) + session.add(frontend_backend_session) + session.commit() + session.close() From dade7190071aec8170dab460babb0d94dd4b456a Mon Sep 17 00:00:00 2001 From: Ali Haider Date: Mon, 23 Oct 2023 12:08:38 +0500 Subject: [PATCH 2/8] in-memory session storage made default session storage and required parameters added to all the FEs and BEs --- src/satosa/backends/apple.py | 5 +++-- src/satosa/backends/bitbucket.py | 6 +++--- src/satosa/backends/github.py | 8 ++++---- src/satosa/backends/idpy_oidc.py | 2 -- src/satosa/backends/linkedin.py | 8 ++++---- src/satosa/backends/oauth.py | 5 +++-- src/satosa/backends/openid_connect.py | 5 +++-- src/satosa/backends/orcid.py | 7 +++---- src/satosa/backends/reflector.py | 4 ++-- src/satosa/backends/saml2.py | 4 ++-- src/satosa/frontends/ping.py | 4 ++-- src/satosa/frontends/saml2.py | 8 ++++---- src/satosa/plugin_loader.py | 12 +++++++----- 13 files changed, 40 insertions(+), 38 deletions(-) diff --git a/src/satosa/backends/apple.py b/src/satosa/backends/apple.py index 37f756a68..af61687fe 100644 --- a/src/satosa/backends/apple.py +++ b/src/satosa/backends/apple.py @@ -35,7 +35,8 @@ class AppleBackend(BackendModule): """Sign in with Apple backend""" - def __init__(self, auth_callback_func, internal_attributes, config, base_url, name): + def __init__(self, auth_callback_func, internal_attributes, config, base_url, name, session_storage, + logout_callback_func): """ Sign in with Apple backend module. :param auth_callback_func: Callback should be called by the module after the authorization @@ -54,7 +55,7 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :type base_url: str :type name: str """ - super().__init__(auth_callback_func, internal_attributes, base_url, name) + super().__init__(auth_callback_func, internal_attributes, base_url, name, session_storage, logout_callback_func) self.auth_callback_func = auth_callback_func self.config = config self.client = _create_client( diff --git a/src/satosa/backends/bitbucket.py b/src/satosa/backends/bitbucket.py index 6932ce901..1e17b4c49 100644 --- a/src/satosa/backends/bitbucket.py +++ b/src/satosa/backends/bitbucket.py @@ -19,7 +19,7 @@ class BitBucketBackend(_OAuthBackend): logprefix = "BitBucket Backend:" - def __init__(self, outgoing, internal_attributes, config, base_url, name): + def __init__(self, outgoing, internal_attributes, config, base_url, name, session_storage, logout_callback_func): """BitBucket backend constructor :param outgoing: Callback should be called by the module after the authorization in the backend is done. @@ -39,8 +39,8 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name): """ config.setdefault('response_type', 'code') config['verify_accesstoken_state'] = False - super().__init__(outgoing, internal_attributes, config, base_url, - name, 'bitbucket', 'account_id') + super().__init__(outgoing, internal_attributes, config, base_url, name, 'bitbucket', 'account_id', + session_storage, logout_callback_func) def get_request_args(self, get_state=stateID): request_args = super().get_request_args(get_state=get_state) diff --git a/src/satosa/backends/github.py b/src/satosa/backends/github.py index 70944e371..64d0e9490 100644 --- a/src/satosa/backends/github.py +++ b/src/satosa/backends/github.py @@ -21,7 +21,8 @@ class GitHubBackend(_OAuthBackend): """GitHub OAuth 2.0 backend""" - def __init__(self, outgoing, internal_attributes, config, base_url, name): + def __init__(self, outgoing, internal_attributes, config, base_url, name, session_storage, + logout_callback_func): """GitHub backend constructor :param outgoing: Callback should be called by the module after the authorization in the backend is done. @@ -41,9 +42,8 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name): """ config.setdefault('response_type', 'code') config['verify_accesstoken_state'] = False - super().__init__( - outgoing, internal_attributes, config, base_url, name, 'github', - 'id') + super().__init__(outgoing, internal_attributes, config, base_url, name, 'github', 'id', + session_storage, logout_callback_func) def start_auth(self, context, internal_request, get_state=stateID): """ diff --git a/src/satosa/backends/idpy_oidc.py b/src/satosa/backends/idpy_oidc.py index 33d34924d..901e731fe 100644 --- a/src/satosa/backends/idpy_oidc.py +++ b/src/satosa/backends/idpy_oidc.py @@ -47,8 +47,6 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :type name: str """ super().__init__(auth_callback_func, internal_attributes, base_url, name, session_storage, logout_callback_func) - # self.auth_callback_func = auth_callback_func - # self.config = config self.client = StandAloneClient(config=config["client"], client_type="oidc") self.client.do_provider_info() self.client.do_client_registration() diff --git a/src/satosa/backends/linkedin.py b/src/satosa/backends/linkedin.py index 8d3a85b4c..21ce1f6dd 100644 --- a/src/satosa/backends/linkedin.py +++ b/src/satosa/backends/linkedin.py @@ -22,7 +22,8 @@ class LinkedInBackend(_OAuthBackend): """LinkedIn OAuth 2.0 backend""" - def __init__(self, outgoing, internal_attributes, config, base_url, name): + def __init__(self, outgoing, internal_attributes, config, base_url, name, session_storage, + logout_callback_func): """LinkedIn backend constructor :param outgoing: Callback should be called by the module after the authorization in the backend is done. @@ -42,9 +43,8 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name): """ config.setdefault('response_type', 'code') config['verify_accesstoken_state'] = False - super().__init__( - outgoing, internal_attributes, config, base_url, name, 'linkedin', - 'id') + super().__init__(outgoing, internal_attributes, config, base_url, name, 'linkedin', 'id', + session_storage, logout_callback_func) def start_auth(self, context, internal_request, get_state=stateID): """ diff --git a/src/satosa/backends/oauth.py b/src/satosa/backends/oauth.py index 3e2bd041b..9adfa38ae 100644 --- a/src/satosa/backends/oauth.py +++ b/src/satosa/backends/oauth.py @@ -32,7 +32,8 @@ class _OAuthBackend(BackendModule): See satosa.backends.oauth.FacebookBackend. """ - def __init__(self, outgoing, internal_attributes, config, base_url, name, external_type, user_id_attr): + def __init__(self, outgoing, internal_attributes, config, base_url, name, external_type, user_id_attr, + session_storage, logout_callback_func): """ :param outgoing: Callback should be called by the module after the authorization in the backend is done. @@ -52,7 +53,7 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, extern :type name: str :type external_type: str """ - super().__init__(outgoing, internal_attributes, base_url, name) + super().__init__(outgoing, internal_attributes, base_url, name, session_storage, logout_callback_func) self.config = config self.redirect_url = "%s/%s" % (self.config["base_url"], self.config["authz_page"]) self.external_type = external_type diff --git a/src/satosa/backends/openid_connect.py b/src/satosa/backends/openid_connect.py index 58d47af9b..42984bcc0 100644 --- a/src/satosa/backends/openid_connect.py +++ b/src/satosa/backends/openid_connect.py @@ -36,7 +36,8 @@ class OpenIDConnectBackend(BackendModule): OIDC module """ - def __init__(self, auth_callback_func, internal_attributes, config, base_url, name): + def __init__(self, auth_callback_func, internal_attributes, config, base_url, name, session_storage, + logout_callback_func): """ OIDC backend module. :param auth_callback_func: Callback should be called by the module after the authorization @@ -55,7 +56,7 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :type base_url: str :type name: str """ - super().__init__(auth_callback_func, internal_attributes, base_url, name) + super().__init__(auth_callback_func, internal_attributes, base_url, name, session_storage, logout_callback_func) self.auth_callback_func = auth_callback_func self.config = config cfg_verify_ssl = config["client"].get("verify_ssl", True) diff --git a/src/satosa/backends/orcid.py b/src/satosa/backends/orcid.py index 649e72451..77589f943 100644 --- a/src/satosa/backends/orcid.py +++ b/src/satosa/backends/orcid.py @@ -21,7 +21,7 @@ class OrcidBackend(_OAuthBackend): """Orcid OAuth 2.0 backend""" - def __init__(self, outgoing, internal_attributes, config, base_url, name): + def __init__(self, outgoing, internal_attributes, config, base_url, name, session_storage, logout_callback_func): """Orcid backend constructor :param outgoing: Callback should be called by the module after the authorization in the backend is done. @@ -41,9 +41,8 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name): """ config.setdefault('response_type', 'code') config['verify_accesstoken_state'] = False - super().__init__( - outgoing, internal_attributes, config, base_url, name, 'orcid', - 'orcid') + super().__init__(outgoing, internal_attributes, config, base_url, name, 'orcid', 'orcid', + session_storage, logout_callback_func) def get_request_args(self, get_state=stateID): oauth_state = get_state(self.config["base_url"], rndstr().encode()) diff --git a/src/satosa/backends/reflector.py b/src/satosa/backends/reflector.py index 6a9055485..ce52514f4 100644 --- a/src/satosa/backends/reflector.py +++ b/src/satosa/backends/reflector.py @@ -17,7 +17,7 @@ class ReflectorBackend(BackendModule): ENTITY_ID = ORG_NAME = AUTH_CLASS_REF = SUBJECT_ID = "reflector" - def __init__(self, outgoing, internal_attributes, config, base_url, name): + def __init__(self, outgoing, internal_attributes, config, base_url, name, session_storage, logout_callback_func): """ :type outgoing: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -33,7 +33,7 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name): :param base_url: base url of the service :param name: name of the plugin """ - super().__init__(outgoing, internal_attributes, base_url, name) + super().__init__(outgoing, internal_attributes, base_url, name, session_storage, logout_callback_func) def start_auth(self, context, internal_req): """ diff --git a/src/satosa/backends/saml2.py b/src/satosa/backends/saml2.py index ec99cad06..3b7fdc6f1 100644 --- a/src/satosa/backends/saml2.py +++ b/src/satosa/backends/saml2.py @@ -92,7 +92,7 @@ class SAMLBackend(BackendModule, SAMLBaseModule): VALUE_ACR_COMPARISON_DEFAULT = 'exact' - def __init__(self, outgoing, internal_attributes, config, base_url, name): + def __init__(self, outgoing, internal_attributes, config, base_url, name, session_storage, logout_callback_func): """ :type outgoing: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -108,7 +108,7 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name): :param base_url: base url of the service :param name: name of the plugin """ - super().__init__(outgoing, internal_attributes, base_url, name) + super().__init__(outgoing, internal_attributes, base_url, name, session_storage, logout_callback_func) self.config = self.init_config(config) self.discosrv = config.get(SAMLBackend.KEY_DISCO_SRV) diff --git a/src/satosa/frontends/ping.py b/src/satosa/frontends/ping.py index 27fec279c..26df46da9 100644 --- a/src/satosa/frontends/ping.py +++ b/src/satosa/frontends/ping.py @@ -14,8 +14,8 @@ class PingFrontend(FrontendModule): 200 OK, intended to be used as a simple heartbeat monitor. """ - def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name): - super().__init__(auth_req_callback_func, internal_attributes, base_url, name) + def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, session_storage): + super().__init__(auth_req_callback_func, internal_attributes, base_url, name, session_storage) self.config = config diff --git a/src/satosa/frontends/saml2.py b/src/satosa/frontends/saml2.py index cecd533db..233e91458 100644 --- a/src/satosa/frontends/saml2.py +++ b/src/satosa/frontends/saml2.py @@ -67,10 +67,10 @@ class SAMLFrontend(FrontendModule, SAMLBaseModule): KEY_ENDPOINTS = 'endpoints' KEY_IDP_CONFIG = 'idp_config' - def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name): + def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, session_storage): self._validate_config(config) - super().__init__(auth_req_callback_func, internal_attributes, base_url, name) + super().__init__(auth_req_callback_func, internal_attributes, base_url, name, session_storage) self.config = self.init_config(config) self.endpoints = config[self.KEY_ENDPOINTS] @@ -829,9 +829,9 @@ class SAMLVirtualCoFrontend(SAMLFrontend): KEY_ORGANIZATION = 'organization' KEY_ORGANIZATION_KEYS = ['display_name', 'name', 'url'] - def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name): + def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, session_storage): self.has_multiple_backends = False - super().__init__(auth_req_callback_func, internal_attributes, config, base_url, name) + super().__init__(auth_req_callback_func, internal_attributes, config, base_url, name, session_storage) def handle_authn_request(self, context, binding_in): """ diff --git a/src/satosa/plugin_loader.py b/src/satosa/plugin_loader.py index 22d148508..2a355abe5 100644 --- a/src/satosa/plugin_loader.py +++ b/src/satosa/plugin_loader.py @@ -296,10 +296,8 @@ def load_session_storage(config): if session_storage: try: storage_type = session_storage["type"] - if storage_type == "memory": - from satosa.session_storage import SessionStorageInMemory - return SessionStorageInMemory(config) - elif storage_type == "postgresql": + if storage_type == "postgresql": + logger.info("Using the postgresql session storage.") from satosa.session_storage import SessionStoragePostgreSQL try: return SessionStoragePostgreSQL(config) @@ -308,5 +306,9 @@ def load_session_storage(config): except SATOSAConfigurationError as err: logger.error(err) else: - logger.info("session storage is not defined") + logger.info("SESSION_STORAGE is not defined") + + logger.info("Using the in-memory session storage.") + from satosa.session_storage import SessionStorageInMemory + return SessionStorageInMemory(config) From 3a71c7afacc842426770f9f5ba2709756bbbfd78 Mon Sep 17 00:00:00 2001 From: Ali Haider Date: Wed, 8 Nov 2023 13:31:37 +0500 Subject: [PATCH 3/8] PostgreSQL and UTs --- setup.py | 1 + src/satosa/backends/base.py | 3 +- src/satosa/backends/idpy_oidc.py | 71 ++++++++- src/satosa/backends/oauth.py | 6 +- src/satosa/base.py | 52 ++++--- src/satosa/frontends/base.py | 2 +- src/satosa/frontends/openid_connect.py | 9 +- src/satosa/frontends/ping.py | 3 +- src/satosa/frontends/saml2.py | 9 +- src/satosa/internal.py | 4 +- src/satosa/metadata_creation/saml_metadata.py | 4 +- src/satosa/plugin_loader.py | 7 - src/satosa/session_storage.py | 142 ++++++++++++------ tests/conftest.py | 12 ++ tests/satosa/backends/test_bitbucket.py | 2 +- tests/satosa/backends/test_idpy_oidc.py | 45 +++++- tests/satosa/backends/test_oauth.py | 2 +- tests/satosa/backends/test_openid_connect.py | 3 +- tests/satosa/backends/test_orcid.py | 4 +- tests/satosa/backends/test_saml2.py | 37 +++-- tests/satosa/frontends/test_openid_connect.py | 30 ++-- tests/satosa/frontends/test_saml2.py | 17 ++- tests/satosa/test_routing.py | 4 +- tests/util.py | 10 +- 24 files changed, 336 insertions(+), 143 deletions(-) diff --git a/setup.py b/setup.py index 51bb389ea..ea247c5e1 100644 --- a/setup.py +++ b/setup.py @@ -26,6 +26,7 @@ "chevron", "cookies-samesite-compat", "importlib-metadata >= 1.7.0; python_version <= '3.8'", + "psycopg2-binary", ], extras_require={ "ldap": ["ldap3"], diff --git a/src/satosa/backends/base.py b/src/satosa/backends/base.py index 10d086027..a9fcfffce 100644 --- a/src/satosa/backends/base.py +++ b/src/satosa/backends/base.py @@ -10,8 +10,7 @@ class BackendModule(object): Base class for a backend module. """ - def __init__(self, auth_callback_func, internal_attributes, base_url, name, session_storage=None, - logout_callback_func=None): + def __init__(self, auth_callback_func, internal_attributes, base_url, name, session_storage, logout_callback_func): """ :type auth_callback_func: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response diff --git a/src/satosa/backends/idpy_oidc.py b/src/satosa/backends/idpy_oidc.py index 901e731fe..81b449e67 100644 --- a/src/satosa/backends/idpy_oidc.py +++ b/src/satosa/backends/idpy_oidc.py @@ -5,8 +5,9 @@ import logging from urllib.parse import urlparse -from idpyoidc.client.oauth2.stand_alone_client import StandAloneClient +from idpyoidc.client.oauth2.stand_alone_client import StandAloneClient, backchannel_logout from idpyoidc.server.user_authn.authn_context import UNSPECIFIED +from idpyoidc.message.oidc.session import BackChannelLogoutRequest, LogoutToken from satosa.backends.base import BackendModule from satosa.internal import AuthenticationInformation @@ -58,6 +59,8 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na front_channel_logout_uri = config["client"].get('front_channel_logout_uri') self.front_channel_logout_path = urlparse(front_channel_logout_uri).path if front_channel_logout_uri else None + back_channel_logout_uri = config["client"].get('back_channel_logout_uri') + self.back_channel_logout_path = urlparse(back_channel_logout_uri).path if back_channel_logout_uri else None def start_auth(self, context, internal_request): """ @@ -81,6 +84,8 @@ def register_endpoints(self): url_map = [(f"^{self.redirect_path.lstrip('/')}$", self.response_endpoint)] if self.front_channel_logout_path: url_map.append((f"^{self.front_channel_logout_path.lstrip('/')}$", self.front_channel_logout_endpoint)) + if self.back_channel_logout_path: + url_map.append((f"^{self.back_channel_logout_path.lstrip('/')}$", self.back_channel_logout_endpoint)) return url_map def response_endpoint(self, context, *args): @@ -113,8 +118,8 @@ def response_endpoint(self, context, *args): internal_resp = self._translate_response(all_user_claims, _info["issuer"]) sid = all_user_claims.get("sid") if sid: - internal_resp.backend_sid = sid - self.session_storage.store_backend_session(sid, _info["issuer"]) + backend_session_id = self.session_storage.store_backend_session(sid, _info["issuer"]) + internal_resp.backend_session_id = backend_session_id return self.auth_callback_func(context, internal_resp) def front_channel_logout_endpoint(self, context, *args): @@ -129,19 +134,71 @@ def front_channel_logout_endpoint(self, context, *args): :return: """ + logger.info(lu.LOG_FMT.format(id=lu.get_session_id(context.state), + message="Received front-channel logout request: {}".format(context.request))) sid = context.request.get("sid") issuer = context.request.get("iss") - session = self.session_storage.get_backend_session(sid, issuer) + backend_session = self.session_storage.get_backend_session(sid, issuer) - if session: + if backend_session: internal_req = InternalData( - backend_sid=sid, - issuer=session.get("issuer") + backend_session_id=backend_session["id"], + issuer=backend_session["issuer"] ) return self.logout_callback_func(context, internal_req) else: return Response() + def back_channel_logout_endpoint(self, context, *args): + """ + Handles the back channel logout request from the OP. + :type context: satosa.context.Context + :type args: Any + :rtype: satosa.response.Response + + :param context: SATOSA context + :param args: None + :return: + """ + logger.info(lu.LOG_FMT.format(id=lu.get_session_id(context.state), + message="Received back-channel logout request: {}".format(context.request))) + + if not context.request.get("logout_token"): + logger.warning(lu.LOG_FMT.format(id=lu.get_session_id(context.state), + message="back-channel logout request is received without logout token")) + return Response(message="Missing logout token", status="400") + else: + back_channel_logout_request = BackChannelLogoutRequest( + logout_token=context.request["logout_token"]).to_urlencoded() + + if self._verify_logout_token(context, back_channel_logout_request): + logout_token = LogoutToken().from_jwt(context.request["logout_token"], None) + sid = logout_token.get("sid") + issuer = logout_token.get("iss") + backend_session = self.session_storage.get_backend_session(sid, issuer) + + if backend_session: + internal_req = InternalData( + backend_session_id=backend_session["id"], + issuer=backend_session["issuer"] + ) + return self.logout_callback_func(context, internal_req) + else: + return Response(message="Invalid sid", status="400") + else: + return Response(message="Logout token verification failed", status="400") + + def _verify_logout_token(self, context, back_channel_logout_request): + try: + logger.debug(lu.LOG_FMT.format(id=lu.get_session_id(context.state), + message="Starting logout token verification")) + backchannel_logout(self.client, back_channel_logout_request) + return True + except Exception as e: + logger.warning(lu.LOG_FMT.format(id=lu.get_session_id(context.state), + message="Logout token verification failed"), e) + return False + def _translate_response(self, response, issuer): """ Translates oidc response to SATOSA internal response. diff --git a/src/satosa/backends/oauth.py b/src/satosa/backends/oauth.py index 9adfa38ae..201b7f715 100644 --- a/src/satosa/backends/oauth.py +++ b/src/satosa/backends/oauth.py @@ -190,7 +190,8 @@ class FacebookBackend(_OAuthBackend): """ DEFAULT_GRAPH_ENDPOINT = "https://graph.facebook.com/v2.5/me" - def __init__(self, outgoing, internal_attributes, config, base_url, name): + def __init__(self, outgoing, internal_attributes, config, base_url, name, session_storage, + logout_callback_func): """ Constructor. :param outgoing: Callback should be called by the module after the authorization in the @@ -211,7 +212,8 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name): """ config.setdefault("response_type", "code") config["verify_accesstoken_state"] = False - super().__init__(outgoing, internal_attributes, config, base_url, name, "facebook", "id") + super().__init__(outgoing, internal_attributes, config, base_url, name, "facebook", "id", session_storage, + logout_callback_func) def get_request_args(self, get_state=stateID): request_args = super().get_request_args(get_state=get_state) diff --git a/src/satosa/base.py b/src/satosa/base.py index 9b6cc1e65..64aed948b 100644 --- a/src/satosa/base.py +++ b/src/satosa/base.py @@ -137,11 +137,10 @@ def _auth_resp_finish(self, context, internal_response): frontend = self.module_router.frontend_routing(context) response = frontend.handle_authn_response(context, internal_response) - if internal_response.frontend_sid and internal_response.backend_sid: + if internal_response.frontend_sid and internal_response.backend_session_id: self.session_storage.store_session_map( internal_response["frontend_sid"], - internal_response["backend_sid"], - internal_response.auth_info.issuer) + internal_response["backend_session_id"]) return response @@ -177,31 +176,42 @@ def _auth_resp_callback_func(self, context, internal_response): return self._auth_resp_finish(context, internal_response) def _backend_logout_callback_func(self, context, internal_request): - msg = "Initiating frontend logout(s) for the issuer: {}".format(internal_request.issuer) - logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg) - logger.info(logline) + frontend_sessions = self.session_storage.get_frontend_sessions_by_backend_session_id( + internal_request.backend_session_id) - frontend_sessions = self.session_storage.get_frontend_sessions_by_backend_sid_and_issuer( - internal_request.backend_sid, - internal_request.issuer) + if frontend_sessions: + msg = "Initiating frontend logout(s) for the issuer: {}".format(internal_request.issuer) + logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg) + logger.info(logline) - for frontend_session in frontend_sessions: - context.state[ROUTER_STATE_KEY] = frontend_session.get("frontend_name") - frontend = self.module_router.frontend_routing(context) - internal_request.frontend_sid = frontend_session.get("sid") - if frontend.start_logout_from_backend(context, internal_request): - self.session_storage.delete_session_map(frontend_session.get("sid"), - internal_request.backend_sid, - internal_request.issuer) + for frontend_session in frontend_sessions: + context.state[ROUTER_STATE_KEY] = frontend_session.get("frontend_name") + frontend = self.module_router.frontend_routing(context) + internal_request.frontend_sid = frontend_session.get("sid") + if frontend.start_logout_from_backend(context, internal_request): + self.session_storage.delete_session_map(frontend_session.get("sid")) + + self._backend_logout_req_finish(context, internal_request) + else: + msg = "No frontend to logout for the issuer: {}".format(internal_request.issuer) + logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg) + logger.info(logline) - return self._backend_logout_req_finish(context, internal_request) + return Response() def _backend_logout_req_finish(self, context, internal_request): - self.session_storage.delete_backend_session(internal_request.backend_sid) - msg = "All the frontend logouts for the issuer: {} are processed.".format(internal_request.issuer) + frontend_sessions = self.session_storage.get_frontend_sessions_by_backend_session_id( + internal_request.backend_session_id) + + if frontend_sessions: + msg = "Some frontends could not logout for the backend session id : {}".format( + internal_request.backend_session_id) + else: + msg = "All the frontends logged out for the backend session id: {}.".format( + internal_request.backend_session_id) + self.session_storage.delete_backend_session(internal_request.backend_session_id) logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg) logger.info(logline) - return Response() def _handle_satosa_authentication_error(self, error): """ diff --git a/src/satosa/frontends/base.py b/src/satosa/frontends/base.py index d6655f5b4..aa39ad41e 100644 --- a/src/satosa/frontends/base.py +++ b/src/satosa/frontends/base.py @@ -9,7 +9,7 @@ class FrontendModule(object): Base class for a frontend module. """ - def __init__(self, auth_req_callback_func, internal_attributes, base_url, name, session_storage=None): + def __init__(self, auth_req_callback_func, internal_attributes, base_url, name, session_storage): """ :type auth_req_callback_func: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response diff --git a/src/satosa/frontends/openid_connect.py b/src/satosa/frontends/openid_connect.py index cde3e5039..dfc5b03d5 100644 --- a/src/satosa/frontends/openid_connect.py +++ b/src/satosa/frontends/openid_connect.py @@ -59,7 +59,8 @@ class OpenIDConnectFrontend(FrontendModule): A OpenID Connect frontend module """ - def __init__(self, auth_req_callback_func, internal_attributes, conf, base_url, name, session_storage): + def __init__(self, auth_req_callback_func, internal_attributes, conf, base_url, name, session_storage, + logout_callback): _validate_config(conf) super().__init__(auth_req_callback_func, internal_attributes, base_url, name, session_storage) @@ -424,12 +425,12 @@ def start_logout_from_backend(self, context, internal_request): logout_token_str = logout_token.to_jwt([self.signing_key], "RS256") logger.debug('signed logout_token {} using alg={}'.format(logout_token_str, "RS256")) - resp = requests.post(client.get("back_channel_logout_uri"), json={"logout_token": logout_token_str}) + resp = requests.post(client.get("back_channel_logout_uri"), json={"logout_token": logout_token_str}, verify=False) if resp.status_code == 200: self.session_storage.delete_frontend_session(internal_request.frontend_sid) - msg = "client {} of the frontend {} logged out successfully.".format(session.get("requester"), - self.name) + msg = "RP with client id '{}' of the frontend name '{}' logged out successfully.".format( + session.get("requester"), self.name) logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg) logger.info(logline) else: diff --git a/src/satosa/frontends/ping.py b/src/satosa/frontends/ping.py index 26df46da9..bec4bc257 100644 --- a/src/satosa/frontends/ping.py +++ b/src/satosa/frontends/ping.py @@ -14,7 +14,8 @@ class PingFrontend(FrontendModule): 200 OK, intended to be used as a simple heartbeat monitor. """ - def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, session_storage): + def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, session_storage, + logout_callback): super().__init__(auth_req_callback_func, internal_attributes, base_url, name, session_storage) self.config = config diff --git a/src/satosa/frontends/saml2.py b/src/satosa/frontends/saml2.py index 233e91458..a4ac0be59 100644 --- a/src/satosa/frontends/saml2.py +++ b/src/satosa/frontends/saml2.py @@ -67,7 +67,8 @@ class SAMLFrontend(FrontendModule, SAMLBaseModule): KEY_ENDPOINTS = 'endpoints' KEY_IDP_CONFIG = 'idp_config' - def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, session_storage): + def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, session_storage, + logout_callback): self._validate_config(config) super().__init__(auth_req_callback_func, internal_attributes, base_url, name, session_storage) @@ -829,9 +830,11 @@ class SAMLVirtualCoFrontend(SAMLFrontend): KEY_ORGANIZATION = 'organization' KEY_ORGANIZATION_KEYS = ['display_name', 'name', 'url'] - def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, session_storage): + def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, session_storage, + logout_callback): self.has_multiple_backends = False - super().__init__(auth_req_callback_func, internal_attributes, config, base_url, name, session_storage) + super().__init__(auth_req_callback_func, internal_attributes, config, base_url, name, session_storage, + logout_callback) def handle_authn_request(self, context, binding_in): """ diff --git a/src/satosa/internal.py b/src/satosa/internal.py index c91e39f2f..c936fc207 100644 --- a/src/satosa/internal.py +++ b/src/satosa/internal.py @@ -125,7 +125,7 @@ def __init__( subject_type=None, attributes=None, frontend_sid=None, - backend_sid=None, + backend_session_id=None, *args, **kwargs, ): @@ -160,4 +160,4 @@ def __init__( self.subject_type = subject_type self.attributes = attributes if attributes is not None else {} self.frontend_sid = frontend_sid - self.backend_sid = backend_sid + self.backend_session_id = backend_session_id diff --git a/src/satosa/metadata_creation/saml_metadata.py b/src/satosa/metadata_creation/saml_metadata.py index f88bbaaec..0ca824f93 100644 --- a/src/satosa/metadata_creation/saml_metadata.py +++ b/src/satosa/metadata_creation/saml_metadata.py @@ -104,8 +104,8 @@ def create_entity_descriptors(satosa_config): :type satosa_config: satosa.satosa_config.SATOSAConfig :rtype: Tuple[str, str] """ - frontend_modules = load_frontends(satosa_config, None, satosa_config["INTERNAL_ATTRIBUTES"]) - backend_modules = load_backends(satosa_config, None, satosa_config["INTERNAL_ATTRIBUTES"]) + frontend_modules = load_frontends(satosa_config, None, satosa_config["INTERNAL_ATTRIBUTES"], None) + backend_modules = load_backends(satosa_config, None, satosa_config["INTERNAL_ATTRIBUTES"], None, None) logger.info("Loaded frontend plugins: {}".format([frontend.name for frontend in frontend_modules])) logger.info("Loaded backend plugins: {}".format([backend.name for backend in backend_modules])) diff --git a/src/satosa/plugin_loader.py b/src/satosa/plugin_loader.py index 2a355abe5..9357c13d7 100644 --- a/src/satosa/plugin_loader.py +++ b/src/satosa/plugin_loader.py @@ -285,13 +285,6 @@ def load_response_microservices(plugin_path, plugins, internal_attributes, base_ def load_session_storage(config): - """ - Loads the storage database specifies in the config - - :type config: satosa.satosa_config.SATOSAConfig - - :param config: The configuration of the satosa proxy - """ session_storage = config.get("SESSION_STORAGE") if session_storage: try: diff --git a/src/satosa/session_storage.py b/src/satosa/session_storage.py index ad48d2080..ada546a6a 100644 --- a/src/satosa/session_storage.py +++ b/src/satosa/session_storage.py @@ -1,9 +1,13 @@ +import uuid + +from sqlalchemy import ForeignKey, Column, Integer, String +from sqlalchemy.orm import mapped_column from sqlalchemy.ext.declarative import declarative_base class SessionStorage: def __init__(self, config): - self.db_config = config["SESSION_STORAGE"] + self.db_config = config.get("SESSION_STORAGE") class SessionStorageInMemory(SessionStorage): @@ -24,9 +28,22 @@ def store_frontend_session(self, frontend_name, requester, subject_id, sid): "sid": sid }) + def get_frontend_session(self, sid): + for session in self.frontend_sessions: + if session.get("sid") == sid: + return session + + def delete_frontend_session(self, sid): + for session in self.frontend_sessions: + if session.get("sid") == sid: + self.frontend_sessions.remove(session) + def store_backend_session(self, sid, issuer): - self.backend_sessions.append({"sid": sid, + backend_session_id = len(self.backend_sessions) + 1 + self.backend_sessions.append({"id": backend_session_id, + "sid": sid, "issuer": issuer}) + return backend_session_id def get_backend_session(self, sid, issuer=None): for session in self.backend_sessions: @@ -35,38 +52,21 @@ def get_backend_session(self, sid, issuer=None): elif session.get("sid") == sid: return session - def delete_backend_session(self, sid): + def delete_backend_session(self, id): for session in self.backend_sessions: - if session.get("sid") == sid: + if session.get("id") == id: self.backend_sessions.remove(session) return session - def store_session_map(self, frontend_sid, backend_sid, issuer): + def store_session_map(self, frontend_sid, backend_session_id): self.session_maps.append({"frontend_sid": frontend_sid, - "backend_sid": backend_sid, - "issuer": issuer + "backend_session_id": backend_session_id }) - def delete_session_map(self, frontend_sid, backend_sid, issuer): - for session_map in self.session_maps: - if session_map.get("frontend_sid") == frontend_sid and session_map.get("issuer") == issuer and \ - session_map.get("backend_sid") == backend_sid: - self.session_maps.remove(session_map) - - def get_frontend_session(self, sid): - for session in self.frontend_sessions: - if session.get("sid") == sid: - return session - - def delete_frontend_session(self, sid): - for session in self.frontend_sessions: - if session.get("sid") == sid: - self.frontend_sessions.remove(session) - - def get_frontend_sessions_by_backend_sid_and_issuer(self, backend_sid, issuer): + def get_frontend_sessions_by_backend_session_id(self, backend_session_id): sessions = list() for session_map in self.session_maps: - if session_map.get("backend_sid") == backend_sid and session_map.get("issuer") == issuer: + if session_map.get("backend_session_id") == backend_session_id: frontend_sid = session_map.get("frontend_sid") for session in self.frontend_sessions: if session.get("sid") == frontend_sid: @@ -74,37 +74,35 @@ def get_frontend_sessions_by_backend_sid_and_issuer(self, backend_sid, issuer): break return sessions + def delete_session_map(self, frontend_sid): + for session_map in self.session_maps: + if session_map.get("frontend_sid") == frontend_sid: + self.session_maps.remove(session_map) + Base = declarative_base() class FrontendSession(Base): - from sqlalchemy import Column, Integer, String - __tablename__ = 'frontend_session' - id = Column(Integer, primary_key=True, autoincrement=True) + sid = Column(String, primary_key=True) frontend_name = Column(String) requester = Column(String) subject_id = Column(String) - sid = Column(String) class BackendSession(Base): - from sqlalchemy import Column, Integer, String - __tablename__ = 'backend_session' id = Column(Integer, primary_key=True, autoincrement=True) - sid = Column(String) + sid = Column(String, primary_key=True) issuer = Column(String) -class FrontendBackendSession(Base): - from sqlalchemy import Column, Integer, String - - __tablename__ = 'frontend_backend_session' +class SessionMap(Base): + __tablename__ = 'session_map' id = Column(Integer, primary_key=True, autoincrement=True) - frontend_sid = Column(String) - backend_sid = Column(String) + frontend_sid = mapped_column(String, ForeignKey("frontend_session.sid")) + backend_session_id = mapped_column(Integer, ForeignKey("backend_session.id")) class SessionStoragePostgreSQL(SessionStorage): @@ -146,22 +144,82 @@ def store_frontend_session(self, frontend_name, requester, subject_id, sid): session.commit() session.close() + def get_frontend_session(self, sid): + session = self.Session() + frontend_session = session.query(FrontendSession).filter(FrontendSession.sid == sid).first() + session.close() + if frontend_session: + return {"sid": frontend_session.sid, + "frontend_name": frontend_session.frontend_name, + "requester": frontend_session.requester, + "subject_id": frontend_session.subject_id} + return None + + def delete_frontend_session(self, sid): + session = self.Session() + session.query(FrontendSession).filter(FrontendSession.sid == sid).delete() + session.commit() + session.close() + def store_backend_session(self, sid, issuer): session = self.Session() - backend_session = FrontendSession( + backend_session = BackendSession( sid=sid, issuer=issuer ) session.add(backend_session) session.commit() + backend_session_id = backend_session.id session.close() + return backend_session_id - def store_session_map(self, frontend_sid, backend_sid): + def get_backend_session(self, sid, issuer=None): session = self.Session() - frontend_backend_session = FrontendBackendSession( + if issuer: + backend_session = session.query(BackendSession).filter( + BackendSession.sid == sid and BackendSession.issuer == issuer).first() + else: + backend_session = session.query(BackendSession).filter(BackendSession.sid == sid).first() + session.close() + + if backend_session: + return {"id": backend_session.id, + "sid": backend_session.sid, + "issuer": backend_session.issuer} + return None + + def delete_backend_session(self, backend_session_id): + session = self.Session() + session.query(BackendSession).filter(BackendSession.id == backend_session_id).delete() + session.commit() + session.close() + + def store_session_map(self, frontend_sid, backend_session_id): + session = self.Session() + frontend_backend_session = SessionMap( frontend_sid=frontend_sid, - backend_sid=backend_sid + backend_session_id=backend_session_id, ) session.add(frontend_backend_session) session.commit() session.close() + + def get_frontend_sessions_by_backend_session_id(self, backend_session_id): + frontend_sessions = list() + session = self.Session() + frontend_session_rows = session.query(FrontendSession).join(SessionMap).filter(SessionMap.backend_session_id == backend_session_id).all() + session.close() + + for frontend_session in frontend_session_rows: + frontend_sessions.append({"sid": frontend_session.sid, + "frontend_name": frontend_session.frontend_name, + "requester": frontend_session.requester, + "subject_id": frontend_session.subject_id}) + + return frontend_sessions + + def delete_session_map(self, frontend_sid): + session = self.Session() + session.query(SessionMap).filter(SessionMap.frontend_sid == frontend_sid).delete() + session.commit() + session.close() \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index f0602a028..f31ef70b2 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -6,8 +6,10 @@ from saml2.extension.idpdisc import BINDING_DISCO from saml2.saml import NAME_FORMAT_URI, NAMEID_FORMAT_TRANSIENT, NAMEID_FORMAT_PERSISTENT +from satosa.plugin_loader import load_session_storage from satosa.context import Context from satosa.state import State + from .util import create_metadata_from_config_dict from .util import generate_cert, write_cert @@ -353,3 +355,13 @@ def consent_module_config(signing_key_path): } } return consent_config + + +@pytest.fixture +def session_storage(): + storage_config = { + "SESSION_STORAGE": { + "type": "in-memory" + } + } + return load_session_storage(storage_config) diff --git a/tests/satosa/backends/test_bitbucket.py b/tests/satosa/backends/test_bitbucket.py index d6cf25bac..a4cfe727b 100644 --- a/tests/satosa/backends/test_bitbucket.py +++ b/tests/satosa/backends/test_bitbucket.py @@ -75,7 +75,7 @@ class TestBitBucketBackend(object): @pytest.fixture(autouse=True) def create_backend(self): self.bb_backend = BitBucketBackend(Mock(), INTERNAL_ATTRIBUTES, - BB_CONFIG, "base_url", "bitbucket") + BB_CONFIG, "base_url", "bitbucket", None, None) @pytest.fixture def incoming_authn_response(self, context): diff --git a/tests/satosa/backends/test_idpy_oidc.py b/tests/satosa/backends/test_idpy_oidc.py index 95e8b427c..f366a8220 100644 --- a/tests/satosa/backends/test_idpy_oidc.py +++ b/tests/satosa/backends/test_idpy_oidc.py @@ -19,6 +19,7 @@ from satosa.context import Context from satosa.internal import InternalData from satosa.response import Response +from satosa.session_storage import SessionStorageInMemory ISSUER = "https://provider.example.com" CLIENT_ID = "test_client" @@ -64,9 +65,41 @@ def internal_attributes(self): } } + @pytest.fixture + def session_storage(self): + backend_sessions = [ + { + "id": 1, + "sid": "30f8dae4-1da5-41bf-a801-5aad0648af8c", + "issuer": "https://login.microsoftonline.com/4ef96300-df5b-4978-8bb6-54ead73fd78e/v2.0" + } + ] + + session_maps = [ + { + "backend_session_id": 1, + "frontend_sid": "urn:uuid:26f0122d-4347-4e45-a6db-fceed571222a" + } + ] + + frontend_sessions = [ + { + "frontend_name": "OIDC", + "requester": "5258756a-f970-433e-8fee-0ec85b938fe6", + "subject_id": "yiPzYn2ASoQznkqSxSaYySg9qrlDejM0Lcn6mef28Mg", + "sid": "urn:uuid:26f0122d-4347-4e45-a6db-fceed571222a" + } + ] + + session_storage = SessionStorageInMemory({}) + session_storage.backend_sessions = backend_sessions + session_storage.frontend_sessions = frontend_sessions + session_storage.session_maps = session_maps + return session_storage + @pytest.fixture(autouse=True) @responses.activate - def create_backend(self, internal_attributes, backend_config): + def create_backend(self, internal_attributes, backend_config, session_storage): base_url = backend_config['client']['base_url'] self.issuer_keys = build_keyjar(DEFAULT_KEY_DEFS) with responses.RequestsMock() as rsps: @@ -78,7 +111,7 @@ def create_backend(self, internal_attributes, backend_config): content_type="application/json") self.oidc_backend = IdpyOIDCBackend(Mock(), internal_attributes, backend_config, - base_url, "oidc") + base_url, "oidc", session_storage, Mock()) @pytest.fixture def userinfo(self): @@ -233,3 +266,11 @@ def test_start_auth_redirects_to_provider_authorization_endpoint(self, context): assert "state" in auth_params assert "nonce" in auth_params + def test_front_channel_logout_endpoint_with_oidc_frontend(self, context): + context.request = {"sid": "30f8dae4-1da5-41bf-a801-5aad0648af8c"} + self.oidc_backend.front_channel_logout_endpoint(context) + args = self.oidc_backend.logout_callback_func.call_args[0] + assert isinstance(args[0], Context) + assert isinstance(args[1], InternalData) + assert args[1].get("issuer") == "https://login.microsoftonline.com/4ef96300-df5b-4978-8bb6-54ead73fd78e/v2.0" + assert args[1].get("backend_session_id") == 1 diff --git a/tests/satosa/backends/test_oauth.py b/tests/satosa/backends/test_oauth.py index 22afc8ee7..3f7161b94 100644 --- a/tests/satosa/backends/test_oauth.py +++ b/tests/satosa/backends/test_oauth.py @@ -65,7 +65,7 @@ class TestFacebookBackend(object): @pytest.fixture(autouse=True) def create_backend(self): - self.fb_backend = FacebookBackend(Mock(), INTERNAL_ATTRIBUTES, FB_CONFIG, "base_url", "facebook") + self.fb_backend = FacebookBackend(Mock(), INTERNAL_ATTRIBUTES, FB_CONFIG, "base_url", "facebook", None, None) @pytest.fixture def incoming_authn_response(self, context): diff --git a/tests/satosa/backends/test_openid_connect.py b/tests/satosa/backends/test_openid_connect.py index 34bac79fe..357fd6b83 100644 --- a/tests/satosa/backends/test_openid_connect.py +++ b/tests/satosa/backends/test_openid_connect.py @@ -25,7 +25,8 @@ class TestOpenIDConnectBackend(object): @pytest.fixture(autouse=True) def create_backend(self, internal_attributes, backend_config): - self.oidc_backend = OpenIDConnectBackend(Mock(), internal_attributes, backend_config, "base_url", "oidc") + self.oidc_backend = OpenIDConnectBackend(Mock(), internal_attributes, backend_config, "base_url", "oidc", None, + None) @pytest.fixture def backend_config(self): diff --git a/tests/satosa/backends/test_orcid.py b/tests/satosa/backends/test_orcid.py index 5120d4e89..9eaa340d1 100644 --- a/tests/satosa/backends/test_orcid.py +++ b/tests/satosa/backends/test_orcid.py @@ -28,7 +28,9 @@ def create_backend(self, internal_attributes, backend_config): internal_attributes, backend_config, backend_config["base_url"], - "orcid" + "orcid", + None, + None ) @pytest.fixture diff --git a/tests/satosa/backends/test_saml2.py b/tests/satosa/backends/test_saml2.py index e1cc96466..e1ac84bce 100644 --- a/tests/satosa/backends/test_saml2.py +++ b/tests/satosa/backends/test_saml2.py @@ -91,7 +91,7 @@ def create_backend(self, sp_conf, idp_conf): self.samlbackend = SAMLBackend(Mock(), INTERNAL_ATTRIBUTES, {"sp_config": sp_conf, "disco_srv": DISCOSRV_URL}, "base_url", - "samlbackend") + "samlbackend", None, None) def test_register_endpoints(self, sp_conf): """ @@ -172,7 +172,8 @@ def test_start_auth_redirects_directly_to_mirrored_idp( def test_redirect_to_idp_if_only_one_idp_in_metadata(self, context, sp_conf, idp_conf): sp_conf["metadata"]["inline"] = [create_metadata_from_config_dict(idp_conf)] # instantiate new backend, without any discovery service configured - samlbackend = SAMLBackend(None, INTERNAL_ATTRIBUTES, {"sp_config": sp_conf}, "base_url", "saml_backend") + samlbackend = SAMLBackend(None, INTERNAL_ATTRIBUTES, {"sp_config": sp_conf}, "base_url", "saml_backend", None, + None) resp = samlbackend.start_auth(context, InternalData()) assert_redirect_to_idp(resp, idp_conf) @@ -217,6 +218,8 @@ def _make_authn_request(self, http_host, context, config, entity_id): config, "base_url", "samlbackend", + None, + None ) resp = self.samlbackend.authn_request(context, entity_id) req_params = dict(parse_qsl(urlparse(resp.message).query)) @@ -335,6 +338,8 @@ def test_authn_response_with_encrypted_assertion(self, sp_conf, context): {"sp_config": sp_conf, "disco_srv": DISCOSRV_URL}, "base_url", "samlbackend", + None, + None ) response_binding = BINDING_HTTP_REDIRECT relay_state = "test relay state" @@ -370,7 +375,7 @@ def test_backend_reads_encryption_key_from_key_file(self, sp_conf): sp_conf["key_file"] = os.path.join(TEST_RESOURCE_BASE_PATH, "encryption_key.pem") samlbackend = SAMLBackend(Mock(), INTERNAL_ATTRIBUTES, {"sp_config": sp_conf, "disco_srv": DISCOSRV_URL}, - "base_url", "samlbackend") + "base_url", "samlbackend", None, None) assert samlbackend.encryption_keys def test_backend_reads_encryption_key_from_encryption_keypair(self, sp_conf): @@ -378,7 +383,7 @@ def test_backend_reads_encryption_key_from_encryption_keypair(self, sp_conf): sp_conf["encryption_keypairs"] = [{"key_file": os.path.join(TEST_RESOURCE_BASE_PATH, "encryption_key.pem")}] samlbackend = SAMLBackend(Mock(), INTERNAL_ATTRIBUTES, {"sp_config": sp_conf, "disco_srv": DISCOSRV_URL}, - "base_url", "samlbackend") + "base_url", "samlbackend", None, None) assert samlbackend.encryption_keys def test_metadata_endpoint(self, context, sp_conf): @@ -390,7 +395,8 @@ def test_metadata_endpoint(self, context, sp_conf): def test_get_metadata_desc(self, sp_conf, idp_conf): sp_conf["metadata"]["inline"] = [create_metadata_from_config_dict(idp_conf)] # instantiate new backend, with a single backing IdP - samlbackend = SAMLBackend(None, INTERNAL_ATTRIBUTES, {"sp_config": sp_conf}, "base_url", "saml_backend") + samlbackend = SAMLBackend(None, INTERNAL_ATTRIBUTES, {"sp_config": sp_conf}, "base_url", "saml_backend", None, + None) entity_descriptions = samlbackend.get_metadata_desc() assert len(entity_descriptions) == 1 @@ -417,7 +423,8 @@ def test_get_metadata_desc_with_logo_without_lang(self, sp_conf, idp_conf): sp_conf["metadata"]["inline"] = [create_metadata_from_config_dict(idp_conf)] # instantiate new backend, with a single backing IdP - samlbackend = SAMLBackend(None, INTERNAL_ATTRIBUTES, {"sp_config": sp_conf}, "base_url", "saml_backend") + samlbackend = SAMLBackend(None, INTERNAL_ATTRIBUTES, {"sp_config": sp_conf}, "base_url", "saml_backend", None, + None) entity_descriptions = samlbackend.get_metadata_desc() assert len(entity_descriptions) == 1 @@ -446,7 +453,7 @@ def test_default_redirect_to_discovery_service_if_using_mdq( sp_conf["metadata"]["inline"] = [create_metadata_from_config_dict(idp_conf)] sp_conf["metadata"]["mdq"] = ["https://mdq.example.com"] samlbackend = SAMLBackend(None, INTERNAL_ATTRIBUTES, {"sp_config": sp_conf, "disco_srv": DISCOSRV_URL,}, - "base_url", "saml_backend") + "base_url", "saml_backend", None, None) resp = samlbackend.start_auth(context, InternalData()) assert_redirect_to_discovery_server(resp, sp_conf, DISCOSRV_URL) @@ -462,21 +469,21 @@ def test_use_of_disco_or_redirect_to_idp_when_using_mdq_and_forceauthn_is_not_se SAMLBackend.KEY_MEMORIZE_IDP: True, } samlbackend = SAMLBackend( - None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend" + None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend", None, None ) resp = samlbackend.start_auth(context, InternalData()) assert_redirect_to_discovery_server(resp, sp_conf, DISCOSRV_URL) context.state[Context.KEY_MEMORIZED_IDP] = idp_conf["entityid"] samlbackend = SAMLBackend( - None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend" + None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend", None, None ) resp = samlbackend.start_auth(context, InternalData()) assert_redirect_to_idp(resp, idp_conf) backend_conf[SAMLBackend.KEY_MEMORIZE_IDP] = False samlbackend = SAMLBackend( - None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend" + None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend", None, None ) resp = samlbackend.start_auth(context, InternalData()) assert_redirect_to_discovery_server(resp, sp_conf, DISCOSRV_URL) @@ -485,7 +492,7 @@ def test_use_of_disco_or_redirect_to_idp_when_using_mdq_and_forceauthn_is_not_se context.state[Context.KEY_MEMORIZED_IDP] = idp_conf["entityid"] backend_conf[SAMLBackend.KEY_USE_MEMORIZED_IDP_WHEN_FORCE_AUTHN] = True samlbackend = SAMLBackend( - None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend" + None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend", None, None ) resp = samlbackend.start_auth(context, InternalData()) assert_redirect_to_discovery_server(resp, sp_conf, DISCOSRV_URL) @@ -506,14 +513,14 @@ def test_use_of_disco_or_redirect_to_idp_when_using_mdq_and_forceauthn_is_set_tr SAMLBackend.KEY_MIRROR_FORCE_AUTHN: True, } samlbackend = SAMLBackend( - None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend" + None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend", None, None ) resp = samlbackend.start_auth(context, InternalData()) assert_redirect_to_discovery_server(resp, sp_conf, DISCOSRV_URL) backend_conf[SAMLBackend.KEY_USE_MEMORIZED_IDP_WHEN_FORCE_AUTHN] = True samlbackend = SAMLBackend( - None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend" + None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend", None, None ) resp = samlbackend.start_auth(context, InternalData()) assert_redirect_to_idp(resp, idp_conf) @@ -534,14 +541,14 @@ def test_use_of_disco_or_redirect_to_idp_when_using_mdq_and_forceauthn_is_set_1( SAMLBackend.KEY_MIRROR_FORCE_AUTHN: True, } samlbackend = SAMLBackend( - None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend" + None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend", None, None ) resp = samlbackend.start_auth(context, InternalData()) assert_redirect_to_discovery_server(resp, sp_conf, DISCOSRV_URL) backend_conf[SAMLBackend.KEY_USE_MEMORIZED_IDP_WHEN_FORCE_AUTHN] = True samlbackend = SAMLBackend( - None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend" + None, INTERNAL_ATTRIBUTES, backend_conf, "base_url", "saml_backend", None, None ) resp = samlbackend.start_auth(context, InternalData()) assert_redirect_to_idp(resp, idp_conf) diff --git a/tests/satosa/frontends/test_openid_connect.py b/tests/satosa/frontends/test_openid_connect.py index f769b2c66..3e001963a 100644 --- a/tests/satosa/frontends/test_openid_connect.py +++ b/tests/satosa/frontends/test_openid_connect.py @@ -86,14 +86,14 @@ def frontend_config_with_extra_id_token_claims(self, signing_key_path): return config - def create_frontend(self, frontend_config): + def create_frontend(self, frontend_config, session_storage): # will use in-memory storage instance = OpenIDConnectFrontend(lambda ctx, req: None, INTERNAL_ATTRIBUTES, - frontend_config, BASE_URL, "oidc_frontend") + frontend_config, BASE_URL, "oidc_frontend", session_storage, None) instance.register_endpoints(["foo_backend"]) return instance - def create_frontend_with_extra_scopes(self, frontend_config_with_extra_scopes): + def create_frontend_with_extra_scopes(self, frontend_config_with_extra_scopes, session_storage): # will use in-memory storage internal_attributes_with_extra_scopes = copy.deepcopy(INTERNAL_ATTRIBUTES) internal_attributes_with_extra_scopes["attributes"].update(EXTRA_CLAIMS) @@ -102,18 +102,18 @@ def create_frontend_with_extra_scopes(self, frontend_config_with_extra_scopes): internal_attributes_with_extra_scopes, frontend_config_with_extra_scopes, BASE_URL, - "oidc_frontend_with_extra_scopes", + "oidc_frontend_with_extra_scopes", session_storage, None ) instance.register_endpoints(["foo_backend"]) return instance @pytest.fixture - def frontend(self, frontend_config): - return self.create_frontend(frontend_config) + def frontend(self, frontend_config, session_storage): + return self.create_frontend(frontend_config, session_storage) @pytest.fixture - def frontend_with_extra_scopes(self, frontend_config_with_extra_scopes): - return self.create_frontend_with_extra_scopes(frontend_config_with_extra_scopes) + def frontend_with_extra_scopes(self, frontend_config_with_extra_scopes, session_storage): + return self.create_frontend_with_extra_scopes(frontend_config_with_extra_scopes, session_storage) @pytest.fixture def authn_req(self): @@ -377,7 +377,7 @@ def test_register_endpoints_token_and_userinfo_endpoint_is_published_if_necessar def test_register_endpoints_token_and_userinfo_endpoint_is_not_published_if_only_implicit_flow( self, frontend_config, context): frontend_config["provider"]["response_types_supported"] = ["id_token", "id_token token"] - frontend = self.create_frontend(frontend_config) + frontend = self.create_frontend(frontend_config, None) urls = frontend.register_endpoints(["test"]) assert ("^{}/{}".format("test", TokenEndpoint.url), frontend.token_endpoint) not in urls @@ -394,7 +394,7 @@ def test_register_endpoints_token_and_userinfo_endpoint_is_not_published_if_only def test_register_endpoints_dynamic_client_registration_is_configurable( self, frontend_config, client_registration_enabled): frontend_config["provider"]["client_registration_supported"] = client_registration_enabled - frontend = self.create_frontend(frontend_config) + frontend = self.create_frontend(frontend_config, None) urls = frontend.register_endpoints(["test"]) assert (("^{}/{}".format(frontend.name, RegistrationEndpoint.url), @@ -406,10 +406,10 @@ def test_register_endpoints_dynamic_client_registration_is_configurable( True, False ]) - def test_mirrored_subject(self, context, frontend_config, authn_req, sub_mirror_public): + def test_mirrored_subject(self, context, frontend_config, authn_req, sub_mirror_public, session_storage): frontend_config["sub_mirror_public"] = sub_mirror_public frontend_config["provider"]["subject_types_supported"] = ["public"] - frontend = self.create_frontend(frontend_config) + frontend = self.create_frontend(frontend_config, session_storage) self.insert_client_in_client_db(frontend, authn_req["redirect_uri"]) internal_response = self.setup_for_authn_response(context, frontend, authn_req) @@ -425,7 +425,7 @@ def test_mirrored_subject(self, context, frontend_config, authn_req, sub_mirror_ def test_token_endpoint(self, context, frontend_config, authn_req): token_lifetime = 60 * 60 * 24 frontend_config["provider"]["access_token_lifetime"] = token_lifetime - frontend = self.create_frontend(frontend_config) + frontend = self.create_frontend(frontend_config, None) user_id = "test_user" self.insert_client_in_client_db(frontend, authn_req["redirect_uri"]) @@ -445,7 +445,7 @@ def test_token_endpoint(self, context, frontend_config, authn_req): assert parsed["id_token"] def test_token_endpoint_with_extra_claims(self, context, frontend_config_with_extra_id_token_claims, authn_req): - frontend = self.create_frontend(frontend_config_with_extra_id_token_claims) + frontend = self.create_frontend(frontend_config_with_extra_id_token_claims, None) user_id = "test_user" self.insert_client_in_client_db(frontend, authn_req["redirect_uri"]) @@ -468,7 +468,7 @@ def test_token_endpoint_with_extra_claims(self, context, frontend_config_with_ex def test_token_endpoint_issues_refresh_tokens_if_configured(self, context, frontend_config, authn_req): frontend_config["provider"]["refresh_token_lifetime"] = 60 * 60 * 24 * 365 frontend = OpenIDConnectFrontend(lambda ctx, req: None, INTERNAL_ATTRIBUTES, - frontend_config, BASE_URL, "oidc_frontend") + frontend_config, BASE_URL, "oidc_frontend", None, None) frontend.register_endpoints(["test_backend"]) user_id = "test_user" diff --git a/tests/satosa/frontends/test_saml2.py b/tests/satosa/frontends/test_saml2.py index 978489429..e75e751e0 100644 --- a/tests/satosa/frontends/test_saml2.py +++ b/tests/satosa/frontends/test_saml2.py @@ -69,7 +69,7 @@ def setup_for_authn_req(self, context, idp_conf, sp_conf, nameid_format=None, re base_url = self.construct_base_url_from_entity_id(idp_conf["entityid"]) samlfrontend = SAMLFrontend(lambda ctx, internal_req: (ctx, internal_req), - internal_attributes, config, base_url, "saml_frontend") + internal_attributes, config, base_url, "saml_frontend", None, None) samlfrontend.register_endpoints(["saml"]) idp_metadata_str = create_metadata_from_config_dict(samlfrontend.idp_config) @@ -119,7 +119,7 @@ def get_auth_response(self, samlfrontend, context, internal_response, sp_conf, i ]) def test_config_error_handling(self, conf): with pytest.raises(ValueError): - SAMLFrontend(lambda ctx, req: None, INTERNAL_ATTRIBUTES, conf, "base_url", "saml_frontend") + SAMLFrontend(lambda ctx, req: None, INTERNAL_ATTRIBUTES, conf, "base_url", "saml_frontend", None, None) def test_register_endpoints(self, idp_conf): """ @@ -133,7 +133,7 @@ def get_path_from_url(url): base_url = self.construct_base_url_from_entity_id(idp_conf["entityid"]) samlfrontend = SAMLFrontend(lambda context, internal_req: (context, internal_req), - INTERNAL_ATTRIBUTES, config, base_url, "saml_frontend") + INTERNAL_ATTRIBUTES, config, base_url, "saml_frontend", None, None) providers = ["foo", "bar"] url_map = samlfrontend.register_endpoints(providers) @@ -247,7 +247,7 @@ def test_get_filter_attributes_with_sp_requested_attributes_without_friendlyname "eduPersonAffiliation", "mail", "displayName", "sn", "givenName"]}} # no op mapping for saml attribute names - samlfrontend = SAMLFrontend(None, internal_attributes, conf, base_url, "saml_frontend") + samlfrontend = SAMLFrontend(None, internal_attributes, conf, base_url, "saml_frontend", None, None) samlfrontend.register_endpoints(["testprovider"]) internal_req = InternalData( @@ -357,7 +357,8 @@ def test_sp_metadata_without_uiinfo(self, context, idp_conf, sp_conf): def test_metadata_endpoint(self, context, idp_conf): conf = {"idp_config": idp_conf, "endpoints": ENDPOINTS} - samlfrontend = SAMLFrontend(lambda ctx, req: None, INTERNAL_ATTRIBUTES, conf, "base_url", "saml_frontend") + samlfrontend = SAMLFrontend(lambda ctx, req: None, INTERNAL_ATTRIBUTES, conf, "base_url", "saml_frontend", None, + None) samlfrontend.register_endpoints(["todo"]) resp = samlfrontend._metadata_endpoint(context) headers = dict(resp.headers) @@ -400,7 +401,7 @@ class TestSAMLMirrorFrontend: def create_frontend(self, idp_conf): conf = {"idp_config": idp_conf, "endpoints": ENDPOINTS} self.frontend = SAMLMirrorFrontend(lambda ctx, req: None, INTERNAL_ATTRIBUTES, conf, BASE_URL, - "saml_mirror_frontend") + "saml_mirror_frontend", None, None) self.frontend.register_endpoints([self.BACKEND]) def assert_dynamic_endpoints(self, sso_endpoints): @@ -493,7 +494,9 @@ def frontend(self, idp_conf, sp_conf): internal_attributes, conf, BASE_URL, - "saml_virtual_co_frontend") + "saml_virtual_co_frontend", + None, + None) frontend.register_endpoints([self.BACKEND]) return frontend diff --git a/tests/satosa/test_routing.py b/tests/satosa/test_routing.py index be23456ad..2e17dfd10 100644 --- a/tests/satosa/test_routing.py +++ b/tests/satosa/test_routing.py @@ -13,11 +13,11 @@ class TestModuleRouter: def create_router(self): backends = [] for provider in BACKEND_NAMES: - backends.append(TestBackend(None, {"attributes": {}}, None, None, provider)) + backends.append(TestBackend(None, {"attributes": {}}, None, None, provider, None, None)) frontends = [] for receiver in FRONTEND_NAMES: - frontends.append(TestFrontend(None, {"attributes": {}}, None, None, receiver)) + frontends.append(TestFrontend(None, {"attributes": {}}, None, None, receiver, None, None)) request_micro_service_name = "RequestService" response_micro_service_name = "ResponseService" diff --git a/tests/util.py b/tests/util.py index c26c796fe..32dd4a6c1 100644 --- a/tests/util.py +++ b/tests/util.py @@ -458,8 +458,9 @@ def register_endpoints(self, backend_names): class TestBackend(BackendModule): __test__ = False - def __init__(self, auth_callback_func, internal_attributes, config, base_url, name): - super().__init__(auth_callback_func, internal_attributes, base_url, name) + def __init__(self, auth_callback_func, internal_attributes, config, base_url, name, session_storage, + logout_callback_func): + super().__init__(auth_callback_func, internal_attributes, base_url, name, session_storage, logout_callback_func) def register_endpoints(self): return [("^{}/response$".format(self.name), self.handle_response)] @@ -478,8 +479,9 @@ def handle_response(self, context): class TestFrontend(FrontendModule): __test__ = False - def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name): - super().__init__(auth_req_callback_func, internal_attributes, base_url, name) + def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, session_storage, + logout_callback): + super().__init__(auth_req_callback_func, internal_attributes, base_url, name, session_storage) def register_endpoints(self, backend_names): url_map = [("^{}/{}/request$".format(p, self.name), self.handle_request) for p in backend_names] From be36544d2781aab2958c63cba9667c57d7a9e8d0 Mon Sep 17 00:00:00 2001 From: Ali Haider Date: Wed, 22 Nov 2023 10:27:26 +0500 Subject: [PATCH 4/8] added docstrings --- src/satosa/backends/apple.py | 7 +++++++ src/satosa/backends/base.py | 8 ++++++++ src/satosa/backends/bitbucket.py | 8 ++++++++ src/satosa/backends/github.py | 8 ++++++++ src/satosa/backends/idpy_oidc.py | 15 +++++++++------ src/satosa/backends/linkedin.py | 8 ++++++++ src/satosa/backends/oauth.py | 7 +++++++ src/satosa/backends/openid_connect.py | 7 +++++++ src/satosa/backends/orcid.py | 8 ++++++++ src/satosa/backends/reflector.py | 7 +++++++ src/satosa/backends/saml2.py | 7 +++++++ src/satosa/base.py | 12 ++++++++++++ src/satosa/frontends/base.py | 2 ++ src/satosa/frontends/openid_connect.py | 10 ++++++++++ src/satosa/plugin_loader.py | 9 +++++++++ src/satosa/session_storage.py | 4 ++-- 16 files changed, 119 insertions(+), 8 deletions(-) diff --git a/src/satosa/backends/apple.py b/src/satosa/backends/apple.py index af61687fe..540370ac5 100644 --- a/src/satosa/backends/apple.py +++ b/src/satosa/backends/apple.py @@ -47,6 +47,10 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :param config: Configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin + :param session_storage: storage to hold the backend session information + :param logout_callback_func: Callback should be called by the module after the logout + in the backend is done. This may trigger log out flow for all the frontends associated + with the backend session :type auth_callback_func: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -54,6 +58,9 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :type config: dict[str, dict[str, str] | list[str]] :type base_url: str :type name: str + :type session_storage: satosa.session_storage.SessionStorage + :type logout_callback_func: str + (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ super().__init__(auth_callback_func, internal_attributes, base_url, name, session_storage, logout_callback_func) self.auth_callback_func = auth_callback_func diff --git a/src/satosa/backends/base.py b/src/satosa/backends/base.py index a9fcfffce..f188ce3c1 100644 --- a/src/satosa/backends/base.py +++ b/src/satosa/backends/base.py @@ -17,6 +17,10 @@ def __init__(self, auth_callback_func, internal_attributes, base_url, name, sess :type internal_attributes: dict[string, dict[str, str | list[str]]] :type base_url: str :type name: str + :type session_storage: satosa.session_storage.SessionStorage + :type logout_callback_func: str + (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response + :param auth_callback_func: Callback should be called by the module after the authorization in the backend is done. @@ -25,6 +29,10 @@ def __init__(self, auth_callback_func, internal_attributes, base_url, name, sess RP's expects namevice. :param base_url: base url of the service :param name: name of the plugin + :param session_storage: storage to hold the backend session information + :param logout_callback_func: Callback should be called by the module after the logout + in the backend is done. This may trigger log out flow for all the frontends associated + with the backend session """ self.auth_callback_func = auth_callback_func self.internal_attributes = internal_attributes diff --git a/src/satosa/backends/bitbucket.py b/src/satosa/backends/bitbucket.py index 1e17b4c49..51d1b8dfc 100644 --- a/src/satosa/backends/bitbucket.py +++ b/src/satosa/backends/bitbucket.py @@ -29,6 +29,11 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :param config: configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin + :param session_storage: storage to hold the backend session information + :param logout_callback_func: Callback should be called by the module after the logout + in the backend is done. This may trigger log out flow for all the frontends associated + with the backend session + :type outgoing: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -36,6 +41,9 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :type config: dict[str, dict[str, str] | list[str] | str] :type base_url: str :type name: str + :type session_storage: satosa.session_storage.SessionStorage + :type logout_callback_func: str + (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ config.setdefault('response_type', 'code') config['verify_accesstoken_state'] = False diff --git a/src/satosa/backends/github.py b/src/satosa/backends/github.py index 64d0e9490..cb4c23db9 100644 --- a/src/satosa/backends/github.py +++ b/src/satosa/backends/github.py @@ -32,6 +32,11 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :param config: configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin + :param session_storage: storage to hold the backend session information + :param logout_callback_func: Callback should be called by the module after the logout + in the backend is done. This may trigger log out flow for all the frontends associated + with the backend session + :type outgoing: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -39,6 +44,9 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :type config: dict[str, dict[str, str] | list[str] | str] :type base_url: str :type name: str + :type session_storage: satosa.session_storage.SessionStorage + :type logout_callback_func: str + (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ config.setdefault('response_type', 'code') config['verify_accesstoken_state'] = False diff --git a/src/satosa/backends/idpy_oidc.py b/src/satosa/backends/idpy_oidc.py index 81b449e67..3ed6cc7f1 100644 --- a/src/satosa/backends/idpy_oidc.py +++ b/src/satosa/backends/idpy_oidc.py @@ -39,6 +39,10 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :param config: Configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin + :param session_storage: storage to hold the backend session information + :param logout_callback_func: Callback should be called by the module after the logout + in the backend is done. This may trigger log out flow for all the frontends associated + with the backend session :type auth_callback_func: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -46,6 +50,9 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :type config: dict[str, dict[str, str] | list[str]] :type base_url: str :type name: str + :type session_storage: satosa.session_storage.SessionStorage + :type logout_callback_func: str + (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ super().__init__(auth_callback_func, internal_attributes, base_url, name, session_storage, logout_callback_func) self.client = StandAloneClient(config=config["client"], client_type="oidc") @@ -122,15 +129,13 @@ def response_endpoint(self, context, *args): internal_resp.backend_session_id = backend_session_id return self.auth_callback_func(context, internal_resp) - def front_channel_logout_endpoint(self, context, *args): + def front_channel_logout_endpoint(self, context): """ Handles the front channel logout request from the OP. :type context: satosa.context.Context - :type args: Any :rtype: satosa.response.Response :param context: SATOSA context - :param args: None :return: """ @@ -149,15 +154,13 @@ def front_channel_logout_endpoint(self, context, *args): else: return Response() - def back_channel_logout_endpoint(self, context, *args): + def back_channel_logout_endpoint(self, context): """ Handles the back channel logout request from the OP. :type context: satosa.context.Context - :type args: Any :rtype: satosa.response.Response :param context: SATOSA context - :param args: None :return: """ logger.info(lu.LOG_FMT.format(id=lu.get_session_id(context.state), diff --git a/src/satosa/backends/linkedin.py b/src/satosa/backends/linkedin.py index 21ce1f6dd..81c665144 100644 --- a/src/satosa/backends/linkedin.py +++ b/src/satosa/backends/linkedin.py @@ -33,6 +33,11 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :param config: configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin + :param session_storage: storage to hold the backend session information + :param logout_callback_func: Callback should be called by the module after the logout + in the backend is done. This may trigger log out flow for all the frontends associated + with the backend session + :type outgoing: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -40,6 +45,9 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :type config: dict[str, dict[str, str] | list[str] | str] :type base_url: str :type name: str + :type session_storage: satosa.session_storage.SessionStorage + :type logout_callback_func: str + (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ config.setdefault('response_type', 'code') config['verify_accesstoken_state'] = False diff --git a/src/satosa/backends/oauth.py b/src/satosa/backends/oauth.py index 201b7f715..9124f40e0 100644 --- a/src/satosa/backends/oauth.py +++ b/src/satosa/backends/oauth.py @@ -202,6 +202,10 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :param config: Configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin + :param session_storage: storage to hold the backend session information + :param logout_callback_func: Callback should be called by the module after the logout + in the backend is done. This may trigger log out flow for all the frontends associated + with the backend session :type outgoing: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -209,6 +213,9 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :type config: dict[str, dict[str, str] | list[str] | str] :type base_url: str :type name: str + :type session_storage: satosa.session_storage.SessionStorage + :type logout_callback_func: str + (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ config.setdefault("response_type", "code") config["verify_accesstoken_state"] = False diff --git a/src/satosa/backends/openid_connect.py b/src/satosa/backends/openid_connect.py index 42984bcc0..b3c7f09c0 100644 --- a/src/satosa/backends/openid_connect.py +++ b/src/satosa/backends/openid_connect.py @@ -48,6 +48,10 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :param config: Configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin + :param session_storage: storage to hold the backend session information + :param logout_callback_func: Callback should be called by the module after the logout + in the backend is done. This may trigger log out flow for all the frontends associated + with the backend session :type auth_callback_func: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -55,6 +59,9 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :type config: dict[str, dict[str, str] | list[str]] :type base_url: str :type name: str + :type session_storage: satosa.session_storage.SessionStorage + :type logout_callback_func: str + (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ super().__init__(auth_callback_func, internal_attributes, base_url, name, session_storage, logout_callback_func) self.auth_callback_func = auth_callback_func diff --git a/src/satosa/backends/orcid.py b/src/satosa/backends/orcid.py index 77589f943..109695723 100644 --- a/src/satosa/backends/orcid.py +++ b/src/satosa/backends/orcid.py @@ -31,6 +31,11 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :param config: configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin + :param session_storage: storage to hold the backend session information + :param logout_callback_func: Callback should be called by the module after the logout + in the backend is done. This may trigger log out flow for all the frontends associated + with the backend session + :type outgoing: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -38,6 +43,9 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :type config: dict[str, dict[str, str] | list[str] | str] :type base_url: str :type name: str + :type session_storage: satosa.session_storage.SessionStorage + :type logout_callback_func: str + (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ config.setdefault('response_type', 'code') config['verify_accesstoken_state'] = False diff --git a/src/satosa/backends/reflector.py b/src/satosa/backends/reflector.py index ce52514f4..e14137d01 100644 --- a/src/satosa/backends/reflector.py +++ b/src/satosa/backends/reflector.py @@ -25,6 +25,9 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :type config: dict[str, Any] :type base_url: str :type name: str + :type session_storage: satosa.session_storage.SessionStorage + :type logout_callback_func: str + (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response :param outgoing: Callback should be called by the module after the authorization in the backend is done. @@ -32,6 +35,10 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :param config: The module config :param base_url: base url of the service :param name: name of the plugin + :param session_storage: storage to hold the backend session information + :param logout_callback_func: Callback should be called by the module after the logout + in the backend is done. This may trigger log out flow for all the frontends associated + with the backend session """ super().__init__(outgoing, internal_attributes, base_url, name, session_storage, logout_callback_func) diff --git a/src/satosa/backends/saml2.py b/src/satosa/backends/saml2.py index 3b7fdc6f1..b2e9203eb 100644 --- a/src/satosa/backends/saml2.py +++ b/src/satosa/backends/saml2.py @@ -100,6 +100,9 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :type config: dict[str, Any] :type base_url: str :type name: str + :type session_storage: satosa.session_storage.SessionStorage + :type logout_callback_func: str + (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response :param outgoing: Callback should be called by the module after the authorization in the backend is done. @@ -107,6 +110,10 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :param config: The module config :param base_url: base url of the service :param name: name of the plugin + :param session_storage: storage to hold the backend session information + :param logout_callback_func: Callback should be called by the module after the logout + in the backend is done. This may trigger log out flow for all the frontends associated + with the backend session """ super().__init__(outgoing, internal_attributes, base_url, name, session_storage, logout_callback_func) self.config = self.init_config(config) diff --git a/src/satosa/base.py b/src/satosa/base.py index 64aed948b..c382615f2 100644 --- a/src/satosa/base.py +++ b/src/satosa/base.py @@ -176,6 +176,18 @@ def _auth_resp_callback_func(self, context, internal_response): return self._auth_resp_finish(context, internal_response) def _backend_logout_callback_func(self, context, internal_request): + """ + This function is called by a backend module when the logout request is received by the backend. + + :type context: satosa.context.Context + :type internal_request: satosa.internal.InternalData + :rtype: satosa.response.Response + + :param context: The request context + :param internal_request: The logout request + :return: response + """ + frontend_sessions = self.session_storage.get_frontend_sessions_by_backend_session_id( internal_request.backend_session_id) diff --git a/src/satosa/frontends/base.py b/src/satosa/frontends/base.py index aa39ad41e..f8aecc04a 100644 --- a/src/satosa/frontends/base.py +++ b/src/satosa/frontends/base.py @@ -15,10 +15,12 @@ def __init__(self, auth_req_callback_func, internal_attributes, base_url, name, (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response :type internal_attributes: dict[str, dict[str, str | list[str]]] :type name: str + :type session_storage: satosa.session_storage.SessionStorage :param auth_req_callback_func: Callback should be called by the module after the authorization response has been processed. :param name: name of the plugin + :param session_storage: storage to hold the backend session information """ self.auth_req_callback_func = auth_req_callback_func self.internal_attributes = internal_attributes diff --git a/src/satosa/frontends/openid_connect.py b/src/satosa/frontends/openid_connect.py index dfc5b03d5..be4650ddc 100644 --- a/src/satosa/frontends/openid_connect.py +++ b/src/satosa/frontends/openid_connect.py @@ -408,6 +408,16 @@ def userinfo_endpoint(self, context): return response def start_logout_from_backend(self, context, internal_request): + """ + Performs the back-channel logout for the RP + :param context: the current context + :param internal_request: internalData containing the frontend sid + :return: whether the back-channel logout was successful or not + + :type context: satosa.context.Context + :type internal_request: satosa.internal.InternalData + :rtype bool + """ logout_status = True session = self.session_storage.get_frontend_session(internal_request.frontend_sid) client = self.cdb[session.get("requester")] diff --git a/src/satosa/plugin_loader.py b/src/satosa/plugin_loader.py index 9357c13d7..397edebf1 100644 --- a/src/satosa/plugin_loader.py +++ b/src/satosa/plugin_loader.py @@ -285,6 +285,15 @@ def load_response_microservices(plugin_path, plugins, internal_attributes, base_ def load_session_storage(config): + """ + Loads the session storage based on the provided config + + :type config: satosa.satosa_config.SATOSAConfig + :rtype: session_storage.SessionStorage + + :param config: The configuration of the satosa proxy + :return: Session Storage which could either be in-memory, PostgreSQL, or any other defined storage + """ session_storage = config.get("SESSION_STORAGE") if session_storage: try: diff --git a/src/satosa/session_storage.py b/src/satosa/session_storage.py index ada546a6a..032b9f1c7 100644 --- a/src/satosa/session_storage.py +++ b/src/satosa/session_storage.py @@ -12,7 +12,7 @@ def __init__(self, config): class SessionStorageInMemory(SessionStorage): """ - In-memory storage + In-memory session storage """ def __init__(self, config): @@ -107,7 +107,7 @@ class SessionMap(Base): class SessionStoragePostgreSQL(SessionStorage): """ - PostgreSQL storage + PostgreSQL session storage """ def __init__(self, config): From 3326277dc9e2312de32c1124f98fe381ddb17931 Mon Sep 17 00:00:00 2001 From: Ali Haider Date: Tue, 12 Dec 2023 06:09:21 +0500 Subject: [PATCH 5/8] some more unit tests added --- src/satosa/base.py | 2 +- src/satosa/session_storage.py | 9 +- tests/flows/test_oidc-idpy_oidc.py | 234 +++++++++++++++++++++++++++ tests/satosa/test_plugin_loader.py | 41 ++++- tests/satosa/test_session_storage.py | 139 ++++++++++++++++ 5 files changed, 420 insertions(+), 5 deletions(-) create mode 100644 tests/flows/test_oidc-idpy_oidc.py create mode 100644 tests/satosa/test_session_storage.py diff --git a/src/satosa/base.py b/src/satosa/base.py index c382615f2..109ded741 100644 --- a/src/satosa/base.py +++ b/src/satosa/base.py @@ -209,7 +209,7 @@ def _backend_logout_callback_func(self, context, internal_request): logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg) logger.info(logline) - return Response() + return Response(message="") def _backend_logout_req_finish(self, context, internal_request): frontend_sessions = self.session_storage.get_frontend_sessions_by_backend_session_id( diff --git a/src/satosa/session_storage.py b/src/satosa/session_storage.py index 032b9f1c7..4034a442e 100644 --- a/src/satosa/session_storage.py +++ b/src/satosa/session_storage.py @@ -47,8 +47,11 @@ def store_backend_session(self, sid, issuer): def get_backend_session(self, sid, issuer=None): for session in self.backend_sessions: - if issuer and session.get("sid") == sid and session.get("issuer") == issuer: - return session + if issuer: + if session.get("sid") == sid and session.get("issuer") == issuer: + return session + else: + continue elif session.get("sid") == sid: return session @@ -71,7 +74,7 @@ def get_frontend_sessions_by_backend_session_id(self, backend_session_id): for session in self.frontend_sessions: if session.get("sid") == frontend_sid: sessions.append(session) - break + break return sessions def delete_session_map(self, frontend_sid): diff --git a/tests/flows/test_oidc-idpy_oidc.py b/tests/flows/test_oidc-idpy_oidc.py new file mode 100644 index 000000000..aabf52d91 --- /dev/null +++ b/tests/flows/test_oidc-idpy_oidc.py @@ -0,0 +1,234 @@ +from copy import copy +import json +import time +from urllib.parse import urlparse, urlencode, parse_qsl +from unittest import mock +import mongomock +import pytest +from cryptojwt.key_jar import build_keyjar +from idpyoidc.message.oidc import IdToken, ClaimsRequest, Claims +from idpyoidc.client.defaults import DEFAULT_KEY_DEFS +from requests.models import Response +from pyop.storage import StorageBase +from werkzeug.test import Client +from satosa.response import Response as satosaResp +from satosa.proxy_server import make_app +from satosa.satosa_config import SATOSAConfig +from tests.users import USERS, OIDC_USERS + + +CLIENT_ID = "client1" +CLIENT_SECRET = "secret" +CLIENT_REDIRECT_URI = "https://client.example.com/cb" +REDIRECT_URI = "https://client.example.com/cb" +DB_URI = "mongodb://localhost/satosa" +ISSUER = "https://provider.example.com" +CLIENT_BASE_URL = "https://client.test.com" +NONCE = "the nonce" + + +@pytest.fixture +def oidc_frontend_config(signing_key_path): + data = { + "module": "satosa.frontends.openid_connect.OpenIDConnectFrontend", + "name": "OIDCFrontend", + "config": { + "issuer": "https://proxy-op.example.com", + "signing_key_path": signing_key_path, + "provider": { + "response_types_supported": ["id_token"], + "claims_supported": ["email"], + }, + "client_db_uri": DB_URI, # use mongodb for integration testing + "db_uri": DB_URI, # use mongodb for integration testing + }, + } + + return data + + +@pytest.fixture +def idpy_oidc_backend_config(): + data = { + "module": "satosa.backends.idpy_oidc.IdpyOIDCBackend", + "name": "OIDCBackend", + "config": { + "client": { + "redirect_uris": ["http://example.com/OIDCBackend"], + "base_url": CLIENT_BASE_URL, + "client_id": CLIENT_ID, + "client_type": "oidc", + "client_secret": "ZJYCqe3GGRvdrudKyZS0XhGv_Z45DuKhCUk0gBR1vZk", + "application_type": "web", + "application_name": "SATOSA Test", + "contacts": ["ops@example.com"], + "response_types_supported": ["code"], + "front_channel_logout_uri": "https://test-proxy.com/OIDCBackend/front-channel-logout", + "scopes_supported": ["openid", "profile", "email"], + "subject_type_supported": ["public"], + "key_conf": {"key_defs": DEFAULT_KEY_DEFS}, + "jwks_uri": f"{CLIENT_BASE_URL}/jwks.json", + "provider_info": { + "issuer": ISSUER, + "authorization_endpoint": f"{ISSUER}/authn", + "token_endpoint": f"{ISSUER}/token", + "userinfo_endpoint": f"{ISSUER}/user", + "jwks_uri": f"{ISSUER}/static/jwks", + "frontchannel_logout_session_required": True, + }, + } + }, + } + return data + + +@mongomock.patch(servers=(("localhost", 27017),)) +class TestOIDCToIdpyOIDC: + def _client_setup(self): + """Insert client in mongodb.""" + self._cdb = StorageBase.from_uri( + DB_URI, db_name="satosa", collection="clients", ttl=None + ) + self._cdb[CLIENT_ID] = { + "redirect_uris": [REDIRECT_URI], + "response_types": ["id_token"], + } + + @mock.patch("requests.post") + @mock.patch("idpyoidc.client.oauth2.stand_alone_client.StandAloneClient.finalize") + def test_full_flow_front_channel_logout_inmemory_session_storage( + self, + mock_stand_alone_client_finalize, + mock_logout_post_request, + satosa_config_dict, + oidc_frontend_config, + idpy_oidc_backend_config, + ): + self._client_setup() + subject_id = "testuser1" + + # proxy config + satosa_config_dict["FRONTEND_MODULES"] = [oidc_frontend_config] + satosa_config_dict["BACKEND_MODULES"] = [idpy_oidc_backend_config] + satosa_config_dict["INTERNAL_ATTRIBUTES"]["attributes"] = { + attr_name: {"openid": [attr_name]} for attr_name in USERS[subject_id] + } + + # application + test_client = Client(make_app(SATOSAConfig(satosa_config_dict)), satosaResp) + + # get frontend OP config info + provider_config = json.loads( + test_client.get("/.well-known/openid-configuration").data.decode("utf-8") + ) + + # create auth req + claims_request = ClaimsRequest( + id_token=Claims(**{k: None for k in USERS[subject_id]}) + ) + req_args = { + "scope": "openid", + "response_type": "id_token", + "client_id": CLIENT_ID, + "redirect_uri": REDIRECT_URI, + "nonce": "nonce", + "claims": claims_request.to_json(), + } + auth_req = ( + urlparse(provider_config["authorization_endpoint"]).path + + "?" + + urlencode(req_args) + ) + + # make auth req to proxy + proxied_auth_req = test_client.get(auth_req) + assert proxied_auth_req.status == "302 Found" + parsed_auth_req = dict( + parse_qsl(urlparse(proxied_auth_req.data.decode("utf-8")).query) + ) + + # create auth resp + self.issuer_keys = build_keyjar(DEFAULT_KEY_DEFS) + signing_key = self.issuer_keys.get_signing_key(key_type="RSA")[0] + signing_key.alg = "RS256" + + id_token_claims = {k: v for k, v in OIDC_USERS[subject_id].items()} + id_token_claims["sub"] = subject_id + id_token_claims["iat"] = time.time() + id_token_claims["exp"] = time.time() + 3600 + id_token_claims["iss"] = ISSUER + id_token_claims["aud"] = idpy_oidc_backend_config["config"]["client"][ + "client_id" + ] + id_token_claims["nonce"] = parsed_auth_req["nonce"] + id_token = IdToken(**id_token_claims).to_jwt( + [signing_key], algorithm=signing_key.alg + ) + authn_resp = {"state": parsed_auth_req["state"], "id_token": id_token} + + # mock finalize method of idpy oidc due to signing key issue and add sid manually + id_token_claims["sid"] = "30f8dae4-1da5-41bf-a801-5aad0648af8c" + mock_stand_alone_client_finalize.return_value = { + "userinfo": USERS[subject_id], + "id_token": id_token_claims, + "issuer": ISSUER, + } + + # make auth resp to proxy + redirect_uri_path = urlparse( + idpy_oidc_backend_config["config"]["client"]["redirect_uris"][0] + ).path + authn_resp_req = redirect_uri_path + "?" + urlencode(authn_resp) + authn_resp = test_client.get(authn_resp_req) + assert authn_resp.status == "303 See Other" + + # mock response from logout url of RP + resp = Response() + resp.status_code = 200 + mock_logout_post_request.return_value = resp + + # get session storage values before calling logout to verify successful logout later + ( + backend_session_before_logout, + frontend_session_before_logout, + session_maps_before_logout, + ) = get_session_storage_components_using_sid( + test_client.application.app.app.session_storage, + "30f8dae4-1da5-41bf-a801-5aad0648af8c", + ) + + # call front channel logout + req_args = {"sid": "30f8dae4-1da5-41bf-a801-5aad0648af8c"} + front_channel_logout_req = ( + urlparse( + idpy_oidc_backend_config["config"]["client"]["front_channel_logout_uri"] + ).path + + "?" + + urlencode(req_args) + ) + logout_resp = test_client.get(front_channel_logout_req) + assert logout_resp.status == "200 OK" + + # verify logout successful + ( + backend_session_after_logout, + frontend_session_after_logout, + session_maps_after_logout, + ) = get_session_storage_components_using_sid( + test_client.application.app.app.session_storage, + "30f8dae4-1da5-41bf-a801-5aad0648af8c", + ) + assert backend_session_before_logout != backend_session_after_logout + assert frontend_session_before_logout != frontend_session_after_logout + assert session_maps_before_logout != session_maps_after_logout + + +def get_session_storage_components_using_sid(session_storage, sid): + backend_session = session_storage.get_backend_session(sid) + session_maps = copy(session_storage.session_maps) + frontend_session = "" + for session_map in session_maps: + frontend_session = session_storage.get_backend_session( + session_map.get("frontend_sid") + ) + return backend_session, frontend_session, session_maps diff --git a/tests/satosa/test_plugin_loader.py b/tests/satosa/test_plugin_loader.py index ef11c961b..727c27af5 100644 --- a/tests/satosa/test_plugin_loader.py +++ b/tests/satosa/test_plugin_loader.py @@ -1,4 +1,5 @@ import json +from unittest.mock import patch import pytest import yaml @@ -7,7 +8,15 @@ from satosa.exception import SATOSAConfigurationError from satosa.frontends.base import FrontendModule from satosa.micro_services.base import RequestMicroService, ResponseMicroService -from satosa.plugin_loader import backend_filter, frontend_filter, _request_micro_service_filter, _response_micro_service_filter, _load_plugin_config +from satosa.plugin_loader import ( + backend_filter, + frontend_filter, + _request_micro_service_filter, + _response_micro_service_filter, + _load_plugin_config, + load_session_storage, +) +from satosa.session_storage import SessionStoragePostgreSQL, SessionStorageInMemory class TestFilters(object): @@ -75,3 +84,33 @@ def test_handles_malformed_data(self): data = """{foo: bar""" # missing closing bracket with pytest.raises(SATOSAConfigurationError): _load_plugin_config(data) + + +class TestLoadSessionStorage(object): + def session_storage_postgresql_init_mock(self, config): + pass + + @patch.object( + SessionStoragePostgreSQL, "__init__", session_storage_postgresql_init_mock + ) + def test_load_postgresql_session(self): + config = { + "SESSION_STORAGE": { + "type": "postgresql", + "host": "127.0.0.1", + "port": 5432, + "db_name": "satosa", + "user": "postgres", + "password": "secret", + } + } + postgresql_session_storage = load_session_storage(config) + assert isinstance(postgresql_session_storage, SessionStoragePostgreSQL) + + def test_load_inmemory_session(self): + config = {} + inmemory_session_storage = load_session_storage(config) + assert isinstance(inmemory_session_storage, SessionStorageInMemory) + assert hasattr(inmemory_session_storage, "frontend_sessions") + assert hasattr(inmemory_session_storage, "backend_sessions") + assert hasattr(inmemory_session_storage, "session_maps") diff --git a/tests/satosa/test_session_storage.py b/tests/satosa/test_session_storage.py new file mode 100644 index 000000000..dcca7ab19 --- /dev/null +++ b/tests/satosa/test_session_storage.py @@ -0,0 +1,139 @@ +from unittest import TestCase +from unittest.mock import patch + +from satosa.plugin_loader import load_session_storage +from satosa.session_storage import FrontendSession + + +class TestInMemorySessionStorage(TestCase): + def test_inmemory_store_frontend_session(self): + config = {} + session_storage = load_session_storage(config) + session_storage.store_frontend_session( + "OIDC", "requester-Azure", "sub-id", "sid-1FE" + ) + assert session_storage.frontend_sessions + + def test_inmemory_get_frontend_session(self): + config = {} + session_storage = load_session_storage(config) + assert not session_storage.get_frontend_session("sid-1FE") + session_storage.store_frontend_session( + "OIDC", "requester-Azure", "sub-id", "sid-1FE" + ) + assert session_storage.get_frontend_session("sid-1FE") + + def test_inmemory_delete_frontend_session(self): + config = {} + session_storage = load_session_storage(config) + session_storage.store_frontend_session( + "OIDC", "requester-Azure", "sub-id", "sid-1FE" + ) + session_storage.delete_frontend_session("sid-1FE") + assert not session_storage.get_frontend_session("sid-1FE") + + def test_inmemory_store_backend_session(self): + config = {} + session_storage = load_session_storage(config) + session_storage.store_backend_session("sid-1BE", "OIDC") + assert session_storage.backend_sessions + + def test_inmemory_get_backend_session(self): + config = {} + session_storage = load_session_storage(config) + session_storage.store_backend_session("sid-1BE", "OIDC") + backend_session = session_storage.get_backend_session("sid-1BE", "OIDC") + assert backend_session + + def test_inmemory_get_unique_backend_session_from_multiple_same_sid_backends(self): + config = {} + session_storage = load_session_storage(config) + session_storage.store_backend_session("sid-1BE", "OIDC") + session_storage.store_backend_session("sid-1BE", "OIDC2") + backend_session = session_storage.get_backend_session("sid-1BE", "OIDC2") + assert backend_session.get("issuer") == "OIDC2" + + def test_inmemory_get_backend_session_doesnot_exist(self): + config = {} + session_storage = load_session_storage(config) + backend_session = session_storage.get_backend_session("sid-1BE", "OIDC2") + assert not backend_session + + def test_inmemory_delete_backend_session(self): + config = {} + session_storage = load_session_storage(config) + session_storage.store_backend_session("sid-1BE", "OIDC") + session_storage.delete_backend_session( + session_storage.get_backend_session("sid-1BE")["id"] + ) + backend_session = session_storage.get_backend_session("sid-1BE") + assert not backend_session + + def test_inmemory_store_session_map(self): + config = {} + session_storage = load_session_storage(config) + session_storage.store_session_map("sid-1FE", "sid-1BE") + assert session_storage.session_maps + + def test_inmemory_delete_session_map(self): + config = {} + session_storage = load_session_storage(config) + session_storage.store_session_map("sid-1FE", "sid-1BE") + session_storage.delete_session_map("sid-1FE") + assert not session_storage.session_maps + + def test_inmemory_get_frontend_sessions_by_backend_session_id(self): + config = {} + session_storage = load_session_storage(config) + assert not session_storage.get_frontend_sessions_by_backend_session_id( + "sid-1BE" + ) + session_storage.store_frontend_session( + "OIDC", "requester-Azure", "sub-id", "sid-1FE" + ) + session_storage.store_frontend_session( + "OIDC", "requester-Azure", "sub-id", "sid-2FE" + ) + session_storage.store_session_map("sid-1FE", "sid-1BE") + session_storage.store_session_map("sid-2FE", "sid-1BE") + backend_sessions = session_storage.get_frontend_sessions_by_backend_session_id( + "sid-1BE" + ) + assert len(backend_sessions) == 2 + + +class TestPostgreSQLSessionStorage(TestCase): + @patch("sqlalchemy.orm.session.Session.query") + @patch("sqlalchemy.orm.session.Session.commit") + @patch("satosa.session_storage.Base") + def test_postgresql_store_frontend_session( + self, mock_base, mock_session_commit, mock_frontend_session_query + ): + config = { + "SESSION_STORAGE": { + "type": "postgresql", + "host": "127.0.0.1", + "port": 5432, + "db_name": "satosa", + "user": "postgres", + "password": "secret", + } + } + mock_base.return_value.metadata.return_value.create_all.return_value = None + mock_session_commit.return_value = None + session_storage = load_session_storage(config) + session_storage.store_frontend_session( + "OIDC", "requester-Azure", "sub-id", "sid-1FE" + ) + + frontend_session_mock = FrontendSession() + frontend_session_mock.sid = "sid" + frontend_session_mock.frontend_name = "frontend_name" + frontend_session_mock.requester = "requester" + frontend_session_mock.subject_id = "subject_id" + mock_frontend_session_query.return_value.filter.return_value.first.return_value = ( + frontend_session_mock + ) + + frontend_session = session_storage.get_frontend_session("sid-1FE") + assert frontend_session From c54962076867c60d07acf03c1641b18721f37189 Mon Sep 17 00:00:00 2001 From: Ali Haider Date: Wed, 31 Jan 2024 12:09:33 +0500 Subject: [PATCH 6/8] incorporated review comments --- setup.py | 3 +- src/satosa/backends/apple.py | 8 +- src/satosa/backends/base.py | 8 +- src/satosa/backends/bitbucket.py | 8 +- src/satosa/backends/github.py | 8 +- src/satosa/backends/idpy_oidc.py | 14 +- src/satosa/backends/linkedin.py | 8 +- src/satosa/backends/oauth.py | 12 +- src/satosa/backends/openid_connect.py | 8 +- src/satosa/backends/orcid.py | 8 +- src/satosa/backends/reflector.py | 8 +- src/satosa/backends/saml2.py | 8 +- src/satosa/base.py | 18 +-- src/satosa/frontends/base.py | 8 +- src/satosa/frontends/openid_connect.py | 12 +- src/satosa/frontends/ping.py | 4 +- src/satosa/frontends/saml2.py | 8 +- src/satosa/plugin_loader.py | 58 ++++---- src/satosa/{session_storage.py => storage.py} | 21 ++- tests/conftest.py | 10 +- tests/flows/test_oidc-idpy_oidc.py | 14 +- tests/satosa/backends/test_idpy_oidc.py | 18 +-- tests/satosa/frontends/test_openid_connect.py | 20 +-- tests/satosa/test_plugin_loader.py | 28 ++-- tests/satosa/test_session_storage.py | 139 ------------------ tests/satosa/test_storage.py | 139 ++++++++++++++++++ tests/util.py | 8 +- 27 files changed, 309 insertions(+), 297 deletions(-) rename src/satosa/{session_storage.py => storage.py} (95%) delete mode 100644 tests/satosa/test_session_storage.py create mode 100644 tests/satosa/test_storage.py diff --git a/setup.py b/setup.py index ea247c5e1..408cdb53d 100644 --- a/setup.py +++ b/setup.py @@ -26,13 +26,14 @@ "chevron", "cookies-samesite-compat", "importlib-metadata >= 1.7.0; python_version <= '3.8'", - "psycopg2-binary", ], extras_require={ "ldap": ["ldap3"], "pyop_mongo": ["pyop[mongo]"], "pyop_redis": ["pyop[redis]"], "idpy_oidc_backend": ["idpyoidc >= 2.1.0"], + "storage_postgresql": ["psycopg2-binary"], + "logout_enabled": ["SQLAlchemy"], }, zip_safe=False, classifiers=[ diff --git a/src/satosa/backends/apple.py b/src/satosa/backends/apple.py index 540370ac5..906760c74 100644 --- a/src/satosa/backends/apple.py +++ b/src/satosa/backends/apple.py @@ -35,7 +35,7 @@ class AppleBackend(BackendModule): """Sign in with Apple backend""" - def __init__(self, auth_callback_func, internal_attributes, config, base_url, name, session_storage, + def __init__(self, auth_callback_func, internal_attributes, config, base_url, name, storage, logout_callback_func): """ Sign in with Apple backend module. @@ -47,7 +47,7 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :param config: Configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin - :param session_storage: storage to hold the backend session information + :param storage: storage to hold the backend session information :param logout_callback_func: Callback should be called by the module after the logout in the backend is done. This may trigger log out flow for all the frontends associated with the backend session @@ -58,11 +58,11 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :type config: dict[str, dict[str, str] | list[str]] :type base_url: str :type name: str - :type session_storage: satosa.session_storage.SessionStorage + :type storage: satosa.storage.Storage :type logout_callback_func: str (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ - super().__init__(auth_callback_func, internal_attributes, base_url, name, session_storage, logout_callback_func) + super().__init__(auth_callback_func, internal_attributes, base_url, name, storage, logout_callback_func) self.auth_callback_func = auth_callback_func self.config = config self.client = _create_client( diff --git a/src/satosa/backends/base.py b/src/satosa/backends/base.py index f188ce3c1..a57e14040 100644 --- a/src/satosa/backends/base.py +++ b/src/satosa/backends/base.py @@ -10,14 +10,14 @@ class BackendModule(object): Base class for a backend module. """ - def __init__(self, auth_callback_func, internal_attributes, base_url, name, session_storage, logout_callback_func): + def __init__(self, auth_callback_func, internal_attributes, base_url, name, storage, logout_callback_func): """ :type auth_callback_func: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response :type internal_attributes: dict[string, dict[str, str | list[str]]] :type base_url: str :type name: str - :type session_storage: satosa.session_storage.SessionStorage + :type storage: satosa.storage.Storage :type logout_callback_func: str (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -29,7 +29,7 @@ def __init__(self, auth_callback_func, internal_attributes, base_url, name, sess RP's expects namevice. :param base_url: base url of the service :param name: name of the plugin - :param session_storage: storage to hold the backend session information + :param storage: storage to hold the backend session information :param logout_callback_func: Callback should be called by the module after the logout in the backend is done. This may trigger log out flow for all the frontends associated with the backend session @@ -39,7 +39,7 @@ def __init__(self, auth_callback_func, internal_attributes, base_url, name, sess self.converter = AttributeMapper(internal_attributes) self.base_url = base_url self.name = name - self.session_storage = session_storage + self.storage = storage self.logout_callback_func = logout_callback_func def start_auth(self, context, internal_request): diff --git a/src/satosa/backends/bitbucket.py b/src/satosa/backends/bitbucket.py index 51d1b8dfc..62e98f96e 100644 --- a/src/satosa/backends/bitbucket.py +++ b/src/satosa/backends/bitbucket.py @@ -19,7 +19,7 @@ class BitBucketBackend(_OAuthBackend): logprefix = "BitBucket Backend:" - def __init__(self, outgoing, internal_attributes, config, base_url, name, session_storage, logout_callback_func): + def __init__(self, outgoing, internal_attributes, config, base_url, name, storage, logout_callback_func): """BitBucket backend constructor :param outgoing: Callback should be called by the module after the authorization in the backend is done. @@ -29,7 +29,7 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :param config: configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin - :param session_storage: storage to hold the backend session information + :param storage: storage to hold the backend session information :param logout_callback_func: Callback should be called by the module after the logout in the backend is done. This may trigger log out flow for all the frontends associated with the backend session @@ -41,14 +41,14 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :type config: dict[str, dict[str, str] | list[str] | str] :type base_url: str :type name: str - :type session_storage: satosa.session_storage.SessionStorage + :type storage: satosa.storage.Storage :type logout_callback_func: str (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ config.setdefault('response_type', 'code') config['verify_accesstoken_state'] = False super().__init__(outgoing, internal_attributes, config, base_url, name, 'bitbucket', 'account_id', - session_storage, logout_callback_func) + storage, logout_callback_func) def get_request_args(self, get_state=stateID): request_args = super().get_request_args(get_state=get_state) diff --git a/src/satosa/backends/github.py b/src/satosa/backends/github.py index cb4c23db9..e33491679 100644 --- a/src/satosa/backends/github.py +++ b/src/satosa/backends/github.py @@ -21,7 +21,7 @@ class GitHubBackend(_OAuthBackend): """GitHub OAuth 2.0 backend""" - def __init__(self, outgoing, internal_attributes, config, base_url, name, session_storage, + def __init__(self, outgoing, internal_attributes, config, base_url, name, storage, logout_callback_func): """GitHub backend constructor :param outgoing: Callback should be called by the module after the @@ -32,7 +32,7 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :param config: configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin - :param session_storage: storage to hold the backend session information + :param storage: storage to hold the backend session information :param logout_callback_func: Callback should be called by the module after the logout in the backend is done. This may trigger log out flow for all the frontends associated with the backend session @@ -44,14 +44,14 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :type config: dict[str, dict[str, str] | list[str] | str] :type base_url: str :type name: str - :type session_storage: satosa.session_storage.SessionStorage + :type storage: satosa.storage.Storage :type logout_callback_func: str (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ config.setdefault('response_type', 'code') config['verify_accesstoken_state'] = False super().__init__(outgoing, internal_attributes, config, base_url, name, 'github', 'id', - session_storage, logout_callback_func) + storage, logout_callback_func) def start_auth(self, context, internal_request, get_state=stateID): """ diff --git a/src/satosa/backends/idpy_oidc.py b/src/satosa/backends/idpy_oidc.py index 3ed6cc7f1..5b92e8fa9 100644 --- a/src/satosa/backends/idpy_oidc.py +++ b/src/satosa/backends/idpy_oidc.py @@ -27,7 +27,7 @@ class IdpyOIDCBackend(BackendModule): Backend module for OIDC and OAuth 2.0, can be directly used. """ - def __init__(self, auth_callback_func, internal_attributes, config, base_url, name, session_storage, + def __init__(self, auth_callback_func, internal_attributes, config, base_url, name, storage, logout_callback_func): """ OIDC backend module. @@ -39,7 +39,7 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :param config: Configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin - :param session_storage: storage to hold the backend session information + :param storage: storage to hold the backend session information :param logout_callback_func: Callback should be called by the module after the logout in the backend is done. This may trigger log out flow for all the frontends associated with the backend session @@ -50,11 +50,11 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :type config: dict[str, dict[str, str] | list[str]] :type base_url: str :type name: str - :type session_storage: satosa.session_storage.SessionStorage + :type storage: satosa.storage.Storage :type logout_callback_func: str (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ - super().__init__(auth_callback_func, internal_attributes, base_url, name, session_storage, logout_callback_func) + super().__init__(auth_callback_func, internal_attributes, base_url, name, storage, logout_callback_func) self.client = StandAloneClient(config=config["client"], client_type="oidc") self.client.do_provider_info() self.client.do_client_registration() @@ -125,7 +125,7 @@ def response_endpoint(self, context, *args): internal_resp = self._translate_response(all_user_claims, _info["issuer"]) sid = all_user_claims.get("sid") if sid: - backend_session_id = self.session_storage.store_backend_session(sid, _info["issuer"]) + backend_session_id = self.storage.store_backend_session(sid, _info["issuer"]) internal_resp.backend_session_id = backend_session_id return self.auth_callback_func(context, internal_resp) @@ -143,7 +143,7 @@ def front_channel_logout_endpoint(self, context): message="Received front-channel logout request: {}".format(context.request))) sid = context.request.get("sid") issuer = context.request.get("iss") - backend_session = self.session_storage.get_backend_session(sid, issuer) + backend_session = self.storage.get_backend_session(sid, issuer) if backend_session: internal_req = InternalData( @@ -178,7 +178,7 @@ def back_channel_logout_endpoint(self, context): logout_token = LogoutToken().from_jwt(context.request["logout_token"], None) sid = logout_token.get("sid") issuer = logout_token.get("iss") - backend_session = self.session_storage.get_backend_session(sid, issuer) + backend_session = self.storage.get_backend_session(sid, issuer) if backend_session: internal_req = InternalData( diff --git a/src/satosa/backends/linkedin.py b/src/satosa/backends/linkedin.py index 81c665144..e6e45546b 100644 --- a/src/satosa/backends/linkedin.py +++ b/src/satosa/backends/linkedin.py @@ -22,7 +22,7 @@ class LinkedInBackend(_OAuthBackend): """LinkedIn OAuth 2.0 backend""" - def __init__(self, outgoing, internal_attributes, config, base_url, name, session_storage, + def __init__(self, outgoing, internal_attributes, config, base_url, name, storage, logout_callback_func): """LinkedIn backend constructor :param outgoing: Callback should be called by the module after the @@ -33,7 +33,7 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :param config: configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin - :param session_storage: storage to hold the backend session information + :param storage: storage to hold the backend session information :param logout_callback_func: Callback should be called by the module after the logout in the backend is done. This may trigger log out flow for all the frontends associated with the backend session @@ -45,14 +45,14 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :type config: dict[str, dict[str, str] | list[str] | str] :type base_url: str :type name: str - :type session_storage: satosa.session_storage.SessionStorage + :type storage: satosa.storage.Storage :type logout_callback_func: str (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ config.setdefault('response_type', 'code') config['verify_accesstoken_state'] = False super().__init__(outgoing, internal_attributes, config, base_url, name, 'linkedin', 'id', - session_storage, logout_callback_func) + storage, logout_callback_func) def start_auth(self, context, internal_request, get_state=stateID): """ diff --git a/src/satosa/backends/oauth.py b/src/satosa/backends/oauth.py index 9124f40e0..a13bfa89e 100644 --- a/src/satosa/backends/oauth.py +++ b/src/satosa/backends/oauth.py @@ -33,7 +33,7 @@ class _OAuthBackend(BackendModule): """ def __init__(self, outgoing, internal_attributes, config, base_url, name, external_type, user_id_attr, - session_storage, logout_callback_func): + storage, logout_callback_func): """ :param outgoing: Callback should be called by the module after the authorization in the backend is done. @@ -53,7 +53,7 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, extern :type name: str :type external_type: str """ - super().__init__(outgoing, internal_attributes, base_url, name, session_storage, logout_callback_func) + super().__init__(outgoing, internal_attributes, base_url, name, storage, logout_callback_func) self.config = config self.redirect_url = "%s/%s" % (self.config["base_url"], self.config["authz_page"]) self.external_type = external_type @@ -190,7 +190,7 @@ class FacebookBackend(_OAuthBackend): """ DEFAULT_GRAPH_ENDPOINT = "https://graph.facebook.com/v2.5/me" - def __init__(self, outgoing, internal_attributes, config, base_url, name, session_storage, + def __init__(self, outgoing, internal_attributes, config, base_url, name, storage, logout_callback_func): """ Constructor. @@ -202,7 +202,7 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :param config: Configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin - :param session_storage: storage to hold the backend session information + :param storage: storage to hold the backend session information :param logout_callback_func: Callback should be called by the module after the logout in the backend is done. This may trigger log out flow for all the frontends associated with the backend session @@ -213,13 +213,13 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :type config: dict[str, dict[str, str] | list[str] | str] :type base_url: str :type name: str - :type session_storage: satosa.session_storage.SessionStorage + :type storage: satosa.storage.Storage :type logout_callback_func: str (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ config.setdefault("response_type", "code") config["verify_accesstoken_state"] = False - super().__init__(outgoing, internal_attributes, config, base_url, name, "facebook", "id", session_storage, + super().__init__(outgoing, internal_attributes, config, base_url, name, "facebook", "id", storage, logout_callback_func) def get_request_args(self, get_state=stateID): diff --git a/src/satosa/backends/openid_connect.py b/src/satosa/backends/openid_connect.py index b3c7f09c0..1e2cc57d2 100644 --- a/src/satosa/backends/openid_connect.py +++ b/src/satosa/backends/openid_connect.py @@ -36,7 +36,7 @@ class OpenIDConnectBackend(BackendModule): OIDC module """ - def __init__(self, auth_callback_func, internal_attributes, config, base_url, name, session_storage, + def __init__(self, auth_callback_func, internal_attributes, config, base_url, name, storage, logout_callback_func): """ OIDC backend module. @@ -48,7 +48,7 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :param config: Configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin - :param session_storage: storage to hold the backend session information + :param storage: storage to hold the backend session information :param logout_callback_func: Callback should be called by the module after the logout in the backend is done. This may trigger log out flow for all the frontends associated with the backend session @@ -59,11 +59,11 @@ def __init__(self, auth_callback_func, internal_attributes, config, base_url, na :type config: dict[str, dict[str, str] | list[str]] :type base_url: str :type name: str - :type session_storage: satosa.session_storage.SessionStorage + :type storage: satosa.storage.Storage :type logout_callback_func: str (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ - super().__init__(auth_callback_func, internal_attributes, base_url, name, session_storage, logout_callback_func) + super().__init__(auth_callback_func, internal_attributes, base_url, name, storage, logout_callback_func) self.auth_callback_func = auth_callback_func self.config = config cfg_verify_ssl = config["client"].get("verify_ssl", True) diff --git a/src/satosa/backends/orcid.py b/src/satosa/backends/orcid.py index 109695723..c33b04e27 100644 --- a/src/satosa/backends/orcid.py +++ b/src/satosa/backends/orcid.py @@ -21,7 +21,7 @@ class OrcidBackend(_OAuthBackend): """Orcid OAuth 2.0 backend""" - def __init__(self, outgoing, internal_attributes, config, base_url, name, session_storage, logout_callback_func): + def __init__(self, outgoing, internal_attributes, config, base_url, name, storage, logout_callback_func): """Orcid backend constructor :param outgoing: Callback should be called by the module after the authorization in the backend is done. @@ -31,7 +31,7 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :param config: configuration parameters for the module. :param base_url: base url of the service :param name: name of the plugin - :param session_storage: storage to hold the backend session information + :param storage: storage to hold the backend session information :param logout_callback_func: Callback should be called by the module after the logout in the backend is done. This may trigger log out flow for all the frontends associated with the backend session @@ -43,14 +43,14 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :type config: dict[str, dict[str, str] | list[str] | str] :type base_url: str :type name: str - :type session_storage: satosa.session_storage.SessionStorage + :type storage: satosa.storage.Storage :type logout_callback_func: str (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response """ config.setdefault('response_type', 'code') config['verify_accesstoken_state'] = False super().__init__(outgoing, internal_attributes, config, base_url, name, 'orcid', 'orcid', - session_storage, logout_callback_func) + storage, logout_callback_func) def get_request_args(self, get_state=stateID): oauth_state = get_state(self.config["base_url"], rndstr().encode()) diff --git a/src/satosa/backends/reflector.py b/src/satosa/backends/reflector.py index e14137d01..83719a4f8 100644 --- a/src/satosa/backends/reflector.py +++ b/src/satosa/backends/reflector.py @@ -17,7 +17,7 @@ class ReflectorBackend(BackendModule): ENTITY_ID = ORG_NAME = AUTH_CLASS_REF = SUBJECT_ID = "reflector" - def __init__(self, outgoing, internal_attributes, config, base_url, name, session_storage, logout_callback_func): + def __init__(self, outgoing, internal_attributes, config, base_url, name, storage, logout_callback_func): """ :type outgoing: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -25,7 +25,7 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :type config: dict[str, Any] :type base_url: str :type name: str - :type session_storage: satosa.session_storage.SessionStorage + :type storage: satosa.storage.Storage :type logout_callback_func: str (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -35,12 +35,12 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :param config: The module config :param base_url: base url of the service :param name: name of the plugin - :param session_storage: storage to hold the backend session information + :param storage: storage to hold the backend session information :param logout_callback_func: Callback should be called by the module after the logout in the backend is done. This may trigger log out flow for all the frontends associated with the backend session """ - super().__init__(outgoing, internal_attributes, base_url, name, session_storage, logout_callback_func) + super().__init__(outgoing, internal_attributes, base_url, name, storage, logout_callback_func) def start_auth(self, context, internal_req): """ diff --git a/src/satosa/backends/saml2.py b/src/satosa/backends/saml2.py index b2e9203eb..e58065544 100644 --- a/src/satosa/backends/saml2.py +++ b/src/satosa/backends/saml2.py @@ -92,7 +92,7 @@ class SAMLBackend(BackendModule, SAMLBaseModule): VALUE_ACR_COMPARISON_DEFAULT = 'exact' - def __init__(self, outgoing, internal_attributes, config, base_url, name, session_storage, logout_callback_func): + def __init__(self, outgoing, internal_attributes, config, base_url, name, storage, logout_callback_func): """ :type outgoing: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -100,7 +100,7 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :type config: dict[str, Any] :type base_url: str :type name: str - :type session_storage: satosa.session_storage.SessionStorage + :type storage: satosa.storage.Storage :type logout_callback_func: str (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response @@ -110,12 +110,12 @@ def __init__(self, outgoing, internal_attributes, config, base_url, name, sessio :param config: The module config :param base_url: base url of the service :param name: name of the plugin - :param session_storage: storage to hold the backend session information + :param storage: storage to hold the backend session information :param logout_callback_func: Callback should be called by the module after the logout in the backend is done. This may trigger log out flow for all the frontends associated with the backend session """ - super().__init__(outgoing, internal_attributes, base_url, name, session_storage, logout_callback_func) + super().__init__(outgoing, internal_attributes, base_url, name, storage, logout_callback_func) self.config = self.init_config(config) self.discosrv = config.get(SAMLBackend.KEY_DISCO_SRV) diff --git a/src/satosa/base.py b/src/satosa/base.py index 109ded741..43a5defe6 100644 --- a/src/satosa/base.py +++ b/src/satosa/base.py @@ -24,7 +24,7 @@ from .plugin_loader import load_frontends from .plugin_loader import load_request_microservices from .plugin_loader import load_response_microservices -from .plugin_loader import load_session_storage +from .plugin_loader import load_storage from .routing import ModuleRouter from .state import State from .state import cookie_to_state @@ -55,14 +55,14 @@ def __init__(self, config): self.config = config logger.info("Loading session storage...") - self.session_storage = load_session_storage(self.config) + self.storage = load_storage(self.config) logger.info("Loading backend modules...") backends = load_backends(self.config, self._auth_resp_callback_func, self.config["INTERNAL_ATTRIBUTES"], - self.session_storage, self._backend_logout_callback_func) + self.storage, self._backend_logout_callback_func) logger.info("Loading frontend modules...") frontends = load_frontends(self.config, self._auth_req_callback_func, self.config["INTERNAL_ATTRIBUTES"], - self.session_storage) + self.storage) self.response_micro_services = [] self.request_micro_services = [] @@ -138,7 +138,7 @@ def _auth_resp_finish(self, context, internal_response): response = frontend.handle_authn_response(context, internal_response) if internal_response.frontend_sid and internal_response.backend_session_id: - self.session_storage.store_session_map( + self.storage.store_session_map( internal_response["frontend_sid"], internal_response["backend_session_id"]) @@ -188,7 +188,7 @@ def _backend_logout_callback_func(self, context, internal_request): :return: response """ - frontend_sessions = self.session_storage.get_frontend_sessions_by_backend_session_id( + frontend_sessions = self.storage.get_frontend_sessions_by_backend_session_id( internal_request.backend_session_id) if frontend_sessions: @@ -201,7 +201,7 @@ def _backend_logout_callback_func(self, context, internal_request): frontend = self.module_router.frontend_routing(context) internal_request.frontend_sid = frontend_session.get("sid") if frontend.start_logout_from_backend(context, internal_request): - self.session_storage.delete_session_map(frontend_session.get("sid")) + self.storage.delete_session_map(frontend_session.get("sid")) self._backend_logout_req_finish(context, internal_request) else: @@ -212,7 +212,7 @@ def _backend_logout_callback_func(self, context, internal_request): return Response(message="") def _backend_logout_req_finish(self, context, internal_request): - frontend_sessions = self.session_storage.get_frontend_sessions_by_backend_session_id( + frontend_sessions = self.storage.get_frontend_sessions_by_backend_session_id( internal_request.backend_session_id) if frontend_sessions: @@ -221,7 +221,7 @@ def _backend_logout_req_finish(self, context, internal_request): else: msg = "All the frontends logged out for the backend session id: {}.".format( internal_request.backend_session_id) - self.session_storage.delete_backend_session(internal_request.backend_session_id) + self.storage.delete_backend_session(internal_request.backend_session_id) logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg) logger.info(logline) diff --git a/src/satosa/frontends/base.py b/src/satosa/frontends/base.py index f8aecc04a..35ea1862d 100644 --- a/src/satosa/frontends/base.py +++ b/src/satosa/frontends/base.py @@ -9,25 +9,25 @@ class FrontendModule(object): Base class for a frontend module. """ - def __init__(self, auth_req_callback_func, internal_attributes, base_url, name, session_storage): + def __init__(self, auth_req_callback_func, internal_attributes, base_url, name, storage): """ :type auth_req_callback_func: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response :type internal_attributes: dict[str, dict[str, str | list[str]]] :type name: str - :type session_storage: satosa.session_storage.SessionStorage + :type storage: satosa.storage.Storage :param auth_req_callback_func: Callback should be called by the module after the authorization response has been processed. :param name: name of the plugin - :param session_storage: storage to hold the backend session information + :param storage: storage to hold the backend session information """ self.auth_req_callback_func = auth_req_callback_func self.internal_attributes = internal_attributes self.converter = AttributeMapper(internal_attributes) self.base_url = base_url self.name = name - self.session_storage = session_storage + self.storage = storage def handle_authn_response(self, context, internal_resp): """ diff --git a/src/satosa/frontends/openid_connect.py b/src/satosa/frontends/openid_connect.py index be4650ddc..3f47ad020 100644 --- a/src/satosa/frontends/openid_connect.py +++ b/src/satosa/frontends/openid_connect.py @@ -59,10 +59,10 @@ class OpenIDConnectFrontend(FrontendModule): A OpenID Connect frontend module """ - def __init__(self, auth_req_callback_func, internal_attributes, conf, base_url, name, session_storage, + def __init__(self, auth_req_callback_func, internal_attributes, conf, base_url, name, storage, logout_callback): _validate_config(conf) - super().__init__(auth_req_callback_func, internal_attributes, base_url, name, session_storage) + super().__init__(auth_req_callback_func, internal_attributes, base_url, name, storage) self.config = conf provider_config = self.config["provider"] @@ -151,7 +151,7 @@ def handle_authn_response(self, context, internal_resp): frontend_sid = context.state.session_id internal_resp.frontend_sid = frontend_sid - self.session_storage.store_frontend_session( + self.storage.store_frontend_session( self.name, internal_resp.requester, internal_resp.subject_id, @@ -419,7 +419,7 @@ def start_logout_from_backend(self, context, internal_request): :rtype bool """ logout_status = True - session = self.session_storage.get_frontend_session(internal_request.frontend_sid) + session = self.storage.get_frontend_session(internal_request.frontend_sid) client = self.cdb[session.get("requester")] if client.get("back_channel_logout_uri"): @@ -436,9 +436,9 @@ def start_logout_from_backend(self, context, internal_request): logout_token_str = logout_token.to_jwt([self.signing_key], "RS256") logger.debug('signed logout_token {} using alg={}'.format(logout_token_str, "RS256")) resp = requests.post(client.get("back_channel_logout_uri"), json={"logout_token": logout_token_str}, verify=False) - + if resp.status_code == 200: - self.session_storage.delete_frontend_session(internal_request.frontend_sid) + self.storage.delete_frontend_session(internal_request.frontend_sid) msg = "RP with client id '{}' of the frontend name '{}' logged out successfully.".format( session.get("requester"), self.name) logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg) diff --git a/src/satosa/frontends/ping.py b/src/satosa/frontends/ping.py index bec4bc257..c4f9cc1eb 100644 --- a/src/satosa/frontends/ping.py +++ b/src/satosa/frontends/ping.py @@ -14,9 +14,9 @@ class PingFrontend(FrontendModule): 200 OK, intended to be used as a simple heartbeat monitor. """ - def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, session_storage, + def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, storage, logout_callback): - super().__init__(auth_req_callback_func, internal_attributes, base_url, name, session_storage) + super().__init__(auth_req_callback_func, internal_attributes, base_url, name, storage) self.config = config diff --git a/src/satosa/frontends/saml2.py b/src/satosa/frontends/saml2.py index a4ac0be59..b9191b49d 100644 --- a/src/satosa/frontends/saml2.py +++ b/src/satosa/frontends/saml2.py @@ -67,11 +67,11 @@ class SAMLFrontend(FrontendModule, SAMLBaseModule): KEY_ENDPOINTS = 'endpoints' KEY_IDP_CONFIG = 'idp_config' - def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, session_storage, + def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, storage, logout_callback): self._validate_config(config) - super().__init__(auth_req_callback_func, internal_attributes, base_url, name, session_storage) + super().__init__(auth_req_callback_func, internal_attributes, base_url, name, storage) self.config = self.init_config(config) self.endpoints = config[self.KEY_ENDPOINTS] @@ -830,10 +830,10 @@ class SAMLVirtualCoFrontend(SAMLFrontend): KEY_ORGANIZATION = 'organization' KEY_ORGANIZATION_KEYS = ['display_name', 'name', 'url'] - def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, session_storage, + def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, storage, logout_callback): self.has_multiple_backends = False - super().__init__(auth_req_callback_func, internal_attributes, config, base_url, name, session_storage, + super().__init__(auth_req_callback_func, internal_attributes, config, base_url, name, storage, logout_callback) def handle_authn_request(self, context, binding_in): diff --git a/src/satosa/plugin_loader.py b/src/satosa/plugin_loader.py index 397edebf1..a69339a62 100644 --- a/src/satosa/plugin_loader.py +++ b/src/satosa/plugin_loader.py @@ -27,7 +27,7 @@ def prepend_to_import_path(import_paths): del sys.path[0:len(import_paths)] # restore sys.path -def load_backends(config, auth_callback, internal_attributes, session_storage, logout_callback): +def load_backends(config, auth_callback, internal_attributes, storage, logout_callback): """ Load all backend modules specified in the config @@ -45,13 +45,13 @@ def load_backends(config, auth_callback, internal_attributes, session_storage, l config.get("CUSTOM_PLUGIN_MODULE_PATHS"), config["BACKEND_MODULES"], backend_filter, config["BASE"], - internal_attributes, auth_callback, session_storage, logout_callback + internal_attributes, auth_callback, storage, logout_callback ) logger.info("Setup backends: {}".format([backend.name for backend in backend_modules])) return backend_modules -def load_frontends(config, auth_callback, internal_attributes, session_storage): +def load_frontends(config, auth_callback, internal_attributes, storage): """ Load all frontend modules specified in the config @@ -67,7 +67,7 @@ def load_frontends(config, auth_callback, internal_attributes, session_storage): """ frontend_modules = _load_plugins(config.get("CUSTOM_PLUGIN_MODULE_PATHS"), config["FRONTEND_MODULES"], frontend_filter, config["BASE"], internal_attributes, auth_callback, - session_storage) + storage) logger.info("Setup frontends: {}".format([frontend.name for frontend in frontend_modules])) return frontend_modules @@ -153,7 +153,7 @@ def _load_plugin_config(config): def _load_plugins(plugin_paths, plugins, plugin_filter, base_url, internal_attributes, auth_callback, - session_storage, logout_callback=None): + storage, logout_callback=None): """ Loads endpoint plugins @@ -181,7 +181,7 @@ def _load_plugins(plugin_paths, plugins, plugin_filter, base_url, internal_attri module_config = _replace_variables_in_plugin_module_config(plugin_config["config"], base_url, plugin_config["name"]) instance = module_class(auth_callback, internal_attributes, module_config, base_url, - plugin_config["name"], session_storage, logout_callback) + plugin_config["name"], storage, logout_callback) loaded_plugin_modules.append(instance) return loaded_plugin_modules @@ -284,33 +284,33 @@ def load_response_microservices(plugin_path, plugins, internal_attributes, base_ return response_services -def load_session_storage(config): +def load_storage(config): """ - Loads the session storage based on the provided config + Loads the storage based on the provided config :type config: satosa.satosa_config.SATOSAConfig - :rtype: session_storage.SessionStorage + :rtype: storage.Storage :param config: The configuration of the satosa proxy - :return: Session Storage which could either be in-memory, PostgreSQL, or any other defined storage + :return: Storage which could either be in-memory, PostgreSQL, or any other defined storage """ - session_storage = config.get("SESSION_STORAGE") - if session_storage: - try: - storage_type = session_storage["type"] - if storage_type == "postgresql": - logger.info("Using the postgresql session storage.") - from satosa.session_storage import SessionStoragePostgreSQL - try: - return SessionStoragePostgreSQL(config) - except Exception as error: - return error - except SATOSAConfigurationError as err: - logger.error(err) + logout_enabled = config.get("LOGOUT_ENABLED") + if logout_enabled: + storage = config.get("STORAGE") + if storage: + try: + storage_type = storage.get("type", "") + storage = locate(storage_type) + return storage(config) + except TypeError as err: + raise SATOSAConfigurationError("Unable to load storage for type : {}".format(storage_type)) from err + else: + logger.info("STORAGE is not defined") + + logger.info("Using the in-memory storage.") + from satosa.storage import StorageInMemory + return StorageInMemory(config) else: - logger.info("SESSION_STORAGE is not defined") - - logger.info("Using the in-memory session storage.") - from satosa.session_storage import SessionStorageInMemory - return SessionStorageInMemory(config) - + logger.info("Logout not enabled. Creating mock storage.") + from satosa.storage import StorageMock + return StorageMock() diff --git a/src/satosa/session_storage.py b/src/satosa/storage.py similarity index 95% rename from src/satosa/session_storage.py rename to src/satosa/storage.py index 4034a442e..dbbc1af19 100644 --- a/src/satosa/session_storage.py +++ b/src/satosa/storage.py @@ -5,12 +5,12 @@ from sqlalchemy.ext.declarative import declarative_base -class SessionStorage: +class Storage: def __init__(self, config): - self.db_config = config.get("SESSION_STORAGE") + self.db_config = config.get("STORAGE") -class SessionStorageInMemory(SessionStorage): +class StorageInMemory(Storage): """ In-memory session storage """ @@ -108,7 +108,7 @@ class SessionMap(Base): backend_session_id = mapped_column(Integer, ForeignKey("backend_session.id")) -class SessionStoragePostgreSQL(SessionStorage): +class StoragePostgreSQL(Storage): """ PostgreSQL session storage """ @@ -225,4 +225,15 @@ def delete_session_map(self, frontend_sid): session = self.Session() session.query(SessionMap).filter(SessionMap.frontend_sid == frontend_sid).delete() session.commit() - session.close() \ No newline at end of file + session.close() + +class StorageMock: + + def __init__(*args, **kwargs): + pass + + def __call__(self, *args, **kwargs): + pass + + def __getattr__(self, *args, **kwargs): + return self diff --git a/tests/conftest.py b/tests/conftest.py index f31ef70b2..e466fc0b7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -6,7 +6,7 @@ from saml2.extension.idpdisc import BINDING_DISCO from saml2.saml import NAME_FORMAT_URI, NAMEID_FORMAT_TRANSIENT, NAMEID_FORMAT_PERSISTENT -from satosa.plugin_loader import load_session_storage +from satosa.plugin_loader import load_storage from satosa.context import Context from satosa.state import State @@ -358,10 +358,10 @@ def consent_module_config(signing_key_path): @pytest.fixture -def session_storage(): +def storage(): storage_config = { - "SESSION_STORAGE": { - "type": "in-memory" + "STORAGE": { + "type": "satosa.storage.StorageInMemory" } } - return load_session_storage(storage_config) + return load_storage(storage_config) diff --git a/tests/flows/test_oidc-idpy_oidc.py b/tests/flows/test_oidc-idpy_oidc.py index aabf52d91..6bae99441 100644 --- a/tests/flows/test_oidc-idpy_oidc.py +++ b/tests/flows/test_oidc-idpy_oidc.py @@ -96,7 +96,7 @@ def _client_setup(self): @mock.patch("requests.post") @mock.patch("idpyoidc.client.oauth2.stand_alone_client.StandAloneClient.finalize") - def test_full_flow_front_channel_logout_inmemory_session_storage( + def test_full_flow_front_channel_logout_inmemory_storage( self, mock_stand_alone_client_finalize, mock_logout_post_request, @@ -193,7 +193,7 @@ def test_full_flow_front_channel_logout_inmemory_session_storage( frontend_session_before_logout, session_maps_before_logout, ) = get_session_storage_components_using_sid( - test_client.application.app.app.session_storage, + test_client.application.app.app.storage, "30f8dae4-1da5-41bf-a801-5aad0648af8c", ) @@ -215,7 +215,7 @@ def test_full_flow_front_channel_logout_inmemory_session_storage( frontend_session_after_logout, session_maps_after_logout, ) = get_session_storage_components_using_sid( - test_client.application.app.app.session_storage, + test_client.application.app.app.storage, "30f8dae4-1da5-41bf-a801-5aad0648af8c", ) assert backend_session_before_logout != backend_session_after_logout @@ -223,12 +223,12 @@ def test_full_flow_front_channel_logout_inmemory_session_storage( assert session_maps_before_logout != session_maps_after_logout -def get_session_storage_components_using_sid(session_storage, sid): - backend_session = session_storage.get_backend_session(sid) - session_maps = copy(session_storage.session_maps) +def get_session_storage_components_using_sid(storage, sid): + backend_session = storage.get_backend_session(sid) + session_maps = copy(storage.session_maps) frontend_session = "" for session_map in session_maps: - frontend_session = session_storage.get_backend_session( + frontend_session = storage.get_backend_session( session_map.get("frontend_sid") ) return backend_session, frontend_session, session_maps diff --git a/tests/satosa/backends/test_idpy_oidc.py b/tests/satosa/backends/test_idpy_oidc.py index f366a8220..a4dd0af05 100644 --- a/tests/satosa/backends/test_idpy_oidc.py +++ b/tests/satosa/backends/test_idpy_oidc.py @@ -19,7 +19,7 @@ from satosa.context import Context from satosa.internal import InternalData from satosa.response import Response -from satosa.session_storage import SessionStorageInMemory +from satosa.storage import StorageInMemory ISSUER = "https://provider.example.com" CLIENT_ID = "test_client" @@ -66,7 +66,7 @@ def internal_attributes(self): } @pytest.fixture - def session_storage(self): + def storage(self): backend_sessions = [ { "id": 1, @@ -91,15 +91,15 @@ def session_storage(self): } ] - session_storage = SessionStorageInMemory({}) - session_storage.backend_sessions = backend_sessions - session_storage.frontend_sessions = frontend_sessions - session_storage.session_maps = session_maps - return session_storage + storage = StorageInMemory({}) + storage.backend_sessions = backend_sessions + storage.frontend_sessions = frontend_sessions + storage.session_maps = session_maps + return storage @pytest.fixture(autouse=True) @responses.activate - def create_backend(self, internal_attributes, backend_config, session_storage): + def create_backend(self, internal_attributes, backend_config, storage): base_url = backend_config['client']['base_url'] self.issuer_keys = build_keyjar(DEFAULT_KEY_DEFS) with responses.RequestsMock() as rsps: @@ -111,7 +111,7 @@ def create_backend(self, internal_attributes, backend_config, session_storage): content_type="application/json") self.oidc_backend = IdpyOIDCBackend(Mock(), internal_attributes, backend_config, - base_url, "oidc", session_storage, Mock()) + base_url, "oidc", storage, Mock()) @pytest.fixture def userinfo(self): diff --git a/tests/satosa/frontends/test_openid_connect.py b/tests/satosa/frontends/test_openid_connect.py index 3e001963a..53bacbb36 100644 --- a/tests/satosa/frontends/test_openid_connect.py +++ b/tests/satosa/frontends/test_openid_connect.py @@ -86,14 +86,14 @@ def frontend_config_with_extra_id_token_claims(self, signing_key_path): return config - def create_frontend(self, frontend_config, session_storage): + def create_frontend(self, frontend_config, storage): # will use in-memory storage instance = OpenIDConnectFrontend(lambda ctx, req: None, INTERNAL_ATTRIBUTES, - frontend_config, BASE_URL, "oidc_frontend", session_storage, None) + frontend_config, BASE_URL, "oidc_frontend", storage, None) instance.register_endpoints(["foo_backend"]) return instance - def create_frontend_with_extra_scopes(self, frontend_config_with_extra_scopes, session_storage): + def create_frontend_with_extra_scopes(self, frontend_config_with_extra_scopes, storage): # will use in-memory storage internal_attributes_with_extra_scopes = copy.deepcopy(INTERNAL_ATTRIBUTES) internal_attributes_with_extra_scopes["attributes"].update(EXTRA_CLAIMS) @@ -102,18 +102,18 @@ def create_frontend_with_extra_scopes(self, frontend_config_with_extra_scopes, s internal_attributes_with_extra_scopes, frontend_config_with_extra_scopes, BASE_URL, - "oidc_frontend_with_extra_scopes", session_storage, None + "oidc_frontend_with_extra_scopes", storage, None ) instance.register_endpoints(["foo_backend"]) return instance @pytest.fixture - def frontend(self, frontend_config, session_storage): - return self.create_frontend(frontend_config, session_storage) + def frontend(self, frontend_config, storage): + return self.create_frontend(frontend_config, storage) @pytest.fixture - def frontend_with_extra_scopes(self, frontend_config_with_extra_scopes, session_storage): - return self.create_frontend_with_extra_scopes(frontend_config_with_extra_scopes, session_storage) + def frontend_with_extra_scopes(self, frontend_config_with_extra_scopes, storage): + return self.create_frontend_with_extra_scopes(frontend_config_with_extra_scopes, storage) @pytest.fixture def authn_req(self): @@ -406,10 +406,10 @@ def test_register_endpoints_dynamic_client_registration_is_configurable( True, False ]) - def test_mirrored_subject(self, context, frontend_config, authn_req, sub_mirror_public, session_storage): + def test_mirrored_subject(self, context, frontend_config, authn_req, sub_mirror_public, storage): frontend_config["sub_mirror_public"] = sub_mirror_public frontend_config["provider"]["subject_types_supported"] = ["public"] - frontend = self.create_frontend(frontend_config, session_storage) + frontend = self.create_frontend(frontend_config, storage) self.insert_client_in_client_db(frontend, authn_req["redirect_uri"]) internal_response = self.setup_for_authn_response(context, frontend, authn_req) diff --git a/tests/satosa/test_plugin_loader.py b/tests/satosa/test_plugin_loader.py index 727c27af5..01f9be97e 100644 --- a/tests/satosa/test_plugin_loader.py +++ b/tests/satosa/test_plugin_loader.py @@ -14,9 +14,9 @@ _request_micro_service_filter, _response_micro_service_filter, _load_plugin_config, - load_session_storage, + load_storage, ) -from satosa.session_storage import SessionStoragePostgreSQL, SessionStorageInMemory +from satosa.storage import StoragePostgreSQL, StorageInMemory class TestFilters(object): @@ -86,17 +86,17 @@ def test_handles_malformed_data(self): _load_plugin_config(data) -class TestLoadSessionStorage(object): - def session_storage_postgresql_init_mock(self, config): +class TestLoadStorage(object): + def storage_postgresql_init_mock(self, config): pass @patch.object( - SessionStoragePostgreSQL, "__init__", session_storage_postgresql_init_mock + StoragePostgreSQL, "__init__", storage_postgresql_init_mock ) def test_load_postgresql_session(self): config = { - "SESSION_STORAGE": { - "type": "postgresql", + "STORAGE": { + "type": "satosa.storage.StoragePostgreSQL", "host": "127.0.0.1", "port": 5432, "db_name": "satosa", @@ -104,13 +104,13 @@ def test_load_postgresql_session(self): "password": "secret", } } - postgresql_session_storage = load_session_storage(config) - assert isinstance(postgresql_session_storage, SessionStoragePostgreSQL) + postgresql_storage = load_storage(config) + assert isinstance(postgresql_storage, StoragePostgreSQL) def test_load_inmemory_session(self): config = {} - inmemory_session_storage = load_session_storage(config) - assert isinstance(inmemory_session_storage, SessionStorageInMemory) - assert hasattr(inmemory_session_storage, "frontend_sessions") - assert hasattr(inmemory_session_storage, "backend_sessions") - assert hasattr(inmemory_session_storage, "session_maps") + inmemory_storage = load_storage(config) + assert isinstance(inmemory_storage, StorageInMemory) + assert hasattr(inmemory_storage, "frontend_sessions") + assert hasattr(inmemory_storage, "backend_sessions") + assert hasattr(inmemory_storage, "session_maps") diff --git a/tests/satosa/test_session_storage.py b/tests/satosa/test_session_storage.py deleted file mode 100644 index dcca7ab19..000000000 --- a/tests/satosa/test_session_storage.py +++ /dev/null @@ -1,139 +0,0 @@ -from unittest import TestCase -from unittest.mock import patch - -from satosa.plugin_loader import load_session_storage -from satosa.session_storage import FrontendSession - - -class TestInMemorySessionStorage(TestCase): - def test_inmemory_store_frontend_session(self): - config = {} - session_storage = load_session_storage(config) - session_storage.store_frontend_session( - "OIDC", "requester-Azure", "sub-id", "sid-1FE" - ) - assert session_storage.frontend_sessions - - def test_inmemory_get_frontend_session(self): - config = {} - session_storage = load_session_storage(config) - assert not session_storage.get_frontend_session("sid-1FE") - session_storage.store_frontend_session( - "OIDC", "requester-Azure", "sub-id", "sid-1FE" - ) - assert session_storage.get_frontend_session("sid-1FE") - - def test_inmemory_delete_frontend_session(self): - config = {} - session_storage = load_session_storage(config) - session_storage.store_frontend_session( - "OIDC", "requester-Azure", "sub-id", "sid-1FE" - ) - session_storage.delete_frontend_session("sid-1FE") - assert not session_storage.get_frontend_session("sid-1FE") - - def test_inmemory_store_backend_session(self): - config = {} - session_storage = load_session_storage(config) - session_storage.store_backend_session("sid-1BE", "OIDC") - assert session_storage.backend_sessions - - def test_inmemory_get_backend_session(self): - config = {} - session_storage = load_session_storage(config) - session_storage.store_backend_session("sid-1BE", "OIDC") - backend_session = session_storage.get_backend_session("sid-1BE", "OIDC") - assert backend_session - - def test_inmemory_get_unique_backend_session_from_multiple_same_sid_backends(self): - config = {} - session_storage = load_session_storage(config) - session_storage.store_backend_session("sid-1BE", "OIDC") - session_storage.store_backend_session("sid-1BE", "OIDC2") - backend_session = session_storage.get_backend_session("sid-1BE", "OIDC2") - assert backend_session.get("issuer") == "OIDC2" - - def test_inmemory_get_backend_session_doesnot_exist(self): - config = {} - session_storage = load_session_storage(config) - backend_session = session_storage.get_backend_session("sid-1BE", "OIDC2") - assert not backend_session - - def test_inmemory_delete_backend_session(self): - config = {} - session_storage = load_session_storage(config) - session_storage.store_backend_session("sid-1BE", "OIDC") - session_storage.delete_backend_session( - session_storage.get_backend_session("sid-1BE")["id"] - ) - backend_session = session_storage.get_backend_session("sid-1BE") - assert not backend_session - - def test_inmemory_store_session_map(self): - config = {} - session_storage = load_session_storage(config) - session_storage.store_session_map("sid-1FE", "sid-1BE") - assert session_storage.session_maps - - def test_inmemory_delete_session_map(self): - config = {} - session_storage = load_session_storage(config) - session_storage.store_session_map("sid-1FE", "sid-1BE") - session_storage.delete_session_map("sid-1FE") - assert not session_storage.session_maps - - def test_inmemory_get_frontend_sessions_by_backend_session_id(self): - config = {} - session_storage = load_session_storage(config) - assert not session_storage.get_frontend_sessions_by_backend_session_id( - "sid-1BE" - ) - session_storage.store_frontend_session( - "OIDC", "requester-Azure", "sub-id", "sid-1FE" - ) - session_storage.store_frontend_session( - "OIDC", "requester-Azure", "sub-id", "sid-2FE" - ) - session_storage.store_session_map("sid-1FE", "sid-1BE") - session_storage.store_session_map("sid-2FE", "sid-1BE") - backend_sessions = session_storage.get_frontend_sessions_by_backend_session_id( - "sid-1BE" - ) - assert len(backend_sessions) == 2 - - -class TestPostgreSQLSessionStorage(TestCase): - @patch("sqlalchemy.orm.session.Session.query") - @patch("sqlalchemy.orm.session.Session.commit") - @patch("satosa.session_storage.Base") - def test_postgresql_store_frontend_session( - self, mock_base, mock_session_commit, mock_frontend_session_query - ): - config = { - "SESSION_STORAGE": { - "type": "postgresql", - "host": "127.0.0.1", - "port": 5432, - "db_name": "satosa", - "user": "postgres", - "password": "secret", - } - } - mock_base.return_value.metadata.return_value.create_all.return_value = None - mock_session_commit.return_value = None - session_storage = load_session_storage(config) - session_storage.store_frontend_session( - "OIDC", "requester-Azure", "sub-id", "sid-1FE" - ) - - frontend_session_mock = FrontendSession() - frontend_session_mock.sid = "sid" - frontend_session_mock.frontend_name = "frontend_name" - frontend_session_mock.requester = "requester" - frontend_session_mock.subject_id = "subject_id" - mock_frontend_session_query.return_value.filter.return_value.first.return_value = ( - frontend_session_mock - ) - - frontend_session = session_storage.get_frontend_session("sid-1FE") - assert frontend_session diff --git a/tests/satosa/test_storage.py b/tests/satosa/test_storage.py new file mode 100644 index 000000000..38543b889 --- /dev/null +++ b/tests/satosa/test_storage.py @@ -0,0 +1,139 @@ +from unittest import TestCase +from unittest.mock import patch + +from satosa.plugin_loader import load_storage +from satosa.storage import FrontendSession + + +class TestInMemoryStorage(TestCase): + def test_inmemory_store_frontend_session(self): + config = {} + storage = load_storage(config) + storage.store_frontend_session( + "OIDC", "requester-Azure", "sub-id", "sid-1FE" + ) + assert storage.frontend_sessions + + def test_inmemory_get_frontend_session(self): + config = {} + storage = load_storage(config) + assert not storage.get_frontend_session("sid-1FE") + storage.store_frontend_session( + "OIDC", "requester-Azure", "sub-id", "sid-1FE" + ) + assert storage.get_frontend_session("sid-1FE") + + def test_inmemory_delete_frontend_session(self): + config = {} + storage = load_storage(config) + storage.store_frontend_session( + "OIDC", "requester-Azure", "sub-id", "sid-1FE" + ) + storage.delete_frontend_session("sid-1FE") + assert not storage.get_frontend_session("sid-1FE") + + def test_inmemory_store_backend_session(self): + config = {} + storage = load_storage(config) + storage.store_backend_session("sid-1BE", "OIDC") + assert storage.backend_sessions + + def test_inmemory_get_backend_session(self): + config = {} + storage = load_storage(config) + storage.store_backend_session("sid-1BE", "OIDC") + backend_session = storage.get_backend_session("sid-1BE", "OIDC") + assert backend_session + + def test_inmemory_get_unique_backend_session_from_multiple_same_sid_backends(self): + config = {} + storage = load_storage(config) + storage.store_backend_session("sid-1BE", "OIDC") + storage.store_backend_session("sid-1BE", "OIDC2") + backend_session = storage.get_backend_session("sid-1BE", "OIDC2") + assert backend_session.get("issuer") == "OIDC2" + + def test_inmemory_get_backend_session_doesnot_exist(self): + config = {} + storage = load_storage(config) + backend_session = storage.get_backend_session("sid-1BE", "OIDC2") + assert not backend_session + + def test_inmemory_delete_backend_session(self): + config = {} + storage = load_storage(config) + storage.store_backend_session("sid-1BE", "OIDC") + storage.delete_backend_session( + storage.get_backend_session("sid-1BE")["id"] + ) + backend_session = storage.get_backend_session("sid-1BE") + assert not backend_session + + def test_inmemory_store_session_map(self): + config = {} + storage = load_storage(config) + storage.store_session_map("sid-1FE", "sid-1BE") + assert storage.session_maps + + def test_inmemory_delete_session_map(self): + config = {} + storage = load_storage(config) + storage.store_session_map("sid-1FE", "sid-1BE") + storage.delete_session_map("sid-1FE") + assert not storage.session_maps + + def test_inmemory_get_frontend_sessions_by_backend_session_id(self): + config = {} + storage = load_storage(config) + assert not storage.get_frontend_sessions_by_backend_session_id( + "sid-1BE" + ) + storage.store_frontend_session( + "OIDC", "requester-Azure", "sub-id", "sid-1FE" + ) + storage.store_frontend_session( + "OIDC", "requester-Azure", "sub-id", "sid-2FE" + ) + storage.store_session_map("sid-1FE", "sid-1BE") + storage.store_session_map("sid-2FE", "sid-1BE") + backend_sessions = storage.get_frontend_sessions_by_backend_session_id( + "sid-1BE" + ) + assert len(backend_sessions) == 2 + + +class TestPostgreSQLStorage(TestCase): + @patch("sqlalchemy.orm.session.Session.query") + @patch("sqlalchemy.orm.session.Session.commit") + @patch("satosa.storage.Base") + def test_postgresql_store_frontend_session( + self, mock_base, mock_session_commit, mock_frontend_session_query + ): + config = { + "STORAGE": { + "type": "satosa.storage.StoragePostgreSQL", + "host": "127.0.0.1", + "port": 5432, + "db_name": "satosa", + "user": "postgres", + "password": "secret", + } + } + mock_base.return_value.metadata.return_value.create_all.return_value = None + mock_session_commit.return_value = None + storage = load_storage(config) + storage.store_frontend_session( + "OIDC", "requester-Azure", "sub-id", "sid-1FE" + ) + + frontend_session_mock = FrontendSession() + frontend_session_mock.sid = "sid" + frontend_session_mock.frontend_name = "frontend_name" + frontend_session_mock.requester = "requester" + frontend_session_mock.subject_id = "subject_id" + mock_frontend_session_query.return_value.filter.return_value.first.return_value = ( + frontend_session_mock + ) + + frontend_session = storage.get_frontend_session("sid-1FE") + assert frontend_session diff --git a/tests/util.py b/tests/util.py index 32dd4a6c1..9b7d21d0b 100644 --- a/tests/util.py +++ b/tests/util.py @@ -458,9 +458,9 @@ def register_endpoints(self, backend_names): class TestBackend(BackendModule): __test__ = False - def __init__(self, auth_callback_func, internal_attributes, config, base_url, name, session_storage, + def __init__(self, auth_callback_func, internal_attributes, config, base_url, name, storage, logout_callback_func): - super().__init__(auth_callback_func, internal_attributes, base_url, name, session_storage, logout_callback_func) + super().__init__(auth_callback_func, internal_attributes, base_url, name, storage, logout_callback_func) def register_endpoints(self): return [("^{}/response$".format(self.name), self.handle_response)] @@ -479,9 +479,9 @@ def handle_response(self, context): class TestFrontend(FrontendModule): __test__ = False - def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, session_storage, + def __init__(self, auth_req_callback_func, internal_attributes, config, base_url, name, storage, logout_callback): - super().__init__(auth_req_callback_func, internal_attributes, base_url, name, session_storage) + super().__init__(auth_req_callback_func, internal_attributes, base_url, name, storage) def register_endpoints(self, backend_names): url_map = [("^{}/{}/request$".format(p, self.name), self.handle_request) for p in backend_names] From 60337f37d5733e9e27c5aa66b6c059c52c082b69 Mon Sep 17 00:00:00 2001 From: Ali Haider Date: Wed, 31 Jan 2024 13:16:34 +0500 Subject: [PATCH 7/8] fixed unit tests --- tests/flows/test_oidc-idpy_oidc.py | 1 + tests/satosa/test_plugin_loader.py | 3 ++- tests/satosa/test_storage.py | 25 +++++++++++++------------ 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/tests/flows/test_oidc-idpy_oidc.py b/tests/flows/test_oidc-idpy_oidc.py index 6bae99441..1f12d9893 100644 --- a/tests/flows/test_oidc-idpy_oidc.py +++ b/tests/flows/test_oidc-idpy_oidc.py @@ -113,6 +113,7 @@ def test_full_flow_front_channel_logout_inmemory_storage( satosa_config_dict["INTERNAL_ATTRIBUTES"]["attributes"] = { attr_name: {"openid": [attr_name]} for attr_name in USERS[subject_id] } + satosa_config_dict['LOGOUT_ENABLED'] = True # application test_client = Client(make_app(SATOSAConfig(satosa_config_dict)), satosaResp) diff --git a/tests/satosa/test_plugin_loader.py b/tests/satosa/test_plugin_loader.py index 01f9be97e..1e9987ff0 100644 --- a/tests/satosa/test_plugin_loader.py +++ b/tests/satosa/test_plugin_loader.py @@ -95,6 +95,7 @@ def storage_postgresql_init_mock(self, config): ) def test_load_postgresql_session(self): config = { + "LOGOUT_ENABLED": True, "STORAGE": { "type": "satosa.storage.StoragePostgreSQL", "host": "127.0.0.1", @@ -108,7 +109,7 @@ def test_load_postgresql_session(self): assert isinstance(postgresql_storage, StoragePostgreSQL) def test_load_inmemory_session(self): - config = {} + config = {"LOGOUT_ENABLED": True} inmemory_storage = load_storage(config) assert isinstance(inmemory_storage, StorageInMemory) assert hasattr(inmemory_storage, "frontend_sessions") diff --git a/tests/satosa/test_storage.py b/tests/satosa/test_storage.py index 38543b889..35f79b569 100644 --- a/tests/satosa/test_storage.py +++ b/tests/satosa/test_storage.py @@ -4,10 +4,10 @@ from satosa.plugin_loader import load_storage from satosa.storage import FrontendSession - +CONFIG_INMEMORY = {"LOGOUT_ENABLED": True} class TestInMemoryStorage(TestCase): def test_inmemory_store_frontend_session(self): - config = {} + config = CONFIG_INMEMORY storage = load_storage(config) storage.store_frontend_session( "OIDC", "requester-Azure", "sub-id", "sid-1FE" @@ -15,7 +15,7 @@ def test_inmemory_store_frontend_session(self): assert storage.frontend_sessions def test_inmemory_get_frontend_session(self): - config = {} + config = CONFIG_INMEMORY storage = load_storage(config) assert not storage.get_frontend_session("sid-1FE") storage.store_frontend_session( @@ -24,7 +24,7 @@ def test_inmemory_get_frontend_session(self): assert storage.get_frontend_session("sid-1FE") def test_inmemory_delete_frontend_session(self): - config = {} + config = CONFIG_INMEMORY storage = load_storage(config) storage.store_frontend_session( "OIDC", "requester-Azure", "sub-id", "sid-1FE" @@ -33,20 +33,20 @@ def test_inmemory_delete_frontend_session(self): assert not storage.get_frontend_session("sid-1FE") def test_inmemory_store_backend_session(self): - config = {} + config = CONFIG_INMEMORY storage = load_storage(config) storage.store_backend_session("sid-1BE", "OIDC") assert storage.backend_sessions def test_inmemory_get_backend_session(self): - config = {} + config = CONFIG_INMEMORY storage = load_storage(config) storage.store_backend_session("sid-1BE", "OIDC") backend_session = storage.get_backend_session("sid-1BE", "OIDC") assert backend_session def test_inmemory_get_unique_backend_session_from_multiple_same_sid_backends(self): - config = {} + config = CONFIG_INMEMORY storage = load_storage(config) storage.store_backend_session("sid-1BE", "OIDC") storage.store_backend_session("sid-1BE", "OIDC2") @@ -54,13 +54,13 @@ def test_inmemory_get_unique_backend_session_from_multiple_same_sid_backends(sel assert backend_session.get("issuer") == "OIDC2" def test_inmemory_get_backend_session_doesnot_exist(self): - config = {} + config = CONFIG_INMEMORY storage = load_storage(config) backend_session = storage.get_backend_session("sid-1BE", "OIDC2") assert not backend_session def test_inmemory_delete_backend_session(self): - config = {} + config = CONFIG_INMEMORY storage = load_storage(config) storage.store_backend_session("sid-1BE", "OIDC") storage.delete_backend_session( @@ -70,20 +70,20 @@ def test_inmemory_delete_backend_session(self): assert not backend_session def test_inmemory_store_session_map(self): - config = {} + config = CONFIG_INMEMORY storage = load_storage(config) storage.store_session_map("sid-1FE", "sid-1BE") assert storage.session_maps def test_inmemory_delete_session_map(self): - config = {} + config = CONFIG_INMEMORY storage = load_storage(config) storage.store_session_map("sid-1FE", "sid-1BE") storage.delete_session_map("sid-1FE") assert not storage.session_maps def test_inmemory_get_frontend_sessions_by_backend_session_id(self): - config = {} + config = CONFIG_INMEMORY storage = load_storage(config) assert not storage.get_frontend_sessions_by_backend_session_id( "sid-1BE" @@ -110,6 +110,7 @@ def test_postgresql_store_frontend_session( self, mock_base, mock_session_commit, mock_frontend_session_query ): config = { + "LOGOUT_ENABLED": True, "STORAGE": { "type": "satosa.storage.StoragePostgreSQL", "host": "127.0.0.1", From 02187ffcd7d0c52474440c6195f0a8ea4361c9ed Mon Sep 17 00:00:00 2001 From: Ali Haider Date: Fri, 8 Mar 2024 12:41:41 +0500 Subject: [PATCH 8/8] updated the documentation --- doc/README.md | 103 +++++++++++++++++++++ doc/images/oidc-be-backchannel-logout.png | Bin 0 -> 358108 bytes doc/images/oidc-be-frontchannel-logout.png | Bin 0 -> 355164 bytes doc/images/session-storage.png | Bin 0 -> 262332 bytes setup.py | 3 +- 5 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 doc/images/oidc-be-backchannel-logout.png create mode 100644 doc/images/oidc-be-frontchannel-logout.png create mode 100644 doc/images/session-storage.png diff --git a/doc/README.md b/doc/README.md index fd266723b..2fcd693b7 100644 --- a/doc/README.md +++ b/doc/README.md @@ -496,6 +496,109 @@ When using an OP that only supports statically registered clients, see the and make sure to provide the redirect URI, constructed as described in the section about Google configuration below, in the static registration. +### Logout in OIDC Backend + +The OpenID Connect backend supports Global Logout proces, which means terminating a user’s session on the IdP and all +RPs that the user currently has an active session for. At the time of authentication, SATOSA maintains the following +session information as part of its storage: + +#### Backend Session +This contains the following: + +1. SID: Retrieved from the user claims, gotten from the OP after a successful authentication flow. +2. Issuer: The Issuer URL of the OP + +Since SID and Issuer uniquely identify a Backend Session, after persisting Backend Session, a new ID (auto-incremented) +is generated, called `backend_sid` which uniquely identifies a Backend Session. + +#### Frontend Session +This contains the following: + +1. Frontend name: Name of the Frontend, which could be of any type, for example OIDC, SAML, etc. +2. Requester: Only stored in the case of OIDC Frontend, and is required at the time of logout for the creation of + Logout Token when logging out an RP. +3. Subject ID: Only stored in the case of OIDC Frontend, and is required at the time of logout for the creation of + Logout Token when logging out an RP. +4. Frontend SID: The value of SATOSA context state `session_id` which uniquely identified the Frontend Session. + +#### Session Map +Since at the time of logout, SATOSA needs to know the information about the Frontend Session associated with the +Backend Session, a Session Map is required to be maintained. This enables SATOSA to logout all the connected Frontend, +irrespective of the type, OIDC, SAML, etc. when the OIDC Backend receives a logout request by an OP. + +This contains the following: + +1. Backend Session ID +2. Frontend Session ID + +In order to enable the OIDC Backend logout functionality, the following flag is required to be set in the +`proxy.conf.yaml` file. + +````yaml +LOGOUT_ENABLED: True +```` + +The default value of `LOGOUT_ENABLED` flag is False. When the logout is not enabled, all the calls to the storage are +mocked and hence none of the session information is persisted in the storage. + +SATOSA provides two types of storage adapters out of the box: + +1. In Memory +2. PostgreSQL + +If the logout is enabled and storage configuration is not defined, by default In Memory storage is used. + +The storage configurations are defined in the `proxy_conf.yaml` file. An example configuration for the storage looks as below: + +```yaml +STORAGE: + type: satosa.storage.StoragePostgreSQL + host: 127.0.0.1 + port: 5432 + db_name: satosa + user: postgres + password: secret +``` + +The following diagram illustrates at what point each of the discussed session storages are being persisted in an +OIDC to OIDC authentication flow. + +### Session Storage in OpenID Connect Frontend <-> Idpy OIDC Backend + +![](images/session-storage.png "Session Storage") + +The OIDC backend supports the following flows of Global Logout: + +1. OP Initiated Logout with Front-Channel Communication +2. OP Initiated Logout with Back-Channel Communication + +In the OIDC Backend configuration, depending on which logout to support, the following needs to be defined for the client: + +````yaml +front_channel_logout_uri: //front-channel-logout +back_channel_logout_uri: //back-channel-logout +```` + +The same URL is required to be defined in the OP when registering this client. + +When the OIDC Backend receives the Front-Channel logout request, after validating the request, it calls the +`logout_callback_func` defined in `SATOSABase` which retrieves all the frontend sessions, and triggers the logout +for them one by one. If the Frontend logout is successful, the Frontend is responsible to delete the Frontend Session +entry. Once all the Frontend sessions are successfully logged out, the Session Map entry is deleted as well, and at +last, the Backend Session is deleted as well by the `_backend_logout_req_finish` in `SATOSABase`. + +The following diagram illustrates a high level flow of OIDC Backend Back-channel logout. + +### OIDC Backend Back-channel Logout + +![](images/oidc-be-backchannel-logout.png "OIDC Backend Back-channel Logout") + +The following diagram illustrates a high level flow of OIDC Backend Front-channel logout. + +### OIDC Backend Front-channel Logout + +![](images/oidc-be-frontchannel-logout.png "OIDC Backend Front-channel Logout") + ### Social login plugins The social login plugins can be used as backends for the proxy, allowing the diff --git a/doc/images/oidc-be-backchannel-logout.png b/doc/images/oidc-be-backchannel-logout.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1c42176ed755122e41e39fa9b1958df8c9052c GIT binary patch literal 358108 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%0D&(4U;<-Zx?xf9^>jy)=on^ePTWvxxzy zUJQZEa~Ym`Z7~4M$vvR=l8}x3wXSWQcAW3Zn@^lo{ep5?;;@JLeJ-NFV29|57ZEq! z;O)Orod+T>I94NBIbhFwBSLn3XJPc)0MNR|#Po6xFm~7~whaM2t`OY#72-JJ$IuV< zE(>&kgK@1N_UKvYi#{Mb(Ob7wtpT`aRueH!h4902=UUD}WCA2`!o72ZOy`nDJH2dM z#*?f?aV#APDx64Jj%L9X*3m~5y*D|X(8J37?A&_E4 zR`YRTG?VGW<(uU@s{@D+w6lYuZwWgz2T@#u6<9)bMtk6P=tI2N@A~PCqkYMIONLPm6@X4uOhsdCs0)zb z!#6pSV}pFwhCY;L^0}XD(mGDLm=a1t_`0$N+z4Mq2Bh9;SvQ=;s^8YMs*TNeMv^q& z?>p2Y0$Zb&m*p9t{Nda2SKqJblrA2gYrW^txi&Lg@X72aE9?owm^Cjw8dlnp<) z2{w#s^;-8jcRYVn*Lav^k%s9yt!Y z=D93m`vG+s_I`he+`D85mmSJ5Hxgg))rWZmV`tq^qs#Sx$&RZKfYb{k90$+ol{z{U z#()L%-aTN~6QW*vk3uBe0DB$%WcYN86`j*H&93fn>^(?qDw4O!JsIx)**KS9u8cm9t>+Ruu%o8Go}wD2#lx_}p-!z~ba)r7l+?UKr_Ks5P^_{si`Rw>ITsVrXjOZqMM1IXoiQ#ej zrv|2!XpZnWO1aCbW?=7JLzP?>=JVVwbyg&*Za!m;@&592j$QRqgG?c>^0_^Di>)E? z*YW%?aw1Nvdgblvk>mHjc?esM6_EXDc?V)@($WYz3Zam^P5koD z*e5sdyoE-RD~u^p$gO0cwHRDIy1dbxEdm`mi~u{+2b6zm?Kus4VtZh4SMsZfWP1_& zT3$skEjMsYBkQ_ZM{*#`@ppmLVI~Rx5Q+j;C=~g(4pA%uUtVa5Q1N^6e5){a8gws( z`Md==H)-Ql&(AhR@qC0tSDh4v7~QET-OO^Y^55x{4}W-OWz>VsP^jhV&r>@;*p?t8 za3Qx{hNTbLSIV)mIr0(#p&!mJ8u8CsZn@|(!`>4OG#59inyEV&1?@dF8&2)Gdbv}t zj$v^1%fB@Z^8chibH@pNK`o3hQuWzp@ueJq%T~DyqKANlMC8wY!45n#d7>-^dAOMScx<* ziKat~I^RuW1^f5!@$%GHOMiE!&pk9r&yHh@*CWSbj!l$XY1BxI%RXifi{DMtUjnOL zL##EtH3LEry;n#@i>5y4U$~ln`st6W14WSP)*F6lk`25@j_}OkSRML(WzzDiINcL9 z6-lhw-y*u!*N1=r%bIruDqs`d)$)ti!TqDB3o%Zg`Hv|F)5Cd&Qr(3>G`cnEV093I zqI=MIUYcAwdBn4qK*~QZ_Vkx$YtTxA)UYjgg8Pa8SFNugHJ^}TFqAHuN#vYT( z4|l%mMw|)LXshv(84qQiOm9Kb52P>~fO=#Ie0HOO95)P(ggRv1xZhQQ7pcC5yi0Gg zZAF>a5*Dv*8d6<<^HKZR$T)LxqV08}!6(^RxH)W+tvyG-A!!>Et3B%%*n94Lqp*{! zJHN@Cl9+vR6&%_nPb?L$|HS;Z48g!WVb6$6tNl5aIjvReVqI|1*mf@xQnoUkg0@!PHWC$>#k2_WmIFjZ3R2Rv(hwGguiy^JpA!3rp%HPb(Dzu*A2R`<;9bDu z+_bR1nEANDcW<^^Z{YVq1s7&l!l$O*H?v|LmKJaD-Fd^kB6oS^xEEf3(m(8QN-k)J zqeLSxW^cSWFG9uR`7V4A=Q95xIx;76OWOv%@%gCQ^YmunJ=YG=ns8lPKV)<+cq4ZC z+pqr*F-}s8kT4s9!kRTJ1pONwD7_?BhSgmR3Wnhfw0MGrzgjsX-nR~Vwo*0)@a4aH z@2qK?3o6!EtZtf7pklQi3BUr!%m<%?p$%|5!Rxj^ONVedq)aBlEe-pfL~E>ob1n>+ zZw7&4DD&R!Q_jbcIbDaxnf0#4w~ZNk$0R25XJR_QVs`SB^iK( zs*um%IKRC~`47kLeiN?@nx~ikv^xly!6t0|84nNuQ|&J#kA=Cfy>R!fQ1E=^^z*VG zsDMSm4+uws`o}KkW0=DbdO<;DTQCI4;j0j`*$6AUgbr)LL5KD4>OfQS|9%qOs>vGp6eUgLUUm5p@*so*kBQf#k;w2!loA3AABK z&R_+kmOn47KBIGsoxLMT_G}c0dx@8qR!D=|llvh{(Lc_huT@%o{?jppB9219(FcGP zjSfH&nEit$DAn$O)qqucl+DqvC`iwf&mlm4dbWSG-!%1;4-<|yeY&*?CXMCPFVrxdN|bf{b*cz^C_>~XiSZ$V~fjnhH; z2)n*^o=KBocswOt%ll0-4kKS^47BJ>;U_3NQ$@N%<;*n#t-Lkr3=HNczk96z#EOD8 z^LbjPd909R4``fR`FkjaVnhze?*I<0`smOA*K+&lq={`rP zl)ynAKBzo(+RqKmjL!r?oa1O9Pj^>>ChuDi%zlB0{^L z%COm6Ad|5Mklqmv79=0#SFF3xWw;*;xq}dZzZyT@J6eW6$t*K|{=Vk{@crC8l$!9GdeIXV2A=>h`I5!J><;QgI49+OUij~JN7LAGk(*kI@G9_ z7!{Ab&O<5pVUlfoko|ual@Ia`b0{mlg8~u&XU3DJpA#BDM{VnLE*Hwa-{F>dqo7C6 zfy1ZC*a!~Gp5~U3tm0YdR(Lg=E;tR|fkQ8KR6L-HC*x98jslrokytgbh zENPd%=T*ZiA#fKm_+MNBi8O1}9uyN!mh2F|o1P8D`ttMw)#9?ou&1DdfJq8S+OF?M zU!mQ^_wj+l3mfApD?%cTh!~MMzeW(ikr-chkQu|B=vq(m%(cUK_@&vdc{np`}-Nh&9*X?W4*veez&!j3q@$60}i zys+{F`7M|}8)L?%{0LCvRoL43m6h#UeLiPb>{=jj0J*hMc~s2z0~t_Lfwz7owXxX1 zR{Cg(Pi+l^WR8ZL(Cg20;~Jr1zt|D}X>lNL0eI^Sy$D1r{v{dw*ZxNp z0mo*@6psmb1*@V(QoY>Qm5@%lhkNkB*OD8YUz2722!R7YZ~W1Nm?{sy1&jL7J=mOe zUwcqZ?g0jIFHZ!ceDica#5ZtL_?fs3<>k{m0{DIuWiS>N zmWfK7^5sozl>yXQ^5?BNty*? z;sUYbZmz%fCN)c6lCVr#>Y2kx1?x@01fRIrhWb&m|AGPCk>jhc@7bmE?nPXA0W3#j zRp-2`wf%aCK7mkw8uPy2`lh4@gQ%WYA5nS!W#wN4W!@a@kAeK>Ti;0&>llZr>y|{pYuYvx1+vF!E_!Qv zE2JXI6HOuN%x8~R#jUJ)qJYUL5vZ~?shAWKT$|c)!vB{h^IJ$?V3_@$UIEfC1`Jy4 zbTjML&KAfxxe!YwCVY94<(05itkpEj<;eygvUF~C`&`j0mnSDeY_TX)St-xEuM{{o zwn_3u`MABi1);m5Q4Zjd`68fsqqU{*_quZq=K2ZN*Hmja;&P$(2penZ*f$=K{q<3-0eimiuz-X7RXpoRoqzKI?ZfcGlx3stl@D%hT zxqWP0HpKL3?ZVkF!8*xe?caWG3iC0ySZ9K7>o-Z}`Af6>_Jx}I(c@NRNpaba@F1}L zt$fs~hg&-J<&OnzuYhhID14vs zg|Lw6@%GS-q*G;j-;+p5e|mg}YV1WqJ?Ye2xaRb8=``ypim`K>(QsN3{|Wo1Pl!bH z<-{GTIyXR7g>gpDURiU!ASjgI|8oz{QPL!J)kndEmu_As%mbH>!n%fNe`m7mn#@{a zvaeGYMr#?LanRg6>G@dZNtA)K)V_ncW2q{h>Yras=-^#$JMT2rPPZ7!zb-ZA_70?6 z{@fQY@c*R+&`78E!R5eu`i5}X&4v86N4e{<@K|0&Z!jv~`l{Uij_u%5A-i$^QrRx> zJ_=Zw?qHd7Z&;@$(7`AuaJVU~`b0D|obETa}R5PQ_}R!~oy0OtqMxTU3KCQ_*riyh}Bx8PHb+a)#5P8Oz1 zW|7fvo34+@7T5)j;;ZYDvPCqC50Us~sTyb8@Y)foqEdN(dyfhz*S2L_J-~)ClzLoZ zb$a=R5{c$^s1T!tsKKaOn_&{Jis0j?XS8dr#TXS!6wdwX{}cRsDfnkkz=yjp_`XD3 zt;crDRE(i52EKF#X^blrA<>8Jqe&PZOZXX9|MU#@`$@Rs`s~r3W>#JFF^a)pF z6cZ^{fgAV$_h}fWFWrX5#&OD#T+ipN=zee4Ev^2?GTnF$vd&KR`1OAa~lr9Ye}xW5RD&wBrDJ- zGLmeKLZa02(j8FjH(z(?!d9X!_isiPDptK0{>?Jp8QIxRUTaV(%#RNP-@@ZKHrVr> z$yUqN{v|hO6>G~Ncg1+dg2irSvUEw^@g)Mv7_!!-eCa=M{+Gz(CegL`R?Dtn<)>2fkGKB`USIcB zP-L`zu}!Vh@QYK1g$qnUs#l&tHTo^ds-5Y=#_bXkt<)Brlbfh48&Fc&!L|r+^?wr>d!eFp87zLR!euYzrvynzqf?ozgA{P8GMOUvnSwaD znxyR#jTwS4DeIP-s6;&g!f@DQEYVNVvu951L_xt$4EODGZ@Q;-Fv;X4oxVwGsu6=5 zqZBVnbpf`dg_GD-NL4eudUtuhL;zXH;fAyj|F5h}&vzu%>dnh&(oa%ZJhba|v;^Vz zeei|WKX=(E$*_@OauE7H7rrYBR$4)zOy8oBp-|MVKYNTnFR>r_Er6NkBf>4Z2lPuG zj8-po{oU0cy0-&;O)esIw4c=$0f&d?5eA<-N?!sL^)@fPkKr4FT9L~Iky^#>TyPMP(;|` z{Ami(9oW3ix!ot3&N)E~QVfQ=$j0OQAL%!UWe{db5`mA6=dm#j`g$LkV*pH|bmfsAbfKa1>tg4pi=oS?*a_=f3J@yZX3JlO?fRrANczj6?!}%OJsy0lo zQ2vw^;Vy(wgzGaDTmh2|ePzWfYk0E?(STI2T3rAEM;_u(he_&nfquCM z!)t3B*}7kl&3FdA3|EupD8&L(W{1^lx%Kq$cR zHbj#HbOU7JcPd=}>FvBT3k@5$)0}QdZ>9(8NKmlm+(ZnYLoS4f_Ck^fW!+NZ+7H8vdjpg;umD4@tj4nUgPscON24pA~e4 z&2Ldr4HnW$I4FapW_9FDWvuCrdVqElrOkjVf}BItQmVCwi)e+X-|P~(u=^*lm6yMX ze}hlyCvkLS{1)No*t^E8Cr)~Lz&kNYa?mDtdK{K!&YxiM-TFcB-ULImK4z6`cAVVg zR&V$^<3cHnmFN;6WvijD)KYHuJVMd+uHnk0><7eqrZbBPGr#`n4)<$6uq);&^kq)W zH@(VLnA9y*E6qt`yQhvOmAs0}CgCr}-7J|yqu_9e>3e~`z14Yb!-Nr+l1KCW(e2{; zQ(qoX1tI$JEh3E3&m#h<+8SUT33_kpM5(keX=hj>cc5>TZmhDfw2XO^hEYnC+lAbQ zP|uA<-$Fw$`k^l}MckY0vv!d1FbGXkl1{+X@uahDD>4$$;-wUcmB9&n#`|~<)ccLdC_P)q#p1qor;|65GGpYGD#AB1j}#e zq58Rp;d+iXAI&NJll7r&oq;>@5k-*3i9Q*3NVVta(X|WA1agH{Mpt>Ngh72D5S)dC zskw;#&KY)lM?{P$|>goLj1*ocj7JB+FYTg=yp>C1Gq=XJ=8YBBTWgPQTW{7N*iVM8dSlA%{dL|rv& z`Kq2FSlPfsn%ph>2ildTFrG6;o>=7UvWkL^+wXzL3>DMBi!aqrkNEnxHK21{WTf|0Arjd25A@U7DnY5&{|e z79fB)A6bN(n8HJ-im^BQ1ypRTS5l|p$o;Q#(epYo%W5@16KrFvQ1hG8Q;x~$l>&`= z>pUD+#1)bO=YEPe#W8Vc1rHIK(HT8MT}(m&orMS3wX=FNA~Bu(B0O(p#mX9mJz%lX z7Q0vYTAM_3O~zZJt?NO&%E}S|G5s)?YoclZNkQ~oX2(i2X&<(duxC0ygRD?KMj}0i z6JCX|gZ2Y>Gw*Fv01}EWoC>1st}3}GoJ#4VI0ODQ$m*x}t5l_dkxbw=bkVVOCr-1! zzLm+&sIK-=Ulr>m$74G`v1v6Cq-u zJb1l@E;c6xcM}@=l;>pO>nzkd!J9;X!upLM8Nf+w0z!o+6FQ&RUpkGmNz?>64EMun zB!dSmWVUDswU}g8p5ETk9kF3$atiI1XqyuaiOX;a!$`@>YWAD(9|`ZxUS=YiVZ_TC$9qs`0AU8jM7`!94&jJscHn8}7f}S|irF zNVv?|7e`$qdBGtR?O=1oC{{VaN1%r^6`q4P6Q1At(;>kIF4fep361|Ue|F%&ohoDO&C!@pZYnIcp9&hkl9i0-CB zna_P6vG+EL1w@}?)4MnVPGS^8^)ylAm%e`_!9<|_mVD=ru?gHlHFnR=P=2tDeFy|$ z;aE<%S$gymkt)`yb3bf{S$=C_r297vyR8i&?x!f9u0;Ro1G?>4$A0sy-ZXL7B#vP0 zj4$aZ2$@O#MU|5t!yN%;Q3KxJTtZ0?Blw-N8tk$|nVGYgf4YMOEh^lWVg3G4Vj#BP zN2n-Dqn<1dSdP*Vq^XChZ#2_cSmH6iNQ>TpRGJU`r{j{BMMU*HeQ1_ZoM!l(w%qoAfZvW4rqbHuBbS_GvZ&do!mZp-+ojfe;)Md86>t))q(P7gc0)|K z=jLD|VnN+-ER>s?2ykgQ8xaTWI3B zOXNL&#*J4c9d)8!GCMYX{PC_%+xLC~Lg59aa(llK8PRv9D1eAH=_NN&=o5pfz)+v0 z`0k+79PHiZN5oxRA$uhz3Ca{y5vkj_`+(dd&a-s{+~{DJ@E z#A(~$O=gvhCafk^$5*iygUr`5M?FPQoc+eX#QPBFh0sdu z%{u++Mpg}g9uE4XTZBsWG)dtqWNFZ0oe^}T6e4==BaW3r{aE;0joK*^40GWBZ4M@4 zKK=}oq93x+OgqN-Ksjz-0`d2snaK4UxEK zZ@hFlz$?uUZpo!d2J0b?*mE$a;$_alIX+AQ@KZ=8n9{F2Dp}9#88=F<}J8 zzB*X^=0V$6t9SFo#k)J3%l?g?FxZQr_T}g0em+Yh69AAGOM}zVmxQ8QX?&u2R7U2A z2P>04-!qXq6vg=B4c7im5eYcBgqOiLIMn`!Tlpvah*x<l$% z-B3Etd$YVwNsu-!l;2`jx_C5xC4vKUMB?#%pNDq(X>>IdugvXLf{o!z9@sE9WBhC!IG=Z=kV(#EeX(96% zFufg2-pi`{>*3$G0{-8BtvSzMVD(bWvW_^v|5yL|@Bi^n&}X46$v25NU*?p%J)*1q zBzGKRfksJ3$8^P{yF6L%(}`v?c%Jjvf0};8)Da8b+2(B&fM|(V@kH7i=H< zz!DavKmD(n9bIfsTmo2*$K%3(2CuBF>?gZHx{*0dbhh=-NJB$DP~feM;M)m$Uy=2w zqZKkicLZZ_zkhy9_ST#M(bDY6Ml}1+oZ#qR+W_HZQn*p~Fww*o6oKtBSNsjNhbX3M zytK_!RQN)ay$6p`EdkPvSi@PI2Xj_9dHy)-uS_Ps?1#zEhL8#V2C>5s@z){X@@8)l zSq7>{dPtwD_M^LdZq55R=|(AGz2w8rY|Ok^!`jVbVPPwn1=G`Ae+YDkMs}jb6EYgtPwXc_#~H$YLwcj-$^M2BhkLN^ zWs7~gD@7p10Ug*#?n2lRSHNhZFiUI;T`_l{UhD(rQ#tpi1k)rNAR&&BAXaqROC}$H z7i|y-&8DSiF>j5^j>#td<{^%=6=sWyPg_~5RhGOk#+^x$qxg3KHq;9iC)4|O$U6)Q z76}y_M1hLEAMPN1e;?$upF8g`=Hda+tL{5%UL7H?U63+a0=(@~=W{kJ4$*P_NQ?!n zeX;C{%3SiY5Z{GAbquk+5MiS+_pP-5Xwsh~m6a$QrQ+D|CMD(Fi*>6RuI{Yt9?|F6yP|z@y7MNS9FNx142w0DXJKPHFyxc;6$)Q`XdAlC+`hI z%c<*6;#X;b1{lQvZHlA}Xa?U5XhCg)KbS___&|$fJ{K8B=~u+;x(Q16#-0|?9K?Js zK{Ir}WR&O!kMayYc!Cs7NL|oZeb&J0#xuMEC@%-b&V`>7xc&KYwD0@%>7;Od3y|OC z0orWHsu#Gc5WGxo^}!S6v}Lhb3z=~mJ|)$7z;%2%MH^Js*Qa6u9BezI`#^L6rtIiO zQsgK%tY%o zGNa+O{v&fFUmbi1fUs)#90P=%FMSuo+>yIWH0@(W^R2BW)P1jZ4UOvg*bG>YwT|1$ z>s3(4G*0MfPv;sJE3O;q1?e8~Jc0e^bbyNp@JBF9r;sx7AXVG!uovA3fFt%G6Mq}$ z9r4Hup-nReql-4b+7x`}3vZldI42trcJ94nBm1{rcyv~vS}7rRp8owiBRRRoZw&Cr z*i!mQNwHkpTe2c@vy#erAlS2k!R53>vY*1^vgzYhpWa>yZ0#BM;>KEbm1xBp?Oun+ zcd~Tzclti`hpY-XzC?xiprK)?N*}v4$r2biUJjD=>p5F!Km~%((Z~>kzPDl48K6n% zO^<`1y1SWR%j6{&QuTIcb-a$qK*lt~ME|UCsw<8%Lw0QvXN%d5qMmJwNIam^eWp{m zWxJ51TNBlg~#Rh9aM<7#_{534n zrS6*UNXx7#s}G&+4ZSC(KROnk;>mQ{5klj|?DQGn43Q!JL0;5;=EnvB;|nmhUH>aw zyAGU|``vJ!&^ZAu+0eeKV39O}H6T+yzl0T|Zf6a$0PpJRy{>6`6|^ zs(O69`$5<>hpC5CV6lO{nJQt!Wg3GQbS`6Z#pi8U!>zAgyKvNuCS=l?L0|pFxmYg; z0x;X4)$thStd=93<$D@zeQ|{Kj3IHMbm5kUzVn!~P+t(6^qYHTu4MLUY*U@S+Zqfi zRci9&l6=$&@@dGFv@-ZPYA;H-#r+N2N9u{n*& zEdBWY51ICfJ_5$KaFZYUEFaVmbuh$q|0ZW&l6;xt4z+e0Az0Ej zxc7>NUK3e_mb^TFDIi&TCD9-b?=Kv*l?}fq9$fuX>;utP^-mgJrbUzzt5{bGVpVW9 zE0;(s%YluX5EoJpy>fGZh|&<`P8q{-z16eywWZ!T!!vFV2~**WwFWIyBLC5#`_Hvo zd(M$0u@VXl2+-nMUXn03p^d}3GT>Icsls=MPe4eJEhO+OgDe`E0-kFJa(X_`xa3ep zfOt&&f8&Go&{SwS>CAHC8%aK)NO9Idm7UAs1+SjpPj+$qFvrm+PVUc~k0Qok;dAQz2zQrP2w!nPpe2=(Gzb7RUkSDNh%CT%QO)@dYyU`x3C%1jF+dffQ+G7>f%C+zVjBZ?W!_XcQ=pfv>UFw~;0-SFb;tq^FFz0(i@Om15Fo z(7`-u=y)qDoJ6$zWJ1=gyQrf8j*`KffXOb}u(a##W#)^DTEv3U7G{U{gKu%>`ee)g z!aFAF0Vje(>hpZ(ML;;m!tP0)l3|)Oje6GJn-2hct#;km+1n-T#!=5* zZ!vgYqtAR6H|6A~p!+U)P&p7M<`iyhQLVAnVKUx-7V5Q6;Q(h1ErL0ez5yaP2sfu_ zrb(}4s_`RW|;cYU7#ZflO1}_rbQH^S^VbtD6^viIW zODW|9kwdh?FU{sXz;gO$)>}MwM{(buU~=aWWEr@{RVdP`X+eS$$!wDTB@-|uMV6$v zSnG>O1e6H}25U<>P4bi1v*o&OsRW|J4+|CEdG82@rEcqe@c=J8GMTT!f-CmG*FL!L z_i+Z3+I7`zNKMj;}A;iHq=`DGmlp159e-}&Y7^O|&Vz)Q=&cXxfrm5&`r;gHxc zB){K9P^ri5PNl@^?pjFXJ5IHC{cg%|lP~ocYt{TskyNGBXl^0qnoNW7CalE;`o~Zc<0};EtCV*U3+%qr}yw7D{umYl@GJv`q391(#{=K3u^ zb}=eW5GM@(@8X1=pl^VodmhJw9bf9KjXUsPr8E(e6wdi5&9w0D$1F6cFvQmt{K-Ys zvYj9S$dS$KfROGrC!&TzsQ1opWSv>Q^wSxtH7*>R)E%jr@S=3Fe5mcqWf|-~AH^z~ z2D+TP=jB^v9UV*NkqspNP54xNElEQ8yMMDFh%ICO?10X?IFy-aaplz5jqu6r?fw!I z@clCLjWq*H|MT~$_f*;K4Q6>X19@a*>9~)RaW^Sl|9Dz|s5~)8@)-u81)aomlBX9H zKFj}$<_)}o3H=3k5+|o0G&mZtmWMX1w{NtAe$rHiDd{vb&II&DtYa_y^Xk9FJ{-a6 zkj9Vspmb8fz`KJtX*tcqx0Ah?OXuTKy4v1hq$@@$VTN+W@ zw}A7b{<3qxWhwM(lsn-J*W0lEv<;RxQ}Fccy%7~1Mt`m2N?o+Is5@GPFKFg@di>0- z&&hHTBQ)_(+)3hD3H3KJRktDl877_y`>suXl<2*B?J5|foSv%EtqX#Um(}`3mFw7; zrf9EjByI$=m!{n|h+3^sXjXAMTgfEN+Qgk_7slTv$)AKknq(y2o&~Y1lc6&+xgh5S zww)N<_q$LWaD#w?ffa0ZJrV>w7VmPubpObsP3F1QjkMMZf-7ogo7_-W^rQ001vcvs zzOmeRUkK+TdZk)J_3ndwn@5=ROjn+!wmDso;tfY7@%)5N<8Y)gkLfLfnrqhUBQEmBpD~9Od@qv@U+x3Ne%Uj}@$>u4>qr#>}1L zvwwg0ih+thlf>e*=}59iI3+yCD4qJHx7we$-mD$N7eH=X?wwSJlupHd3YKbtUp+AW z^1-TVBz+8(d0%eQSpAjn1qmBQmYWw|-IFWHrjD9)YJ_%Xn)?)&d(3c~PhW_lpf!0x z-yZ`I7@GW=F5Vrk<-X^R=V?m-l@dj$^9cl4aOv_DE}z=(@)rQm*+0a?h15h}eCIH# z5+Zz~uVeZu(bA%S$FiR&jI@q|^ZG`@g_acvTaqpuDZ4=>21`y7J0y!r z=_nu;xFQq5`^SM&!2#f*nYqP&6^LP~Kfo{#pz<%FBn*#!(89t(x1UI&GCaWzT1sSv zFrIw`Q(Nx^2;~>CE9ZZt$x!dSRwr+67RoH0!sBWYw)o9n!p4Ed4A|+n;mnN;{8u&q zjeHy+9E|vY!Yw`+X9B>55RhE|pN!WfRGYCXx=IZc^!5_dqR-Y+5GsS_gi11dEq zrce_0D<0B@s_tuu*-uKvwUDE=dE0d@1(;*=IC~;-^MW(lX7Lte%y<7Ack#qT^y>Kz zz!-5B^^#wSAW5aheUsUacZ15JN@Hg8jZy$|a;WsqMU?&NKQhM8THpq8WiNIjF@(P1tKrdTyZi8T;UZ z{}bR$z}W{lkM6XqPxpLu;=&KfLBQqJ^79Y8XhCNZVkAF)kmaFa+Pwc{g8U8vEI0RK zB5`P9yJjHMIc#XSpFReG%5_g+%s-|cR!wpt5JnX(SIWV%|E-LWzk?vCp!@3&XcIpq zebysj#7DU5oamIwT&O9g01|cqRU9+`WPngh7e z%WwZIo@&BhlF|S{hU+8`K}82fl}~@wy3Il)@_$TLINEL@H1%>*O&s+PIsj8Y zU2`#H2oz@M&X;Q>24GzARMWKsC>65tk@S;r*-rbEE+)K)BCTv##z=i94pX;ZRxw_0 zlN10@ec=OfqPGY={H^OhfaR$$A;@O72gPrb5fcja6k!whR^+p~UeFSH6N3@EQjKl~1Y!L+TOj0pvd|RtfZ>nTqxC$~6Q(78 zkUpUhEgeCyk5H1p9YeCBT2WWVNTsSrKQypIqd)&i&o1yIrYtNZFNj#n*nA|tZBiNg z)8qc+{9>6v!-tRkGGM@P9Bjot3LNNWiotPdp1Pe~B zfcrkLDu^D6oX7dmV(i_NNTq}UyA+W~lI;GX_WetExduw`9KFC(gC{XAWtCPYD@0gb z;IrbpUykt0y^GuDch?wqS^b4v L1ewm}Ju=17QviRubb--S7)x(Dnj#d-XdH* z#MR(Neay(6_G2*P#Ns+Jmt{3G4ZaU2xs&Xm{esaSK0@N> z=s5EwU^ya0&*5P%0?gV>d@lR|*-tn?aA1(#GL4Dt0@5Y1xv*gppB4g8Z#O6%CY^H{p4#HjOm$pad-GJjSI1 zst65uLz)WbeX2-{VDO};3NdVMsW=_NK%I~xs)$BfxJv}|lP6fNp1>wifC}O||J;5a zmFF+8|D!EBF7{JcLx3U5(kV>7`-9-m3v@gTpYIyQ8Ev^p9-GSG1)x2li4oEM6%Y^} zLfobcKc#MpTRyo*r9_1BZjcE_gAWq1WS}4Lf%mS#AMPHD&s(e;R7CJ5N?mQoIbb-v z51xVdb(W65?eu@GU)W%bV3{cvx3Qh}EDf(Vr`+{^8UHe3hyGV0)78f{(8`#Z$`uXX0>4M&%vFLlI; z|LI;vp?g`5L@0&)oTWtvTfWL%)lfhHC5Ar1kEqI%oGzTw+kND!oNe9^#=y||K@N=4 z@DOqTLhZ=lkYzNZdq9j?Fa9{8$QYyPE?hRKo4kP#f zddEM(?n=o~jISP4w)B9Wf&~MFLfvme`Ezo~pFDm167$jWr1@ygkY1On0XR~vk*gHx zp!l5TtdQKq8j5dqL6Z}j=MgmJ!>{;ML=EnMa`0h}vJ}SQtEjjFb^@X^^mbCLNBu|W zdkPy*VMt#hcy`|h@d)Lczgb+siaP^Y2p<5;?0_`FyJvMD?Dx0QoH$ENULq9R#lBNE zENBWASM)>T!=t43$zM-K;5BBrSX@4=ZrO(LVG#09VppwPT0og!2(kyWttou6oxR8; zQ#a4otTR&E3>y70O~4gb6v2J=4#~`{(m9yKzkVT<-jtO8-hnR? z-Lh-qin*>oCss`K1toj|v8SWo36ejS4&fxF@;V$ri;GB*t8s>FcoW20m0M zN#t!#i>|AHdaI_9I~WD6k@bPI`Fdi;=-9u1qzF16-LG0KpPL>?Ig5&KHD3{H>zJ-6 zEf5-66xKT-^I=0JLHnMgbYsd^t869zL`CAuxYp3Q(U zN(z5Ec9QNv1YOybGpG&Yk)4{(MHdXCLq0M|s&iG8fvXCh35J)#Jc8ADOzKrVdTl7=i%{1 zqY*<{Y&hBV_~npM(g!HlEKQlyfHjY*ki|}^_#(_8D_SNa;vwH37IpdpU*`%^YZj}~ zF;60Tp~Ob&{UA_`dT%WS@BaAg$y%|C1n3aTQ;6Jq_GCYiQhl@-UOYXEmvI03c6N~6 z9Dz{!WsmxhS6AG1#RV)-#f*b!q!i9v{eb&i@kB}BbBQxrRrc*7=8r>}e?{9h+gyfa zuK7*Ec{eQWW@=#Q>l?Gco!PFjxCM^q^cp_zgST^zCIn=Xv962KJWda_S{8B}?xx%fB-31M+ODh{cp5T|5 zN(=P($hZ36Nf#m`ljW8SHMjuL3@B0*O|l+(2;8Zi=`)zk*NePx=X|rb<$CJ$`R>F` z3`66tp{g1(%MPI33~N*c@EwJSf{Vqzf6H$N37TiN+axLbpeE;;&wox+RB*=uqMCYP zTKNyxv4Q&)4h*WDnzvee3ewEuC#0?mfy_2-xF;Dbq%~>9Ff@v%5WGSqh68;w>6=Hj zJ?eS(05H}D+n?TPoSavI`5InnOf(X4^2DyxX=H}9nU?_7xJ>`v@YzUpT~ByJ|oq5T5^&_@R>L_&IHj}x?Ls)gsWQ@6cl7lW_wraIrdfK zbcE2$+urSV+uND<0Ox0YP3&YZp4nW{Qu*O|{m?Ws5VsyFNP{rU?-DS@Z0uSsFQ_WfUky#-X3-O@j- zcq5@A-74Lo(tn<=PQeuBcRoZ-FpmCloy zT+ch5#`+EM29G;d?x!L`DfV!URLd?xB2KU0zzZlnzNv;!>=Dja1I_kBF*$x)FV=1V z{;Qab=6i6xXT0%5lY$Hp$s-^kBDzetso{o3bmz8RDgUB7R;`yzjxa#iALRq^VHB$& zAOwd`3fBrS<#}BN(3WT3-2t?=efW5mX3E`Dh|gUh)5W`8vr1!*rE6P3d(jkW0g3o# zfsf)%*ebT~eMl`wz&^-W-Qq^E#Yn$@y>lZ7R8FE?E#~Zi$))c+pPuk*2Dqj+!jvI zxN|gvF$G28c0je#_lJe~ymfSu@>d6p)J^3Ns#Ag)EWCZxy%WK}Zl&)TuX0~uZiTKZ z%hx7*L&#IYR};lC@AAKJf8WnNpsN-%echKSPqt2w85?Kg&*%jAq7YnYjtQ#%tVMNEAmZY-gP`=)GkL)%%>8(cNyU&{Uwb z(|xhx)V|MEi22xqVq3-pLSsy1P~rB-NH372UE;-iXgTMT$$BII1;B`OglI zc2%=XX7ybP7!?K~h}mG)D`EzG%rshzG=%dx?OwDY{B=@UW}|X^bb^l)Obfw?nYm7z zf(Xi#XnE>X0^;Eq6}ed7-M&t>h7P7dUhY@sZC4Xh@(J+qN9c>?B?lOut1-76MdC}n zW3p?d;tvm7CfjuaI$iu(eCLuUDde~Tr58=v9v6w41OdYK0;NUO9Jg=JQJNY42GQ3% zrcH#5T=96HFc=zG3b9c46F4Am2yU?ne^yy#tTPjny zil`E#i~Msh#U(()?~VLGpZu1|MT$ll&|>L>^JA4|^7(J}znkJ$6TMF0c&RPIS(1{^ z%@yE-b8Z*^{z!=#A17L^ikQJpbxCY^9uFOd+|*aBQ`1i`ss&|)x}v*{(Vo_^RW}G& zxPyH~Djj$(seQe{%Bt<43}jpJtz;*4bUjNtEK^zP>*Z1LzgU2m?*bB4-+%oDr=3Ji zj8c~-T?s$Sm|8T4-srO23z|=Q^Y@FLUI*j)7gv}UaT-5hjJTI?ViCeDe;Zul>@3k_SXRog*|9B+Ob_PQTYAUC{StT z@i)2dHy4D{!{iRCam@qLuy+kpd&ThgOHQj{i`Bv$e8o|UU&I|w!?UqUq`>CUcykP} zMJ`jI4G+B|)h+0D&?f{Li&JSL%_9bF|46|K{2wc$Lt7}EBoU+*t>BrXtwF6SXzbk%w%*484upf z?HdAlIR$5Z6(gPye}=w>)zm<>L5}R@a3nEP^K_n!jnsSjv`GFeVMgKWEznn<=0(vN zWhq;Hf#0M0zMcD(!ldI_;dU;@7WB+*ob^*O|l;*GJF%+n$6FPa^O zN!4G^o0`ZvG2T9>+<1~J))@W_f!@Hy+i&aT!wp$RQPt5jotPalDuKUiIj4aY*LpF3 zFG^ZRJj>@^3DvtDDE*cJH|a3IG+v4w$r7jSR7{Ur_~3f?ZEE?1?)CyF(mpem8(eWE%!jsTU~Py4SL z(wx>r_m0Y<)9DqW4>-$svG{&!)il0JgZhs?lXJnGxCcb@Il-tQxd+iPS$&N7l~Ln* zn`nKr(#ai#B*`wr7Ii**Uo;5INK0cIQzJ!(?q;QMGC-MC{j14ZvSe44!!ePj0`7*n zATK)fA!&6Ma8agLAG;!wpYu`R>O6%#Xj&v1L@&fTsgJh{u0hH$I;;e^&lp2kzh@6e z3(03VM+K;AH9QL25QEcxS)RSP#)^&`i~N^cX*rX7D5pAiw-kOy#T-H5*Df!R9(>Jz z(lF~4%iN;R^MFZ~#PI%@9>aNZ3kDPq9g^UKk`{h^%Ea1<=utOOWL^$+m9-atD4kx? zb5`SN5p}e2)OuW6RfJrNABem|BjMwfKb6`cRB8v>HD9S?*D@$^4A;m(rBzk)z4B_E|rv@nz|2n6`Nx|%)b zJiYQNiR^x{wBV{YyvoYvs8Shm2Ks4GP*o9}=2 z6*#SoxA8#<@7Q=*em3=x?oQS>Pn#c$`iTlE0VMv;ET&mZW>^Oc>RYVsfhgCpH*50y z15cxx4A9b3U85rOeng+j89lhbb5p$&ly7Fziy83Ad5n0Z*s~vJ*tp6IeciUB5q0Rc zCDP8-kYUjp1^q2P>g?yNNHTBt6 zo_xC-ruaQPycSnmj9M!$TV`3Lv|~%X#IQ%VIk2ENP&G|N42hw}e*kiJ_6=dvtfmMY znAM22K(jOYW9|ifJz8o5k9_;oVi^Ev+EC!Eiw$WDOxXw5KgQ}G##CP*&OPTp5f{jN zE^BC@*n~kVFs-t(=XQ1Et32amDDq?5XF6UepMUj zrDgWa6vT-`YIg_TN^^iYPj&B3xv5X{+1*%oM<%!EebHJgv^`T=g<7-XZgqBc=G8RQ zi5C8oZt}N3H$>MyXsNI1zYG$dN4*{BuV8*@!#MxS$Q{>D#48OrWHfW~+`SUXi%oTZr5BHbv=RZYwcBPg6pE zl05HhUeM{|2E`-@+954ZA-4$Cf97-0rki4&V->%Px7g}(N%FH9ZfixJcV>XmoxC00 z_|&n^8;dz-IW?#9)u!kwb~?laR-+~}UNfA&jW<@on;4*yEVo8je0Z>D9GrE>>we-x z8Pi`41CgzA@3^k>5M{ap_xK!dky7p4mhsy-a&*Tp!T&TOs4(D|6%d`o|L2$ulSG5G z4nzL}d6zf3gJR*gr>|+Y;--JXT(4vdC$i0QM?<*ptiQ82IOIZY;7)q`D241k8&-y; zr>i0lUh#a!xCi$?Z>Pe6un2mfx5*U!V2u)!P&}oyv|~ZGLLKwQ3iJ|N6{wiU&%-Cy zv32V=T#XXcsc1kX@uIDSam!lGu`iRH_Db6>!j58bJVYkj*ga?CmGG!i&tay~|Aa!k zoMs@4Q?=z)B#*AFuMj9hLR;mf#Gh`Lfg7}y6Q)}fUdljARJNGK)?4)YpDivDOT6iF zM|RD)Hn(}n4K)6K5AA-rbo_d?ldh6Ea2fz_?srJTH$J~3oz7qjtMt_qFY9H)O+*9X}`nZ6x4rd!+fmHPJ8Mj z0%8I`P234&yhZjb#Ee!2LHuy_^2hy?F(`~wAXbEhPpmMIR|?TxHS1?v1ixgsGZYh!8pBqd1dUyaAqs$8W9*90%LK!~Y+P zAH)AeaZpSF@n`5bAkMP9kv>(wuB~DvP^Ha51}GOB?09|Zhk-HPNEgOu)}Mnf!L%KV zm;r*-wM{rQq<_x>UhG(w<0ah@&R#!r z>}vv|%74Z~SK`rIL?e`8Jha1WBPnvEo+Yue?0ory5=9dN~ z57?SM7QcQ1au6Rph(WtE;fet8`4C5V+nO3el3kiPga*Ds*8&=)(ZmlxK;S9-+GSel z;FKe)wBb{|t9%x|xiDu9=j!Zxjs0{B8iqJP>^`f^;R6~!>AghDBV}cX%nR?}y=R5N zWeFG8#mbpLa}hB&IfeFbB@t!IpOOd}t0;y?3d)vo|9U10SnoZfurSWoy5TAC%S(ob z?~XtVDBH3yAPc%5Zp$EPp_Eg8TW)R`Q((e}ASZ9-=$m$wsVesF*Zm7sApbH9D{BSx zYU#Uu;A&dn0HT8aqm)s&8=$$)hY0dz^NNeuG~+pD7>?g?O2a%zVa_@N0DmELPNnvX z7v}Qf2CVII4Nn9?z7w2W_=KIfZU0)zP}!i}r>+ITb`HHp@Y9&^d1DII=7cq9&$H~J(|l6!KNZ=wP4?4j_`IVcrY$MO}PnFkz@A+ z?#uXbjzDb`1l;%%jLseK+CZx_n>pYqAZ|)Q>Az=TadB)DWF{gIc0ov`l2iun8eFQ3 z5KLSkZxUEBFkh+aiDue0IDCWHJq$x}X3@q`nInHLtp-sQ+bV)vP5ZSmt;4Tc}rfL6)n$R^#2yE>bo{lY^;SW84R(Gv$`9Fa=`|JeuFu6(!~7s37- zqHQa|qF>*|!qFfM=T_+o=vX5DBA`5if!y7LFA4S|EQ5jInG`|}M0SP;aO9iR9dVj) zGlq-O)c8VQGn23@pwkw3e;~GbW%g_p0njtbTevE_PK21;-*S zvQ_l2M0mCz@90?YAbJ-GRxB?;QqYW6i9&eTZv>2Aif#rZ|C61)vVe4N@O9?C_208s zgY`648A77bv;Kr`>4(4m?9K)6L+FfK7`SalF+cK8ji#q6HR){(=F2o;T;Gg>_HgGh zSQg|FqccXKy$WNWU%FW&ScUlZ^jcZ6Poqv9fS^%_OG2s_5fR&I)zPS09S_C=jpw%; z^k^1fs~dyX$Lldb>pOsHu|W52w0z0?iF09L?8z^~U}m6GS2_$7nX&PF+EozWdj3>Z1ZIGzj2*VBKt=wk!(TN>wJ30h(-e$JEV`OWz^e96Z{u5DZXV?W=A+i<5*&+~ zhE+a0@C(|Do!)NJim1seR=lY_$NSMPS;@8QAFu(a6a!Q_hwo%`qM5MVGDwYU27`M4 zk{wbZR25B%m9IB6&KH_NC+Px#e?q{iZ@{%0eL&YI@AK+0IcBWf6S~)`?yueH4i^O`f~m0D z@YCrT-tqcZ3oaK&5QNdI%~HJ1KkNyX>Ylq0Y!Hu+FG??o!HBUABG50&nVk)~*GvOG zM2qG)6Tl##Jh1Riq)Rz4Vw7Pz0&uBG%K`s0{%x`KIu_*!`W*oD_Ynrc$j9!RV)Zq< zVWPU~>RibwoY!pi(RB$Dj00$P&Fq#B>NXuUH6C-8ktk?xS1yZA~Cuf{4#^ zq-vW;&1HMypqBXhHKi#QcXQ3$@hC#R{=DO~9vzJ7^qI+>oNLrE?E`QD*7SyXP@1w9?GPS}#d?u|5jl?QMCM z@+e+sfgxa}_uvNNaQ;&)eWcqrBT~DG$XMnrq2z9Ln&JC(X^RDP z#dwwB_dPtZE9zO7EO7R>e}slanHM5*4IFBGchNj>XRX%^$KDYT4u5HFq#iJ!x-TX| z`U2%_@e;)zk&?feZ6|xfBCNRasEMIH^$W&v^&IdQ_D3yDTJ;C$1CUWQg0~)+qEsws z6IQ-d#!s~dr9p7r&ScMDtxFR-iHgzrY2Un$!hukH3g>BEX3Iz=sqi0SKJJ-7J^P`# z;)wOV0ed&VM^k@O0Uolxt%(g`K|TRyK$zx@1YPwN=p7B?cD0~M9kN!3qQ+syIdW59 zyu@dMYB`){v*dn69=i9T$KkIld>mu66L(D<`{?HQxXaAN9jwtL9r{hkOORgRn+sG@ z6RhO=nL&{(a?G|sNhqr_kI93hVqifdz*Kk?>N|#-UG;c6XnSB=uqLV?8r-ZczN&!S4xO;9*}jMQ|B1sQn)-{wLNHLrrgxH3RAYP+ zT7$`eZ6Kh_&SkRH_@yi-qKdierNVrlmr0y_Mm-~iQ|yjvPnJi@9TqW>k?p9%*&wbC zYeqD0@8V3n-Q5bM>r9(+U5Mm|(`&R^u@5O%lT-R7!j5z)&dI%aGiN`&!YK(1hiAL$ z!j9>Ys-|RLZw^9LIQHhVca5agbg!nDpA~*nvUd-LNfCoi>m|MHNWmMIo`7Q9^ncyHWR(8We{nV6FP_HQ z3n0Cng@4zcfJw4T)0tH2p$FV^`$52p?^7`Ea5IrkBDYCTRb4`W<*Pxhj1&=&YO9=o z8?W0}r1o4U?Y47F2JJ>sut8m(&nAqkZ%}KbW~lvq{ELPuAUl$=m6a1uKVB=K^%YY- zAx{=TiZI>w3dG&ps&)J%`YE$qCiWn;dZrr&igiUwH|8$;?||aHz3s*R2;NqNIzho} z9@F;XGGPNu?G`H#k1vYz!@9j#F97ygQIPRHx2GrLqSQ#65_vqf6swI6-nePNOOh>7 zux`gMf7TuZ?qHQW+}wQaT=8M-IEHVF<>WHc1U%LnNLI8b*~El(dW}MXTx4SW@M60K zK)ORdLxHr6y`S~I;AvpxQbq;DY&Hmm=LN{OVA(izB0-Tz%wI zmeY6KGMF-H(h;HnV;;+unib7m%FX=A>;)aX_5dx-079&Gmb0v{b!f7{OD#X(s;0&U zNEpxg$fdi6XXJ^{C&}|8;FLryR@EZ7j9su%=h(1&(5)ETI9_C|Jn*jGCRjB!qu%P^ zO}j5}m&VDn)v{$y;jH&&U(KCKWpa{A&A#Zr#PaaNLRL0HW=M?5H7sR$m0dgF`+U6w z=;?NDt%!+4cG%sm%M4 z-)>Q03^R3k1QzV7w4d4JyrySQz&rK%|*au*1Ufxx(C14!mys!Q4 z)Rc&G-l0UNM)=ek=8|yiX_lzafEE^eC4fWd4JS|$DKngrFOT*xabFja`W6_q zs~VB3u`2P7t*>@{w2kA2eb~Hkq9yKU1QI}W*zXD^*4%vL5xWuXQ46;gMQc(@-Z-_a zIKK*zFw4!rwc?;8xA_iLaf=0mU#zRNnb?888y)Z?uv6_$=#f2fxYL;A`WJ+6HcanP_yzFKejox(W@sUNHd&m?z@uLlWpM}P zEi6i{vW&9BmZVUQHO11{+b#;`9Op^M6>-P;)2iV5Gcmo0K&TQ(=pHBwBM_?bMtDzI z>W_R9YHYDVPE0*_RexOIkz!;u71V1RNLIIMRnY+zao}QbkQq|8ftN#xA&-^KSPWr>`FI@ zI>c=rNXFYZSPL%i+yLN1339;$_R;qq4EmDkO5cc9FQ-4ll)t#*0qGOHjygnK75kV0 z0>C$b5E2!h3WeLG4L$sXytHx-fY7eZl5rW8kIq35yuLfl{Z1_9E>^QLkjZp(9>0E` zW$zar#G1@Q*>Yz71UpZq((s4dQE=w^zq)Dv0-67-)q9zgi1fP6DoWC;7s=w#5@a-R{xLsJEeqO@#8 z%}JYe<>aT(&NaCuUOz-A9m-+XVzE*9;A9b6?-L(3zjh($qA1lh)Kf5ZQF6ELIa?(1TrVOAHbl@hM5(qLz=hQ0AscF!03*8a{>&Rs!2M`_ ze*W@@@Nrv6hUO&5WH)sGpg;e~X#WAm_6N9NGJnK%>VG%t0?$yPMe<}3(EdyvLJ;sZW~0hx0fZvsw&9wc!@>im@7EIh_{bbAGVLb_YIl z+PH&&8kZhEGm?A$1X?-?j|XX0k5)&n{d12!*}DH8Zk{ACKB>OS74cuJc8{lz<;N++ zx^M1Uf0=TA`3SrtRq5Xt94HQ4rX=M@QGLgNAl!dn#936I>{h`2OMwNxj~aVh)$tOh z;Qm>{qzPC;abmPB(G*=|2|0R%p!8&V1?%5{KXqtI1IYE`gK8bn#vRFIjwgqe&EK}J z@(Q+*Q2~Mv6^yuc@7T~fRMIMVaiV_B_+oHJB!LtFF_~@(4d=tM-E8culLX! zPkGe=a{8QcQ{wTAodB7k3dnEn`XxNn=Y}o(l&HtCg7=R>3-IK(qMHco+ zoJtlIX(OF`6GS{8-kCuIac6k2;YOPdYTHF+Z;dChr~$w3=fNEl`xguF7uqc;{^yo? z8*Z7nEv+d8n2~;fWtT_2vV`-Y8GzWh0%|vMsDLcx{nLpX@*8->o}$q^3C=%+0-#lV z@qR?Jh6rSPP+UKQxead{DrsQeBGmrVxC-g9!mG*-NN*k=Ym(r_ehi>D2FVo4W&GEC zn3D4U0DDu><*nd^n*yGeA0_jpJ7JKX#kPgWAzUFnp9(+rqe0T{u~rjfqh2g9)c$wc z`?JJ!v9MS#bK6G$`#(Y63oxT^DS5yLVY!#}TH_-cAlMyiaPbxWhRhQ`Ps)j^g2eO8 zkwJOGXKhw8KDxyTl+c&F!eeQUKYi+C>fzpe2_Xd(ZP`+zSVUobL*&^(3k&Iu0P}Hq zEwj`B(H=$adtZ!78qnmFVoy#4nVz1|oj{0%BrsOC@fmz+p{05z7^rZ8qFF)F{~z;C zMqvp!e)qrCfxEM4_whJT8181=ayMWdrwe;QtGb8N(olgG=;%m?_ymCDWhB6P9vd@p5fyBM`u~`8R z4PuZ_Li~ISH|6PlGHFlID%hfb6#C&4y8n_J$Urqp5}Ixo;C}*UO0m#9i1RZcB4%<; zuaer7K|oBzHVM;<310ptP1fLKcRBvu;Xi7W$UMB^doni1fO-`cXk|(p)+sh`Y@cn! zpb8^JtBSyXAjfdxA&z%4u()DF2#gBp_Z)`ZQmdasOZfET@d69({Gf`~aYx@<{}1!79LpM+@p<7RjFfuM`I;Qa^GK4y^-F;KYLjMn;);Ha zK_vv)k3<48>A|W}Ook%Jdnsr!izTO)Hw*<=LIAJh!F#yoIH}FUv72uEg@8&05kFJw zNw+%A`mkSYsz}<_f_%%NIFo$W)95#XmN~OVGe=^43Epk{34E0>SA?E4-YDFT>+!o~ z_zRCe7lR4_lVjlk#QiR5$E5J09 zQ-aWbNjr1;5y;3!cxl>}b{GVy(NSZ=n1^%y?e<=(9Bw*=o2ut&A?lH-W=V;B*;0au>n^DDOIt@hvR!R@zl@8KzuS5k9GRf_!%Tc_y zh+g|0sKC?bx}T16`$OM-Lh#)ZS!j9&*hc=Rd)>4V-eN=hXDVC)c&90u`4dK`p+XAf zYJ-i?8)^dXto(dUQMUFkEEea3KnD=kPzxT%@vrfkf|#J*;r(smyIrK*Z9lBAT_g z28FQE=;55;IIZ#FggG{d&(wsJ;-xE}K4v2s`AL6fWQxIP2J-6v^Ds<@gV5k^&Bh8d z^1aW4P9>$te|cmw4De4_3K#!~UEb!V@l`{r4e^$PaknV^ji{5OF@TH85sDsqMp(cW zykDNzkz|M&FD;gWLQZN=x#*KzqJuV#hyZGayJ!rP-u9vSE#WWMmApCBR61g0ru75n z$kD`vRMf|7{r$vwbwHL^c8Bw~v^Uz(W zj}t9@-ME(Nx(=oWqGM#UDYBT=I#N2HdB7)#L zRz0Fi7Gv#eUXh2U|QKp5RV^>DPp7BOR#VfzA;r(TP@qcG9>4I(hd9;}EST+WQ3 zVLhfGG7AUeynX=mXa(OC8dTf1HNSt=8nZqOGJ@}|2hGQepmH5qgjYYv0A}&QFZG%K z`3}50Q3k%SeY{}%MA*FJuS7PqiZELGw$bD9n(7k3&eAO%fh5CkfXg>2ednl0Llpi& zd+zEh??bSBHUw|ROhg$EAOOkYZw-jHBI}Z~4Gqtup(P;-f`*UZo(LQZ;GF~uqdI7* zts^&_EBSrdtpD1zpxTHu{5R)&oAST_F+f4`1@B0)$qyw=w({@Zk0>N`Q3rtG?fDIY z+KWBuZ9=>^9{mKNoWZjc<|@4ULLgK5Z!wp_2C>q*K0A*^uYv+hsAhXgB6`4}bHV=0sl{T& zG8uONlq<|iHxNo*Sky-_0W`$lfSKphN&rX~>Kg={YXnEZ)GtxBwF%yb(EeElK1|*M z<^f2o4FSHy|qZ9Qwa<~juL+0lu9#^&xNX8^%yiTi(6ZDt%*urg2m9wywpMLO@_p#0qL0pI=-=n~x28ISMPf z@R0LM4cBiy{ysQ1BL1R-Am5Y=zZ)@EsH8sj6BJy!8qwtru8qUjnkawREGfrvw}2d? zpkpw~h^Qy(drrb$t5|-*3S#KDw*xQ0Ki0gG3PSdAk{i!!eQgo*=Qxcdl?Mc?}{LBMv@#MgJQ3ZB)9 zHrROvP;AizvQ4fC%%??+CLn4sg5W|iIvCaD0r)iQABeR#Vt?KLS_0$Po&iW-#b9+j z2(mQy5qoqVi{ZZML#v)Ne?4$%Svf?|UB`}#A0`leIIt{k3%Rkt6v3aLd<2sdrG#3T zGV5Lu12FbLLNzk{DGN{as9yn8OsQFZ;t@qEp*!UUS-MEHO~MA46sE!Lv=O+b$LHY@ z?zYELB6=Uu*MS#&si~g+gU_|JFtteiNMi;QBcGpk@C;@T$n_-kWD4*Lz;+qhQZ?`s9Dffn`fa764ltc`2OIrx0|p(_`@Ihb z!^;Mp7#+$Q;&{qFZQV3uEzy0GL?-UidGp3#(0uL4?J|+a@mAFldn-ROSBKnn@{PfV zzD&=iH$#AC8}Ap0gQmM}e|spn-5jyB?H*m>QnSDGV6jm4+}743P4oMoFT1xB>u-p> zeql4fJ}~&`AfyN^XDlvO?`F0OuDaeX(9`l3cIsd%;crWYjl~P9qI60tryg9Thz|b3-n9As6}Ig$9$_McEHJkWg4JYHd|-4ZTWqEMc`I;~KcB zEaF_7IB3B~5-c*&Zk0O$_$=zVWcRfTrL&);JD!XKp5c*Bevyyj(XwXcVP2E@oA$Ci zY)P!$ifc4e=FkA;XyT?(ob5y5Dk{UyEf5l-PfMzotnIR%a69B7G5PXZX{ki6wTN{F&b-BA`? z<|e67ZlRxZ5$81&?i9k_?BT^2Dts!sMod{HysiyNXBnte_89y4Uxi(_tw|a>3_nu8 zpi~>5mIJLeb1enYW+0NT>Wx>`O;S$o0FB8M05|4}=x)RpoVO0gtx&{#2%^OWrZaku zejla3&mQp&JtWwQoyD*=45!Lav+%&l8aI_jNq!eWi~GEe!oxj{{Mo+ZMfELEtXQ@A zE&c}A+_E678xD!EK{qSDyHl}%NGFGvq+m9g)VS$NRRnvX7MF|b z`qs+c8No7p6Pu2z4Wp5Rk4d&;znX&POB+m&(uXS+*UECH;}*YA&yDYWaj{)O{bb>H z%@4V=HQCFNl{|N78u=cC@9ZOTykbjoflg^EIY-d#3}H)dcq5agjt$d6GV0}TnlCTy z#6%QIO$CQhSqJeTQ+efj+9zt78sp9+rSc9oHvX55FU({@Bjmdn*OLgjWAT1efG?W$ zg7In3W|vmLLFEA1tP~covH@L=LoB($8!V{mkwc~I6ygv3fl!n!vfD9VL%nNjK^M@1 zV+QX4uZTf0{O-y|{NccLaS@#^>Efo2Zz1TR7hfzmAEXzhty3=~7fXsoneN%D9NZD4 zp+Y;t>!N(ch=e!%`FMmxcw`D^D1jF_Zbo{_(WgqQ;lq()hidnoh+17bHwS9_jvAf( zMPc{D&t(0Nz0h-e?*@+K*Y0aveVO!l&%k~6Q(n!31dCyl7Xqk**|$oL7;{F^Tp`1q zjiJ?TI5#FG7v1`&Z@(scm0}RpF`Jo2?p@<(O`Ayo!@s?%F)1cm@{&8xb-zp{GH{ln z4(_VnsiwhY^HM`U0F&^q(@#5t-fuZCVKwMV$mPhP+Z%8q_ewxC~_S6S@1vtY3M@Q%{mZ}&@G zWqpLhcjHU7J{q;}_F7gPIq6tEQ?&h7_Twz;V3~oNW%M`K(6)lr=`P0nmF(oB_+Lpy zAtLpSW414rZM8TB(~mryoLJdQ@Hg;0Wx7TCs67mj0Wq}~)p2E_zYZMpJQ?Qz6#T*g;B^&# z>bs)#^T*(OBK}!c%ni!J7;S#;HQ1LnPN^*ziXEnEvbYEH(=rTMLQ+FB^2X^+{vSr8TlnT(z~UBCL2Dv5S=0 z^50yD@qZDCcnf!0Cn*Za$9~q&j7sU`qSD?C4@5 z17gLoc)Oem@g~1I$D42Dj(y?Z|GgVdVE%@^w8i8cr}$CaM5xwYNaCztm&e)<5sR9g zLq^Z1L$T&yfRtp6uS>Rd3R{(dWR7ST1tv3*W&D1s)0ekUll_$J$RDxsnjFI>QZ zhE`JcvIVFh3hRvgPsXqq6TUAz^71}&39pSmttdg_Np&9yn>AG{f$AP2oO$?C&ChjQ z5*6_cJ3JYk!u$i2w}S3|dvLQUY&%kvy#9QH-0$~$+S{1t#J0&Cj6QkZ(EhpRqQ@at zOIZ1;u7V{(GYWMpWw@41j%dS4DeO$rY$xK^Mp_na^TI6VOcds>kbFk+tmSJi3CK5; z-`jq%a=Bf+l>Zze$w$Ilo3x$no9zo@*3QJM=x)2{7jf8T5^rI1eY+3)?So4bN;_-0 zQ|z~%g}*0ej0sNLxjzZ#y9dhqDW_alXjs#8iy+L`er`w{b#5Q%|E?d_`~;i2Sxr6S@h^*7fQQ&-5`NMhc+IPC&{7izuk16M16Ie z?h-MdRWx5ui(XFqb#~Z&EHpb{*_3*YU{jIs1{xb$l_st<-UmDb9Fa+;t+geOBL{II zadz=SO+RO8Qt9u)2wJg8vP7NJkQ1Zd8U1uj;wj8}aKKcmP6;Jd;I1aA2>sqp9Zu=o zN+bIECF^tuV|~%wPmn48Ak?idHpOUo1ZP(fAii@CZSy2h(o0)D)~nxJ5Ih=|ihk?m zdUG7LePGS&*56DO+@kU}mY$(0#e32j<3F<%z^E0j@6Am>Xyx?)xYvaMGX82HXfe#q z_|$lvDlRIcAHhJDED|~JQq@=i>--VcZeLs7sUL=~8(G=n-Vc66>j2>246$0XeK1o? z$Laii0Dk9*Oue~PER9RcLdG$4=;;~SjCIC*V(SCgr!zaSKexTjkk5h@BwFIZ70EKk zrIM70=xqhs$390_C;p5(!R(Iird-t-l){*fWBWoNqFRutNKwSQrtGtyvB0@X{mkbn z$_EG{S?8*eSTF0h*X30%Pc2G*vmP_py%Y z`J6Lq$53EHoA8lpbi?y6TZZ?P61r7N4g`X(WhmmwaGh?S;MOsCKyq9QH8bGWyIk|* z#n!&_VshaMmw&)1af>R`nR^+n;GpYfa}Il=MU6$F;mk%GFe>pPkwHDe)(KZJ=%O0~k2;75}FX9X=ve6h(q~MV~by4zUR07 zg-vqo7a21N?$FKqJUY6wmr>VJNBzHXXxL!wCgFzS`aYc^@_E{$Zaqh5LR8qh6NYxy zYgCY}C;LUSD^BU;eT35Mi?{*qw%@4q(z~ZZGU*Zr zvCoBVZwh@6QS@7XZep}XEYV7|aZC<#FDpW1=$yKX2u@d0=W!i=5uds_?<6xOv60WH zTjxnAxDznGScrb0w!9E+n`x^t@IpCdSmb*voERkAH#;xS2p`JsUh0VnM+>^dPgv_+ z!=sd2$bR+lz=`qgz?i;{yO<@gV`P?9OmDDD^8 zO=>)lR-mG*PZq^pZJ-)vdWeO!OJ?WIk1lZ7OLLhvqa@|%=iEg9>fkf;0;6_|=9pPs z?rKej>iwL}VJjU_r_<*3aot%y41COxe<*xuz#-W{JY@gURz~gYo>gsOQl;bjPT?fe zrlcnYmxdSnj(mJOg-bc&i>K~xjl)|(YP-$pZBXGYTv6k#uZnr;De;_$>s z_NBtt?;kgjQLuHbk)6|H>k7Ydexe335(mH8awb=Y4^&UN#&OFra46??>n54(*AwXN zi6*(+ekc$Un+fFmB&wxtq+U*n68h|<1kkI!m7#hXwobF8qA$0JAGeToTBakeXUj&0 z9qVilJ4jg5##kDCOGzmNNe4G2UD7_K9(<9ylT?`?Rafcz{QM021KNfm$j^%o=L^bZ z<#-%e!x#Lx1#~-cn23%2n~ewXGJCboQz=rM!`=vQb|byUo8-uL>hrVNYv-<45Pu*O z$qbp3$4!qrq?Gjd>I)Z%1PH@vJh)#Ve}0OfiB*x%&$a!KOgW1(WuNPv{-rc$^k9|T zG?-Yci+99X+N`u*O)1P{x}s@$+~Y7-A|{_ie}&wXB%$xKl&WR9Hlt4FH2Lq|i{nG* zly4eJju2FP41MqJ|9SLWTDgl63De9*% zU$7Y}GaJ9gsJK3Mv2qPNextSMcU!2)pm%Wmps86dC}P>hELROsE2Y4xJ4gGocE81d zBe=8Lar9xb;@(FolDz7}Tm5g8YpX1x%sNcZ?fMZ*`rtb)r@OWc@TJzs-j?8InPi^7 zSS6k&IO*u%BW!}(9B7cCA)&=i_&S-r-lY;_eX~8VOFCNP8q;4a048HywVK#b9+)&> z2o;{HBRkU&U~pM-sW9awt9Y`Ep3P=7#p~oD=@|l(XSl!pOPemr%u6`qbet8{V$Av` zc)ntAyJ{6N-XKwxPh?Y?65Qt>w;%F$&ve*q8(Mv8mk7-p8_b_yEC=7ezHmj@HBYR- zueAd+3E0Jd*YD&%j#p9qH|8Ya6y^oKZoSM`DOY&Yb|VELj#!fqFKIbK=IVW-c8%&( zL_Ys7Pw^VssPp5>Iq?q-+}EDl&ld&?mPhV)#Xcv*OOyJEa;tg6fm1H^xLx73XdFiB zI9{LscAoG1y8$W61-UyV?qbgh*9xS;{ zL}ScT$8nn&LODLFE3hF;BFPeOin$wmiQ#TkAMrQp1jgfog6zG`_ew$~CnVpWkOQ|Nyk^pkV16Pz}k4Q-> zQd{y@rY=;Yu z)dsdx!GwNDit?dZV;5+TG%*!D^%gd9oa4;2ZGN!4woWYFOcJ7O-GO$FpH1kVBWYNK zkgX%ePD9IhHJH0s>YZ}WZ=;`!HXKmn*W@*`ckDuK#J}dPcVhhM%5*1Yl?~NY@t(gO zjkZ&B)%rfM=T3r#;L`VX;rxdQLS;@2>tAMs(A6Rzk?h#g``G7W`Y4Oq^1D)GVEhR> z>OUnM-q+XVWOjADx9oI94sV917}Q*--8GL3u6g7+W~07V%${ECog%lv&#WuMC*giC zbrWyKKj2p1_Typ3yjG0HkS7?}G^4Z%w$_U~VKpqTs0qJ*0RQp&5EC7uEW$V;JV`Lxk34NOF%5 ze}`gzwiqg$s0fL1g2n=7i~*aED+o3jIUGb&B-UVu;|1HM8T-bHt~GzBS~XJPFfnJ?38u181d0YstJHB=)`XtDn{5 zHSJ^CO89X!^tFL2py**%$-M$FUo7X3hhi{jQy__{{I|vVFPrQQ5l*5EGsL zS^J500+Nn^3!ZQEDo-0Vxn~5^k1B#R+1Oto%f$cba<@Yud+AllO{8&`u1(#OIJ%GU z!;$6(GEJ+uMOor>(t9U-%awVIE}Nq^f>s1X?%umWntU@X&-!jBu^4)83RPific}ul4XC!K!Vh2`rbeX^{`5 zTIr!zOwcN<#l7D-dA3gI+$A;}s_(Qbv_=K|KZtxdhG_@5jajJl6^yFzDXg*xj86rTsmS~Qm>wSyA+^y^1dg1 zVEFqdwB~9=ls?FzYO#cI>UG@o9}bm&;M%@`Bd=haD<3dA<+T}C!q7!F#RTnmT0 z@Gsj7o3C8-Dz>C56oXBalz+8-Zu^?-#3z_b&Sz=X1n(Wqapm&Q>F_<-6XkZ4 zW9mNromwJSdMl5|O8P=y68xebGK29W$q}Q#U?AN6W&2 zhLW-RQ5H6vTr9vsgR2R-7gw__J%2ow*-?l(`OE?+{rz+%U7y|9d44N_4f@LMtnH?Zlmtr2pEH@~NymWNWEAxA^qjLKhY^+iWlF z6XOWYyw@kf^J6`IVC0uQ-7~NX)0qzv-6VQ;s%^yUH_87Wp9C#+Kk;Wn6~7nnG_sdE zzOV=y^bWk&L_fF3Cl{%Eh z2|wwF|NGyf+mH@kSUualj4Gg~75}Vgr%4AW9xGUvr`5LsXXDUI1Yy=q1z)!N{WE9P zOK9t}3)UL!G`PgDC*C(_>z(|1Cgj&MiHV56x;R3LCyuw5C)34gUYGH9xchZ^L9#PB zYzJT1UulhfnWP!}0z^jrR0Il;uRb+??KBptRzpw1y|JF!^?UY4(`#H_M z(qEP?BaY+lw1nEIer-oL!C%F~rE-D9h9~>t-yY-1ry+l<(45BFrAN!2o)$~+)@?h? zUOB?UbTMopp2mX$Iz16U#~3P(a4$yPf+GV>BG(s*)v)C>iEJgXb;15)G7^n{{-7k@x^3gujN7sW?H!CH!hQ6XPYKA52ZW{ zock)@&XPp6&KUxg`rTiU6h6Ugp-x@_eO7Dh%^6RlMD=n`B>! z@zCxo=lI=I;rsU~$N%{6EEy_z0YLJCGqX}9sFwVRF5xfu|JR4-Ct8B(lPf6K)%pG* zuFmzWY5uHtSH0ddzFJbh?DgS;Ebqt{Bq8dfe~?G|=4dqVjZb^s;qt-_6T$G-4)zmm z$9#-4a6Xp>=B|*~{iu;WeSa|oCVZ4!<`3$vLnKSv3LiaGRDb{A1|eUPgL=LcRWR!1 zVNwMQA}s3t@P30x#t`%qEdgaAPu`voca3o@S^a^`1@02KjjEeDUpQ&mQ(^oaAC}{9 z(9bd2tiQNffRDxFDJI)>5eWwv{9=32)f!uZJDvJR}lIh7u|=lQAJ<$ShNt=l8l%=REs)&UycR-}CvLecEU5wAOw9hU>b%)09Qy zTI3DS?4#$jcnHy0cnhp1FSvK#!c&^R$6m1pJR>(JxhO3~c(PhX%a>i(D~pwErj&~! zbm?0@$zcSE!#Cod8oYPvfMJ(xCo(ibA{v!^Ke>Zt0ut*Orz|a5x5X6a7jXV0;bB;N z+4~Z04(~iXMW(%n7to>>-(w*~h3o_Jy{!UQ5NPh+&h)+S`Q$|;d$b&hu>@JWqbTtx zh`v9qh2D~uJY8#{_&@Otsomv37_TTB9VgXEqawI>6?+L&M@zUDvyMY;^UDdOh`wih zfco_fBKr8EN+lJgw;{qN$76FX4IoKc*(~+l?XmY)JeOCFqXG=49??`j35s4bpDJcv zstjPx!Qav5a>g2?9A#mbaC)(C-9j>L48WyT5W>C@^^Xk1J&Q%ITE zkN(&X`3kNO*V8AkQ72stRc~5-ks9S1`1Dpl^sDLeCRjk)AlJM~KN36G1s-6pva_4q z-+`YBB3-&Z-*7erp|04ldi}ftdb{OK5Hp*C>DGs=btL{|(+v8^Q~3>NX4c?t?FLB2 zyvOGKtM^YNuY#$8E2#4kv*3Khl63!}V^(1P@%r6QAXAx{Cb~RF{3&b*OmeH}@)1)& zK+hsH$=8$?#!@1*>G4wDunT}W%n-1%)1<191K{D#zPcTe6Re(Flj(hrFz=>Vg7m-6 zAt{aivrr|yrXIqZTm|K0J-Z1|Cb%-wtlrl zu`UDIVaXp7DO+IvtnMix6?=Jxy*=scidAd$S0%XQ5}dxh*e%NK_qL1g6t}dYw+D92 zvy+B9>=MzDNaD?Xm@G0Fjbu_OPP#siPWA*B5M3CbFjt`2$2hsiC#@DgNOlFpfj>m5m^LaUwIHcw9&#V&*8bj8Di`QUTe>Awo;qE6q``K%p6 zPX&_F61!uUAdBj9e-vbvbR%iIlq&{^arDaEpi_%9X;IaE#G-oZJlR^a=1rRy)bN=G z$k-PXXvLJ?a_-zEp~T2t^1$p_=qdJb(-tyg6?y6t@=VoKu*iv?aW1KIIj5K%UQ{B+ zVd%Y5w{CIDwfIq(-^Sx-A?UXcbkh#WSly&^68f_DnD}HQF9Tb^1Dp`wApXXntNl6C zeE6wnC0e0yO=lnGcj6h7>I0U*yqbpfU}NVMuF_(fI}onIn+t2Z>4~;6nJ6qj1M+0V zpJ%a;+njD8VzT+(J%1@(Sa<1FtqkeACp^pE4G5**FJc24QRKqtB)IIi`)Y8X8UPhT z#uhzh&w@wsIm=S_WX^xHg5ZwBWNToAlcmy_KU4g(_=V?dH*oqc05N@`FHx!Y7Px-g z1ZTU*O@QVd+8*DMHf-YipC#Hrl2m8$GbpwTS|9Uck;jBS>8Q1L7EO{xa*s#QClOhk zrARUWf)npywf9cbC#e^J{A7GcZ0>%&YcoN?YCsZd6H;f(nG@@!i{X#*bl0L@5J3Oq zii5UK&p9$V$tVp|aAU=e+~BeZ+*nse*c43^YIJ@0JNNqFnx{u$6 zcY0c**dH z*R86);<+cMJ#}ZJl9R5~TlQk9Bng$=nI(V6vXV%akI6j?R*3!Xy9@t*?8}WJG$2i)PxTR9`gjf_vwz$`9Lz;2_iG z-wm;aFHS)`G(u)XjE&>3Lpz_|1BZdxE4_CGU|`$iJh!(H_u%4+TOVB! zBYx*T@Z3TUIYCHL7|MqmuIQW?7?C_-?R^KvJx#(x2k3pbfu_*|Kf)NvBL=!j-+pAI z4~qMwLXQj4r^^s714l6g!98(;!&w(eVlEtdlwbCMRBwK?(Lfx@Jm>>c92gShdevVU}U$VhC9v>ppN8`1P8W+kDlP3Og5$=ZXOP6PNcTJ|szjjR$S?-$}YlfD1a3z8f)R?Q@B_62b_G|w~X-F_D9&u{e^|4CJYw}xK)KmnUHsq)`v1l&_=t{HE z+FIPZU4+W+$uH|&qP9$7tn#oqdpwUEd2T1CJS=RleoknMy+%au)rlVOnYD7g+xuV% z*mCdj8&lrNrNCDB=II7Jp7w3=vxh?@whsjg`_vniRbPB%8e)?h=Qo)HD2pfY!mPH7 z_g+!H5rTkyP)*4J(n6yIh2>+#7YvcRg@m{l%o$n)`|ex@+y5tseYyzA=FKNM&$s45 zvE8w~2@H#GW4BIFZWl?n37f?R{^`ng8)DiMR0T7f(uT)k6_Kj|C)1w1dzg-5r4l!g zIE@nc$Ra-OX}w|j|Lmc`J8-u(n9C}YeW)8UV-PW6&c&z&_xa7jEJ6LW-V6q1Ep}+( zObEM5kLLNhldTB|-p_n}l3;Ux_DNN(6NFyK;F+n2fp)h!IQ?(U!D%ZK++E(vY|Ffx zQx`_hzm&BbG8bCZC2m#3^tbASI? zy|qdhe18E#Df~dauqewJ_EmD{@ev$Q_V(Bp+U^4gf);9A{PN+TOm-~sa5I|UrOB0P*}^^O1s?7pTq2 zwIGW?6tX#Sr(ZDsm(8igzVm`g1FAK(z98EyfRbzx8qEL6Wc%0OChHQHcQ79xH`P9a zKXtU-o~iwEG*Z6#0!aG zf$aYGH$;>=+O%60;b#P2`4+wVGk)*=4C)2-T!{h{o~iDC%ebq_32j~gh&BHZWe6; z(ENXT6BsGN-8MIf89JbS?%eGc;quiuSn6HIJ)%l7cP9(hUNQgy3YLA|M{!<|94)%dySdYjs=E7ROKTWaaA_m zn7mCu_}jF|4^ECz1k7m^0!|dueQ%yY_^5n7J(tZDU+W-EyFR;74q}I9T znE{l@rn#f|g5$qzns)5Yrje`&m$s^V@nq;lVmUD^xI8r%P&22C*&wqD%w1$+E9UT4 zTNDO*-MLzgSSn%|=wUds4({}@UWGf;Gvs)btYEAVl-Gy)evM17x=h(&S^aO9=Kl$5 zZY!ibfK1|Yh`nJ4kFl@Dq8nV7pLaqvbpz5@bD-(!y5>54I4~EiTKEvNxgrl1r%od$ zh^4Jb>GwDc;9|IG( zWigYj4bW0`yfOd!nLAkNAcQlgL56hF$Bpu{{1dswTzh5v+v5Xc@2u0rQNW9Lhhkcq z!^%W+@pC-IH?yZ0UtZ{F>`_>s=*92$7};#Od%_4etzkeum)?|CQ6Z-t5>uAE3W zZwy3pH}HyN?tzkshHb}kvjBh=kX3z+5B<=7MXxI}E1Ll?y0Y1a^Mp@U8oRm)MWzk- zklw<0mykL=I4GENQLyUFTu|9pXKQ?0<;K%$%8 zC>(RCeD1!Hu?SQ7(ajP_WkGU`Uh0TGCSL=ERH*gG#g2kcgcO=>HTKmrG zQN+a(*3+Fpb`Of7V;}=qe+_G>#3oCw-(4WyQC*jKQ{PE^urgvg%#S4xnukWfIP@tc z`u+@3{dd165v889rjN(*j;|lXjw81R&k@H9yA`$-At;byUKRcbSOQadU9i}x&#svb zMj~w%XZm`;#Cmx7N%(6dzAAp@vg+pq#3@I&z{(uF1j9}hkEa}eH{Ew>MmX#EIEWfH z5vQr1TXEK(kI9Y(k333;%*G{>6rRvOTmYZ|c3)N#*Lv*HmO@RuiC9O&z$;!?)7A*J z1`N?$YhXk#qStVv5x>oP3+)7snv^ITDJ#E*xT;Kx>AdxTzct|=&Rs6+@NPkQu$>!;6+-jIE`dIrx{9rV13&Vrf|%>-)%k^4EyW^p_7jj zad>_T+7H3o15#JVp86e|{H^d6m@#+Dz+IL|&&c<%eyTNCJ@%cRU<@Qq{b~j>G0O=4 z5t@ar$1Q;9twUh7!J8RCBdu^r&7c8u0+~X0G`~sweVoBC#uGlrE6^hpv?_Cp*oFT@ z{0R|RBO(`d0*&PRJE!K3NVpZ&t4UaO<`h*=)ST$@-U9gea;S)73FJIEK_Am&9C+#$ z&bR`}J{J6Kd$vTz@wTM9!iUP4)I{kIruv-}uEY6yxxWSu0j>Let_h(!qX()UpPTAg zRs(&}nQx^v$6OmGCntMX56)FBfmqFHbpSf(5$v51P>CV7sJ%ylBRO|JUvv@lZxfG% zj0LO*Rnmql6k2LJR!FA6ve#&g6pW5vuo$l|O(!%D>8;EL3w<9ab|5cmM11tWZKpla z{fuPFU1d=pjJzP7#2+T%>r^-fdbHcqKV*Z#`p)1U!aSqBphMU4aKh!bLy|KrF!|Dp zH(@1>n})aFtHsrJ z&RE_`^e*(@?RFS2dI8wK;7tb5q4ZZJH8;)NQ8xy2?y{Zw+X z!hA-kVz@3MVV_^&!%u;Qfu{op?BPo2g5jz@-%40D5dmXvaCyo;^)6Ip;_Zjpfx?Q? zcR6&|;d{QW@jI=I<1cT4Gx4VntAy;vuQl&lRbD4L@&ZVh`zGllNj@RAwY6>=C5S3} ztNl3v=H*>v0f?mWJeF;)y{`!0$7s6@Io3o&4bD6wY(4QISpU2ru z`bglAsansehc`mLhLql*SmOz$HI@MDa6Lp}Q;v6z<`=s@D`!HVMfBwuYZuMJ1czG= zcmGI!T+%O0$&d+f{5y}9#S2p1^8ZlPF%>j0o0B%@j8m)hB-X^?D)0F?_*nYrI$L3S=E|}?He$V3f(n10 zN}fBqm`f#JN4tQo2?0GH$GtoZPMZDZ7HdEgY|KXo9dj>LV0Cjvs_qUF)BBhx-=f?^ zJn=-lFD1p;kmknt?sKZ=Dc$%zBQeT5pCE|NTAfG6=9_ns#IfEXHDWVKhlnvEQO^%3 z_vpOjvcYzqhTPLbr*6+}^QfMV(#9JbO~4^0v=(B(#iNQjmtT8T*~eq)18@55)NO6+ zx9z<;R7?fIjXJ46x@wR778i1P_v+S zc%64-c)Fup$R)e=DtYrQtIztWr-h6_lHfa4?|rJ-Ix(%mG?Ak7iQIEHr;+~LK;FF2 zp?c8@y~@S;sV@S1)m`X0Lh14MyX*3Upp^-`HKDJ_v92>0)<)jFf-#zDx+wGq7HXKw zEs~2t`BNkGi5c|I@sH$=;P9-z2aQ?14R2-JrD&kN(ZXD)`>1-9G;K;G`VD?7?U9vq z(uX>HC*GO){GHp&RB!#SE70b1guA#8x?~;Mzupek3j7Lf^27IFau(mIES)O%a*<9wpdI}% zIV9vd2luj&eZV8eg=Zs395z(RaKRpUk0@aX2bkY|r3rZl`^}z=d**?#NulluSSR=P&V;&qa@zk1_F1AFfFL zS1?Ss`Qkm#{-Hd2C0@kP%I4k@vKnt8;R75Dt_7wF1WTs$A>T;5jfD1DQ+;WaVNUDz z_9z)s&Mv7yZ?D6+s*jhNoI;~P61$e~a<}gh1+~M(L~4~7WE*WW{=@iA+yhtN+Uq!8 zjoas}yYKM+;@1oMOt;|Qa=fpa5_nuGf?TLCZ)#NU>!+~(U{{|<{Z8B$LZxK!q@iR~ zrARiDl=wKYNy@LIhf=tYM+c$UNIRa@_VEz)8MyMJ-G+kc=&8O{ceXtq|Y z2X$R9sAs?VL>2h-E_zHxJAZc}3TbJkWt=!$&YHrj4*WqgD~b7*`&9VIyWITk!C$AN=jxumv(5{rJe16(? zZry3RyFG9kRrba=w9#0r!1HDk7hTBpNrN8#kIvSKW!F{>BkMak{s(yqLsL2bd~JAhobsWCAyo&vQ;-CFl=L*1;pZWXc+5%2INC}` z(=eOs0+QkW1dOV*YB#(8=_i;!&uTPZ3XmIjI5@=mId zJlUrtoQNq9Tvt-trFf>njy+3KbQ<@H*j=*0{}#t&ED74`!I2AXr@0Ijb%xR@Tjz-r z>^byWI2hvEc)PqM&}*r~nBtF`(w?n9ZO?o1Ua^-OXS)^Qs)#c-pq{BP4olTEao%qoN{E+Z(y$%L=iYu~ z{qg&G-s4E6>2lqKkHh2!)ezMQ|Y+8rNLOzMR#*-W~ zZ>j0DUTGYnnw(^FPyyM;+s#OQZwd7Y)UVrfl=H_QqmP47)*eq!&6weLPC#GQN2px< zz1jzoeJO9zj{bSgTI7vfIG3#l1|^ZAIKhZKJPB%T@bKuquvS!7mu~_KPw0qpQHAOe zx3tdQ)F$|>W{yr@=L}0^G$lwou}jo3!3RH#Z-Ukyrd?{&RB za!pT7cq)?Oich}2p)j7G?`?ovp*=3@=fS!jZsE_Y%5zLZyV5u;Qtp+E(@0l6>tvVt ztBnS0gFk&5_7cPHa3ift1x(T>NB|kNa`Y?;dsvt4T+5(0>JYU1sIDZtMaZ4=?7*Juc^3 zQ`KX)Tkm45678yw?f{(QhU6|W{`M!LgntN|vwomGiCcHLJK-{xFy^CADIiCjRwBdY zY#;nJL?`c1)v44Ds6V`*!-Qp#7^4|r<2f=&#IrIG#bbfC z3z1SalE%L<#hLNhmW-9UCAo0&ZYjG@ZD6bqzGqW(sgTZEDUAx)UuyDbHRkflIb#me zpZ4RNBHw?J(T!6*6{&n8aU*aZl{pn86>lo-)yC18Sapg{YmStTQLHTKf!bMzWGLMi z5`LmfjbsPaT8|n)yl|7LdBj$^7YSz~SNz%g_=_yUYD7sl()USx{_&NNf@h%eI-eF* zhX3_X+8@O>x*SgRKP`-bWqEn##&UwM6rIT2LAqqB=eZo4W3waVYgHRryNiJdYKDFh z%9?8Vc-tS$0rmOev`SO@tXj0jqNJBy{eIBp@om)*W<)UrknkivZOGSmTC}QdN&vXI z@{F_5s>_o}hCK!al~?QDcs)l42A;~!=sxwG;g^VehxjePSomN@hCfN5aT{W8MN}^g zQ#GBqNS_D7ye}g?C&G^mQrorD97V4eCb~_dW+k^)p1lu=6h+zNtf}1_7V%}NDo=SU zFJ&v7#Wpslx8<5Oed1UCJSIHEm9*7i`XFmT9``O;a~9+d_o2 z-m{QHHjP#BH&f6&o^w>CG3iHgv^c$P)@gb0o-jCO zt#Rj44htc#`*ol=MNmI9b0IdEVU+avFn@d_$d`5FKwQ3Jg>;pE$f?|_*jF6|5+BE! z4kcNW(uq-Vn$N@3#qkH0wCzU^?FMr-&-vVS0(JTV{Rh)WS;DG^6BKGWe#BNCUh~?% zeGtSw55FjAh#K*^`M$Wf@ra+b_sp%017VQ~r#(h#w;GvJ-RTJMfBus(PLlTnG(5v$YDr_Lz=w&+A;EKcqhx{d@R&Z%+jb7k z@&t|M^UX4T=UTxwyI_}clis18SYJ)d*brUXT>ft7@StiR-F?lyfehvqv3H9zuK_lJIg5qxU`R>x4%<*Srjn8 zEyfp~_;J+h$r~=ElT*eRN6N4f7{?ffKNS3?4Zqv&`6Z*8eMM7Q>Uj?1SD!U$Ob#Tp z-6>nuKY7lH;>8}qCKU^KrR`fp-zSUc`}Q9^Y9apK`C@)E$E_)V=_>CZxQj{cHF|Ix zc$=Xqo^tPIk zDhT*-G9$lO`w#e$JW4Da8L{z`NxAE#&e^E-Sh1OS_kof5*Df4wQdX!?+bx)J*_%qg zz)P_b#=Dot>}T5F5QFwRcF!#NlQ4~p2Lq?Qz=^#9E!_?vsT%zcK=SWckMOuuah7pL zE#Y)1!(WsdIKRhP5P1)0uuz?QSTc*+&v1LcR#h(NALdd38fxHx8>(?*iuQokRy-k_ zB|euu2RgUndGQVdX9H32^qD7LkFCf(_xk)USM(CwUxX-WP|S$&nY>5*XN#NlcVi9y zj{g5i6unC`aKI17v_;Z9ALhzCGPSsoK$=nNB>}%7YtzMRyK~p#U1ozkE3jLRk6(4} zz@--K;DD9cAXG3hJ>#fNtf3+`8`Bmm5k?dx$~a2MFV zB=9dNItullC)u57vzBD(skN7sd!SOF6y&*DgD5~mR2)K%I$^{xRPwddWa#GA#XSN> z!5%~Hq)cgnL~6I}4&r6rX|el{|AJl^R^ko$agG~>3?L8O!Imo@?&4&fg#qVv$q}@M z%f0>WKhc`di=S*M-NXLAz(45P0asF>VQVid+gidxUkHC~HT;*d^E@x$&O78!X^RGs zsqIKk=AlSH3jsd6KN{k^-bb;ABVZV&J2ZLrtN4S?@WFiU;+HZA5KsO-sk?`x1LDgOK0)z)gba+( z<#YKTpPzhif1`_(-2h97M(DssLoY0MpRU&qvu+1p{?w;@aKALd?yWq62si&H>i@65 zmCD(Li%BhQ-_lVbFH5RI^Xxxg)*l)L{Qr>Ixy!AZ+JpRw&XvYy9!7rWtLn!K_Z~x1 zBwfb}4kBLx*%T>gQ*0P+{!NI+3jwxvw@2;cuDtyP@4t|Kw-bOYeRKb65NCB%ZT;t^ z-aTLm-o=UFD{3>*Bh7VhU&%kA1ai|vPQLsuLN&0%ihv{XoGx;hZ#F)RHaH9b$I65B|!7pz}QJ zB>DCoz_b<@UwZ{gO#xd)cIv`&N_t?HKXJu_#jF`6*uhVJ+Dha z{)=f-bD-x4e>_{*be`2wov*Z0(Ueue>3waMXhk+)vA3En4nNY_ir4S4xG{kNF#x5g zW#sM(+4^Ig^$a1H_4ixhyR=~OMh^yDa6Ue+P)$3DhrSUF?0{Oi|0*arkaCc0O~T!+ zCG=@WzU$Sbt3UHNX^>|Ub1`yVFxMtr;B;e5(hQ0vrpBnss zy*tITd%WiF^p#w-=1xnPnqx2^w|}W*5xC2JieS&T;K7C}0=yimnE%}A((f^Z5Tu5J z4d8P`qhfa%02BQ$4_^N`Y=A0DEq^u)P@T|l9EnXozZNLPKsGKOA)m$J-0*vBxcds5 z3Mu@EJDobucG)s>3dk#@vZiH#*#+6!)-BnFY;r)k4qUxa%q=Z>=J_QBxHJQ(T3qFM z!`a~oV%NEBqQvMGbJnz*j`=If<4x;$@k+fZ9rvwUL;<-UNz> z>ivU&k)$&E$O8kG$^~H=xX@%gI1W^lsC_C?0aC`h4LQN+8YM7dtAC>Y_QIgY#D6&*?Gh_+lajzY7j&BHymLflZ<)Lh z*<~-Oqau-IB9NqLbPmCEOd6ETE_-`WzkI=umpTtscLb$q`pwASV{f!|hc2A-Dr_En za!RioAW?H5TB&PXOtss+wTO3)4k~NVV@;d`P0rN+y0!B5-|D!+<*f0O2w{ZyB8-qK zjmdNtV1!6U-U&wGqNIAqP8TgeDv%kF8$9l?W|{83^xPfI><)i1*G|Fl4J~pRYOG~i z?w(qIi$EN76DKZ2Uq?6qNSdU%T(aF>Z4Wu{bA0^I8!$EQ6A(qs z5!@LGj-A;5^vm9F->Y5@Ttz6|R$^yInZZD|ipkKdk7HMDA_M+>c-t7jL&s#{SXOWhVeLo=bH$dl`fMhq?6b|l3_^dJ$ z3emw$(fk#V6V8J;Mp^-a_znUgPd3a%_Bw?+%s`Xw=&%lg;WuC)){S_CX2mTOC%9Bk z9AADP$+$-nQ5aRx`wlvKMWBDr*$fhjPB>8@b z?GG2=3gF;=h?C^8d*iGeL8TzKDX64YSt&cbCa@4e5`B(*?W5~*0Rrx-f(Yb2vLoMo zRi)@VHgYFf*CE?|eW?IQ6T{+`H|GY*Y;4%Zk-2MueW2FVqaNFQ0O&K~ZPtr9rkr0R zOTL6jz=j^US3jz`Pi{U=W;v|#f(4da71C)2g_eZSfP60gWm-wVr(WXl(|(NS%&r4m z{V3kW|4bjeiTKmSTWdcRvOP!c;As^=6;fpV=8JrZ?QHkkECKV@O2l@ue>u{@NW`5x zEy2P+Fzt=bRJZO*XC&8UD^T~pK|+50%Om}1IL?>NLoSu0sPP6Zojtf`3V|c#a4ZCZ z@qL){eg)=11;gPgqaz(Daun~fe8$vHspyaDzrOad_w3IW*+Y%~Y?oWcyblU~Zz$Ow zr5Kx?hEG6Np40yk5Rr!Sd#LTj1Fw|fw1FM&^rj91;GM%wRDyBD;i}L9h1(3?30B*R z=XJGwQwO2TB1~G+lDyx4q;ZNs%;_tLUMG1Ue0ryI0beM$Lm_=+y$&G#SuIJAr>LLM z>Q79P?msttpl=_$;(S(U`)1i;Q-gV*BRkgBb4K(1GAtM ze~Eb4K8JrzqZZ-xFMT39RQQGtg-56?32@HyYE?ic?&Rc0K<;0G4{P=#xDR{5*jWsT zGPMG3RR@S~qV^LKP)hrod88=Tja^7xK>U$GFII}gBRj+pp(o)&tFwF#>>$1|XW$3L z{~Utc)ggPU2zlS}RfO?kkQ72-?f@h)TD_Z(wSrIs2-S<9NAt*67{en0xp@e)01hM; zM0pmtR01eUP#dqB*e@S<$WWefm?|$qAu=WtnHl#r5wP7}Hh>X8-!d-9#1F}EeEd;F;!u<)8Osd?lWHs`*!V7G|~NDTBALM+d?-vH)`)21h)0E6rJc8QPepvhFq zr{&tOs@Gg6`(Rkzw^_77vsJV)hJ?~eH0h7TRAF_NvZD|IRs!?wpHu-ZT zj%S+$bv~YrAwq4nCpsV_8P#h!6qZe_pXZspYjTV#n4GH{jVobvk{ir2WhO+m1RJw`tIL|7d0rpgZLOUfIjaUhlVY%n|5?vKLYt| zQp+%zN6`tI$MIKbi9I3MWubI)Nsr?p+i6>nn5klh)rig2qD^@aLQ44wnMp7pzux!W z**S1uJ10sTAI`HM6k@#D!H8Xuzbi<0ET#9Oa#2wn33oJ<&}+ll@<-}}T1?}a+FZa$ zQZzR#l0LQaKEJUf$x>%|VCYRF5)b`mRc{z(_xY#cUqnuouwDveA-rpNI?$kE#@ep8r4-hg$R9IGeOR$78(Jdh035z5A&L-$FP7Z$F!5{YO`d1)y$r#& zMKn9I95CV9ca*rCjg3w?Y7m2#Y9UVACiHLN&F014FbFy$;Dol3IpFq@_{H~gzP&ajjnW_|QPl`Cgha^~rcUgwN56#yy0B@yugoLS8SQkTeAaP0c- zie@n;NDp7Qyn3v6mn_0VQ^243+v)1@NB3c>pwRNP@YkETd#4CN&c1ws;Z7 z+Vw>=-Rq4O5Bs1qz}D7d)c4Q!T(6;+FaZluzqKlQjn;T*Z?b=at_&{*PMIbayVbSQz}#= zU;~Qb@iEcL0S&NcI!0x#miT*0UL^?4Q0 z?$lD)K@SHD_q&|+i=UYV8-Ve1VhVDhk?{nlA{2DPn18bvP%LNS)oS5*{3vSa83>=# z?y;r|k-iMCPsAJY1$55)+m@_Wr}YoCD3BL@uj5x;kO<4TR$|vWdDqX+-r#w%8l{Uy zcT34t{22wD+<0o6ZcF+>I_BD>;ABPCgN=ypZ>vcLC$ZnnkXt&*fm9e1{lZ!!_tFV4 zd8d4K!|NspLiu!BW_yeBX{NM&>UgUv7wG0>!A7(sm8#KfP|bZ%@&TU66QCw zTZ~I?BF}M@Y3nmDqw-sL3FD!vf$?iRtvBhNif>DuE-$=#hTeUSxvBg*x{({uSBh0r ziEX1X+*{(!KaY|L@Y`_*)%|1lR)BZFz)N@Uth15kPiL8(a?(OaV-XjCfa)5j+m8No zsDnQZ2Gs7qAq;uH-N7%>C`X)2$`U#h-6_KE42Dy7#!P-?_fnX-WH~qdYlAu;9PvM` zHmHWZ$KpE0zq}25UVQ~`hibsZ0j_J0%8Ken0tKMx?==d2GX|E>#<7tysY}v@jWzdw zg*wDClf+Dv?1YBT|C*Bp;X$R$&+N*X7$z1s)z29ouK}8I)}X z_tK1iU<1!Ey{LCwAr&RfVRoN)kh-Ps9%R5V?8Nc5UYYxqrfoNThf1p^Eaow7im)*s zg#Z&%BSFIo!~1>04Nv5dC#=CWcoxYgS4n%*bt|r@O}#y!#dHq0;V@GPSBj2j!Gq-s z*V8F8-mN_Hz!c=Kk03ftiSld~y3a^3g|iI_R(#^s2U)w_=l_kI;wb1V%|5D~rSCGY zv|)5wz4V(oAnxc>!$6U%_^a9u*#Lq#pw>FcLmaalahuiz>t5m*EahvLsJ~#D1iP z47jFLqYt2;AfJY#(@y(D%4wI!tD@L*<%cGW@NdShYgO8Bv3Dmh^&;&gU<2P1A@+h} z1w9?2*kJS;Ns*xu@Ly60Wsi+q*S1QwbyLv0*0iO3`|F7bOT=keB-7|6t~|n7jD<)z zzy5v|&8{(}qC3`+V9pqL4N1)7iym1 zpLK@#G80R#NiPU}8Np5GS3HFT5Rw|^t1Kqp_6OCus3|j&hc$q4`rCPF9}CKdRaYr~ z4KWdKBsx$i>XgfTgIji>Fygy^trM}wD9T}fDbVwm6E4PZcVIO+X*WNboUWTT1EFl9$?$p@ z;kJ?Kp+Jun#vc+ML>!3+p?80cWbdp}cuFq!I`pZMv=XC566+;nhGho=l*F2X40Ai~}!`r>`KsqNCoy^B5^IVtZn34cST|7YKyURV9h ztSp+=OZN4Eg&ve)q~MY>N1zl{`4F%oL=+~6;eg?m5!Ma;^;T0n7sWb8%7+ij;(dyO ziZ(^V-${O-+)FJbAp(ugP0Pd*RP7uDv71-CzEpz~V7Lr{$0~ zl_@W@H%;M(Ic~*M&6-__jQ4*Tqf;%5Y`~DDnDbY|hlPn8eV1qK?UZ3HxSzM^u=uVR zsmw#AzKR|2Z24wKc$nI-%WwL(+9!)sL*mYfG;m?-fxX?RYjoh{ccj&k%c4Jt`#{5Q zXwJ1bFs$68QokwPTqMY7WhLpp9jsDRRmA$1)2P%HQ3VQEnY5Lcwd$rrRaCFi67rws z{O|$AjLM0l607TVk|?ttODbz51u=_ufWeueA=#I;)D+BH^3??`+9vs)~bU5xCo2LD%~k*v{dhfLQ80PVoCZw5o?`Y<6t3dqnu4B zKzSFN5It0c*cXZ7R28i9{R%@4)%bDBJ6c?-pXv?zvkgQUMeJ{AVYdR`WpZa;yx+UZ zSNc1a+1cu~#Z_?y_nq})X>m>K7##u*C%Y2m;yN)qFr~Z>}7CF?;d>(qxhw2Ps)S`-||f+udb|08qsn0eHNFGM+|n=%`}A z7${WS5B-}Dgcq_rwk^qC?qHOH=s)CaLJ@(|G$^CMxaBohjq~u!XOug90k=O|ac_@@ zp5TVGqWXAzQNJK4@#4mUqTi3Tr>U0E(xynkD3DWI+WiF`jLF_AW*$SM{O$|+o%P*- z4*VPJAalfarY?d*K^06Xo*I^VAgx~yjE5=+(y#2!ZK?mtaD@@j+w%8`a49iTKuZ7E z{giJJM9GgbI81{M)w1S_05CO(yRF;47j$Jl2&`T9aeLhdf+TGNg9Jpd#H%a$et0d& zGSda2u~n^qr{KlqLQ`m&Jt$<+R_i`W zwvcZcFhWgD)!hYj{;nZKHZRDbDjMI|+FTbML~;|dYN*;HMa|zt{6Q|6b{9;< zkP3s+e)t+sf>{4~b4pX!9-mTaIn+vMvE$8z!<^dF2H({MLRssNPNR^sJCnAd?h=ie z%69w7cc@fktex6Cs&p)OL!_>wy|Yyc<4S2tzRnaR>Nwd}3-|o~_hv!6>vj-8^>^00 zCKvtWJx2x$UC!t|J~d>1^}i@nG5t(iu%oTPNzMuKPM#C_>>;{<>(K$?gRovMAdoJN zNEgsg{e2idC9{u{?$fylFpj1#m~&~By->!=z|YQ#K*EQ{F*B?XK7u zgu=yRd!~N7o@YplekP7{IT&nT8(v!X2&&IKU)y1wAaJ7h|1aUhGs#99po=R2FHq7p zU6;lWFno0SdQqqgnPWX5J;eK(8c}+O>h58pa0L`1+^gveS!JJY)-y;QOjd?>weN-i zET2n<0jbp_d3Mqt1zR0=;HeE>Du%dK*bf|_>~<0Xp$*T8P(5E)>@;n0O7{(C#Pvm6 zS8x`Z0uAU}#}1vEQ9yIvk0rWVfyDJK;$m{EInf$~gBjw0ONlU!UaNM1hNnlGlv(p_ zQzPIPFj_V7V|I#0FhIn`2{|_qQ=x2K#ad z6=UQ5pvu$V1~+Xpz|pQ|G?I91B5pp>A>eET9^-MJdVs=#Co1%Y!uA{lf3-qd$270HYljMAw5=8Y%JvObtGxYZKBk;i0eQR+O&Zuk&JhcUG z;RJa<&4SKUGN3#Qmz#7u3_aa{_Pn#@A$H%N1GvZgUrH@}Wn6bMP?~$N8*Mq5_dQUB z9ei>@sc$9%fw)YC9Chdjz@tG0_Q?MYxap4F7Jx=!nct+k6WCa~1y5OAhSBu?A$Qkd zy3-{#-(Ui1S`LdaP5~dt5=0N;(vw+`9Af4Hl-3@wMEQKo@Rdyi-L5|nWQ9z@9Iu&s zJPF==0cic&GF7x*0rO&qN;CJ@{>I%fJ2~)&JTlT3x;FXxe~tA0rTC>i5%Dre7>ilM zY@S2!fVhq6M4Y&&Z?lA?EslgM2+NNj1KplAjJlr8O4v6$&wlSij7$MRj8=*H3Ytie zOU6xu)wxqGt6wJ!Z?7X$2+MTyug@2SflOY4iQR_CuzW;@_xxhq=-Q;59gGZMe0m0F zi(ONCd=?bg@62)_`>zKvgoAchP~+Pa9KE~@@ph{5!e0y!$)Ya&2K^*T;eq>W3j&Ug zjyqHD7w%3XZXh4c-ns; zEL(i-GC#Uh&1l<+C{eQ;+h?nT8QslhMz?5pIReq!X+S3M^(knVQ51Vpi zo6-|+riLJ`T-YQ3g8q9yPa&FdEC1t9IE&O)N6SEWb^~5YX@bjWOvf{YL*JY?@O>n2 zJfRj4eZE2~dayHtRa#P2?eL-&@dnKfk!QC5O7R(aL>d<7v;M zzNBu~IpQs0B@Miv%*@)EMdI$PPtK&NQcR^%}h|XWVJL`QekPx+oZv`|A$y)4& z_UAef`a%$VsGw{=V<$k&Gc$u*22NdRFOqJn?)#PvFv;RF?W8mKn5T%WZc@mNyK*@f zKKx~1S9Ms`4CEVf^p%d)pJgaai6gtyWgbj*=02N0zM?)*`QyOLoHFR`#-~O`wxf~_ z+iu?RLRE(EV$KKNA)qnO$8!%8;E1WB(qS)t87Ufe`oVcPT?ZZ@fH9a+7|X)d#dta6 z88$RR3brM`bW)@s6VH1<0)%bA-8l!bAqJRGoTC<-Y6xanGw&&x&kIYhym6_B zXu?H;=m(EIbpu!=+m;Uocct4Plpmy%qm;|r6A!s zPy5sPxVMBOI64j55E$2nvN|jrI)1hZslmGqxqo*j zKb#Xqtck&e45$8}T})?~@(J6SS$39KL`F@WQ-E z=G?xwwCOry6g?qww$EMFIq6-8{osXf8QqIhnG*TmyWa-ZU-7SI0dal0DXSv|fFhr4 zL1?X@e|15>04(APCy2ttwWxY>XOVdb0Yex=5584_DZLjYdAxIMS1!W?A*JslJ#ylL5g^ z3NB|wy~+uKZsP~{8)aJiPoRD)joCRnus@2PCV=^lx}&Qd69Y{ z;#XgWIvt-E=l4MMg|H@Bq?o23A%Em*boh813ZWhn)=mN>h2aM3VI8@=KsX2Sxup3@ z^ch*=OeIW)Wg!-@sbkVH=eY4Lh$mhigxnntDO`tsgfXlGE`a%FB+^r@Sw?9Yc?doZ zRuxY)S;<+}bLgc@VM8W1nF0_s?>1+3KGlB06Gr{q4Nn5F3vf`nHm^%U%h;TibW&Pc za#2)}3KXcqA>$k@?wPj@_Z1D+>8LerpY|L81kiykMM(7ldSIIx|Pc$;>1an)Ss4qy)*>9S=rvjPvQ_RXW5; zf@9vXm`1q*eFl}m@>Xas?ow`o+P@1<(Af#|!gF*4(ed*ep2cJMmmK8ry$fx})5Yi~ z!ev>!wqRPmR6CcKmcq1#>UEQ!akKA4@?xLWKZyE)i1X&_98&JrJD^_`SqX49eKnNx zmPk3jx~w!WYqO?FM!t61sF$`7aU@HON{W=Sy2GPa&>-i*TQt&t=Xhra*ab{5(g0@T z;Olht#5h|^1ZmR2{emYHpGACrT59$Mt2SHVPoRpLg62oiw27(oQ&hykh5Euwi_68o z>}+MgC~~v14F2IydTvsO@pP4n^fSK_< zJU`dIOK1Eyt|;v(g4QBTYYFVhH1rCt&%ukE>z3lY%o~xEJFr;9u}Plj-{@JT(g&Rz zfS5;~k-;dKrP;_eyTioEqwA!xMA2xSp<%izGh*Bs+)UNrpE=uKS{hh_T6C+-+UBc>1w-u4omJ@3IWR%Lw#d^y`+8}`pHMcgw3QdpvM5~ovQhE~>- zz+b3w3Ob&-JK~UR|MJtmo&iEb-b@3?WT<}|cRt7*;;WC9^#jr$@yC z`X}*!rD1>RpP@;_RIUEH3JcF062*JI&SJ*duG8xs6|ji3J##xx>bL}9{GEYH5=Mwc z5e#akS_FDhD8E-B;=f8jFK@@rHgxpaez5X(HS#^9@%RcRIZ`y17Fsx887a@Rv;pZi zOpg%8HXCtfJVFig5xg4ATz~lCw|({()Mf8Y_DZ2Bdt^kBJ#ra^ zD9X5yGLr02QASDj$|~6-WXt}aZ{7DZ?(gsaJ$}FA@I1$J^tkV?@p+%`^L(xI*Aeym z<{T+&#uvVKTzsG`ZC5&Fs?@;4aB%JC=QmQm+g_TXI!5IWvsYuKG^2hcE#cAwY#<9^ z`!Kf}BHY=&5U1VdS8P=hJ%x&)l}FErlB+X+&Sr|%Z37747AJf*$0(lw9qWUswISx$ zW3JBY`cG94!n+*#Ey~0>dVh~g?~C1DC!ZFb3I$f$CAp>+-uu^s&M9=BJx;S)Ro}8% zBMAX0M=cF>+Botl&pE*vs$xs2JVIWrS#XwlZ{xUAqMjP@!b86XPaWOP{V;0F9lkFLOu)xwrXuzxRO5O&5Bt1|b9g(mTcCx&!kDJ*>nMYt? z?SuPl1~Cr)Qw0`Z>=PVH@{wt^x5y@jb86?SJ%oJBqy!!;V3F`V_4O;PN}YzL*_CO) zWBk}1sFm-UP}VLQ7Ll3MnPkV*5&d=Z9}I@9+@#W^=wOi-+}l!n*9rtO z0-%U2CFC6PKaPa+p{D%b&)7*azPfR~;5tpq(cE%^ZooF$B}#SlT&Cwfl1<_)GbFzg zo63Be1KYM3?jw<5F_P`*DUXjxgNiB#rmXD-C}3vt-E>(#Fj(DA_xV=t_Ts{RnH?lv zgzuxYzWJ_4%CvBmxUT83k6%6$6MJiLC&K*EboIx3f9ynIkBphP{37QHI%73*s4CEV zr$6P9k&+(YX0M(enf*5O*kS7Y3v@V)j$H^is#~8#EOJ?n!Jmi+ov?oYv%Vrwou1He zXmt}8-ED;Z*IaKvfFR+r`7~0p091A5@4aC9?nZ)6B)o*cpn4d$u$POhwQYj7`7#pC z;YM^dTW?e2UtSl7;d;P@ha}6>z{E`-Ie%uPcGe;@KFW-ILqjb*zr`qA3y`~gfWQBm zhDfT{D51%?5A-1XVt`|q?BQA10twj?L8UL?*htnZxLUjcBEY7+g2Y7JofZ2&kPS}1 zU2H0(mi+zxKCn}L5cT;II)iON8`EUZDZUrlPd}2E#Bhh)6nXKgqFe%A21;o5%x2Q* zo#UsZS-%WHOCTI_)gWD-W22(NEI?^50+97hrsf*Fq8X&@Ig z%N(5i7;S7J5ys+**L<*v(+83jwABG5(I$J8mMlI&B@BYNGwCBQVE8)xTZ+F=m;Fo;(%-Ao{Xcx0nlIJzZWktLoB z@jn92nhOp&l)FHEcr({%xyOMss9lQa9Q0dfICel?H)`(YQIg-|mlP?!fR~D7(+Cm@ z5Mmp^N>)MSdzibSB7 z>v!s-=jtG4OynmlOV4;Cb5$wU2gWZ47(qJ+i$!e@Y;8W`- z8I`pmq{D@(Sh2L4o|{UDO<}!I)()eVl+646WC=vSBN`9Fl4vh%GQjkAyj}h8(b!+7 z8w;Y-n4|KCgtW$;(OXMLn3XKTgME-+jd7{x!qumPz}+q40{L#8unSq+Z`i8~CVpNG zqTSjT?rO^AqX+k3jhOVFf8HK!97Lo8Xp=HUKIu>vtwBr1Hge_<30FCl2WV}86a`|+ z@L%bJ>}#BYrcq<8C)7H#Ss~tspOu`ip)-lMTug;$?7N0mi&de&wJXQ((3T7uqsTgS zVzB_pDlv26U~6v;K4z!)d%rwx{xvZU2-EUF%=i5t5)xPKHS$uO2E13-tWZo{-#waR z^i^5mDfd$dxhR;<=V(C8e*4=UFASSs7%H@kA19&|8TI2243JFV{Eep~$FT|5`u*_v z`SNvd+cPz_Pcnq=`oq~LCkp5Nqnh`VKRXd1xi|!3S+_2f98#;ow)?l*){=}dLgybr0X>S-oR>W=CM(uD4bkZN z`UXZ^H-jV>ErBw2PmS+5&p?(h|A-UU&Pc?MS-^iw4`81;Xk$wAIF#cPH%H&ef_q=C zmx(`A4}k`@jE0qdDf9`?6sy^jb5gOOsHxM$0Nf^+O5)u%-?9St=5X|yd@QHiQ1{L|b z@%4u1`w|#q;qhs1-xrO;w;vJecdB+7V_z^dYzb+FM6RK0nb|2wYW*fDofYld!6!@8 z|Ek^X68$|GUJIrXhHCqsdKtx6bUrH$o)j`VO{9Xg- zhr8M1g~3a4*+kNnZ25^B1)sT-1>Zp|eJc0CGzq3X>DKJFgmGOyuX?+b9ET3}dL(ap z4Y*9pV)p@1ToltSYsN}x|Dxwu3LR6bImndS>?)rSQxMWWiyy>K7s+)#F1A$?@yJ)J;$CpNWQ+g4GB*LfD^iih}FG_l=>0x z$o%jK9I$E?l36O{{47;iRu>tsl+{l6aQQ_u5K;wde_ul!a1HS|T3x@j&i&>*T%ue2 zGL-^b+%FW^LScYbN&6aptKms=?N88&9YJ@Gg0s9Ex%mwc9E-PkK@D6Y^$fD$=nQ>w z&@?Q8_Q&T>-(h&D48lF+exBAtHx04}<6r3m>^DUD?CYMgo*M1B`@6xSFujePmi12P z2!Dbcp`8dCxP`ZyBb_{>7X(6l6aW;Ek+Wqr%-G)YOS< zd=w`~XjY75nOP;*3J8#7qWc}uzZ1c)U-xMs|C$o(0Uzau1;d%sOzgZ9uJwW8vH7eC zFE}P{K)TUKlRft4(||Mjh@73tf=gWfUza$*4bnVeoJU$Om@Lz-Ry{b7tt8ENEBlkW zCN#kEnlM|)!`wY~-*3zn25}1vKESUluT1zpn+XhroE8)!gP8Qtj`0OUY`#NR&SRy^ zi$_{#@GtT0_==G%9-xj&8C8X&33& z^l6!zUyv_7KFlh9I}ZVPj)ENGvcgQnBW*j7>Shm^{am^C)jb6;9vO3L?!U#tVNj8e2h8X3LFmC zpySjH##cak<3J+YR!aa0#b$u1#y+;$7+n@c@yHu>lg*>A(_761@2)WNn@;oHouj+< zl$gX@K1sX-=JJaGTgNdSxb`Ab04F(4zfV?j61AJmm2cxV z81f#gh4c`c1!ksIm4YeZ2d;|IjL_(Zx~_t(XS+|b{J+MmQ|gD#$6P^O)S7}^7aC~( z`{#J{9?Ux8FQRt{Rg-(LLkd@w@(y0^zQ|TiP=CNn5xr$^o~NxvO7elA%l=gHo{KA_ zI(iSA`s-o0We*4114Wtn*Kktroqm)=8E$WVzq;!M|NM*a($Sb73zxBRTqab(9TMpa zgF$=v@KuL!M5VlsI?l-FjF%%BU;9#2?tYm>xpDc(D3(H0B=Tg{r+ z#n&gE`UL!d=dKVIYxnZgAAC+)pGhZyMq5VWA(SF;;Q0q{xw}1l-`zGo*Fs_UTjn-SF zoq_-J3Br*!0GtNdsG=Ld>7x}SpA};|9f#2>0ce8zpp`P6!MUvc0Pe&Zt$wFs5$}d6 zPz)u_BVUz)j*dB~?=z66rfgbrq2vqGFif8gOB1bV`^gIsRE^-Wi|~> z%lYl>I1?|yB+KP4vjYuWAt+!jN+CNBjZRWKW`d= zJlL%9a?WC$uiHh8UVe!Sp1ffab~)ZBrjsK|9%$U-tv_qUEE~s%mccnq2@gom{34p< zpxbbr4)AeTjH!4?LUE`YdPqC4A!Oxo*tnsIb7QWW`dt%JRe&OutasxVzDWvN zmX{z)FkJ;*cX-w2iPaCG0WdDM&BAY=kVp?M#iOI zFb8rHy|Fg}yN!5fJrHCgLrzfLrvDlpJ@wazR)6Nc$%XOliaR3sl0@CalbT_*jYRf4 zm}cC;$I}f`yU~@cajBj8=I#qWM0`R{Lwv#_F7#9-qaCw(;uc6aCr*mLloWSV`tB^)<4!!3# z;N!`GWz$`+u1LL(8K3)#7zq$EddzsT_ z-k)!lnrxkY+=O1~tn8CC+at871Y7%Sg@82ML57=zmmzRnQ;4AHQhj~qhNoN_;jVaLtn-$|rOu5Y}v;n(Gza-v4 z4!t#sLB2RHWb93V^;S2y^Y;41zl8+lGG)yxKyCDq)2#zqzGS64X@={w7aWil2EV28 zdjPZtychlZx8xHzrz;_2qJm8NN-Ts_e-t{4L~)Y=A99hIvxly=5=@yFL8!WUp9rVd zo%o)5GyJrDoq+q{g*R}S0%Ro2bQl0-85Wt!>>U2G5n5kvhSV#q@jcf;vfyA}AIqmW zU{8d4E{6MzSI*>iY-ZC(oItIY>|fVC#}emb)v4pQL@?oHetNO}&k0YOxS`f5?Tt#| z1C17`$@CcGI-d0;9R?X+1o6Bq>8)3Atl8*TM50`Z7J800$p3I@t!SLe{A#| z=~irBfMi8B`Oks?ABAfl@1hkgoWHB-ad*4vQze=9pbPgi`yWJ8#Pzf`=e;{-T;wJD z|19PB7gWwhbcPnL!P7BJ+^>zz*TlCjQ!j++`gLJb$n)88u10o|Iu>5c4E2OV1YwFlE%*q1f6TE^w~ z5@PoA>gTN?-3ydZv7!{sbCN@XBD3JFIl&@1;&%lwMB}Ri0QZp+0(D2bOMv90 z_gGWX&*4`&u?$Nn=QVQOYS_O@Q3+DNP2O7t`gKUa$FL2L`z5X}3zDs{j}gAmhsXGY zo|6k_ZN+#PxHN-qgE4;w2JTfAork1b9XT9dC2ZXA6-pgciV1N-i*;Wk z_cXYsKT2iGqdOK!dVfYnhBcvk&((eG`iD zWxoT1V}(DEZUGbTxqi&$yP-in`MUl7sBp<%}sL@$cYpR5de01$blOOPp&%D9W^7#$uLf-VDeRwdloq9(cXYH0Y zrD7si;Vt*T2riBIqHT!f3#93i7l`;B2Boqrk!4EEY(g7bl`UK*S9G=2cKp5Lro zo5D?e$JphKeXvJN!<2Z;s=D!$)dX5WXy%f9@r8NwD zU*GsubrWvRX_!ss+V_e_{=QHoNpL8ie9khcaa=NB2l7_00`r#l-~p{>ncRp(Tnp`K zjT%WNjQmeJZ^Rm3YxmP7w%4OEYbvEF$X|mFNTBT?Cit{#gD;4%3SId>QoNEyipsirr{z$grfk%l9!~EcJdyg~!J$x#6n{t@poblb?_l_y6t}& z{D1%V58_h2hooa(SmQ&g^5?YYHE_GfSEs|Fnh%tW-tFcn4 z*q58Z=WPK^RRKVirPIru+4 zcVzeA6qekz%l2AOQ-k(~e2fKfrG8Ng06fPi^G~bm@_*~;Sv8ah0_5@LI z>0K4IDw3C^PXX0((q7{v3tR);z*duA`lIwnsVtwbr4%9mhS$~(zZN97vKgs-wqUWn zktt5`zZEe0siWKu6mhj^%|uv-=10BG-90*Nw0}z)GDV$eHDmahpJkP8qC8cPtW{CPfGu(6Ur^rA|7y& zVA|;QzwAC3a*K2ur8=|6yOtrogPs{Zp-$MC4>s_G+Iixo&FFZS&NnE$9O>jA3wME= z%MK_d-sw<-(B<@0qqn#7=WjUWAORK<>Fbw!z0Q=eae_xovN~612_mn{IkIs$jfytfM5fhs* zlJ`P4Ojxc!>RmW#FOR{B*zYT_&EYDFDtHHKBEJ0q ze5-}u-`$DB?Enwecj&Ucnfxr0_ib;WH3w+oPdI0zgKf}CKt)MQ^TmJ+f=aYbe+wMK!YSv45Af+cd3}xLj$8Z zm5@I2TK{?JpdDC?W4k!syo#IZdiirEsw)FX_b>N`;bOSb^c*&CHs}sG+5UhKihQ)5 zhI2xtS`c=NY`~e>9DitV>GOB5MRm<9H=*TUi|6ZZQY2-Dlob9qP*t|*iQF|{XRFZx z3TDw;v-UvoFI^eFqBAdm)1g8bFJ3zL@4?**wD%J=GZDt>BgaclLi6<%=Jw|U*NaJy zqx?gaCC~Z$MvG;)yPRFBhGoLAyIiK|m%it!2 zWaNXO{LIZDpB{J2Ys}Lg@vGOa!a;fs3k~iZ^djCwW3s~1Gqt#0crT9V(zXdZrn5CC zqWv?g0Or0v_|9hd{Aj*}PWeLY%{}$|km2(QT3M;e%U4^|6iPmGCv;a+OHBue6G@8v z#&lxZVb6#(}KSNF{=IM$4`<`{4{MZ>;eDaF-;3`Gf2g{O@jNX8w%*zc0W&B2Da~@b5}0msUz5 zlFpa?h#j;%26xAJR_3X>HRtmoOU^t4#rToPq1zOtUhns zF=zd2>QO<}oxEeju0b}$KkZ4^(>qg-k+-gs&XX?4%qPBGARU+QiqXK+g5GnJTQoV~ zcjedG0?}`4d@Aj>cDt&T(1gF)mSCoGBgyVOQRtoYmB(w0ivEQ(j?x9_}@ow3m z*_WVNxd>nFMYt2Z?FBZWD>1m*4S0v9f_#u~_B1s5jzSK99$|L6-9mn)u28AO5W&@4 zU(uue-#Aq~0W%{2sKVb+Ze!s{9oO3YOCIhH=(ioEy@H1L{%g^)IX zp7hgUqA&XNc@LJxwA3ke;0VnrW9bVTz8b3O^?<-yZ*8ouChi!gsfnfnvKj0gJhfXg ztWke5{0Etr>u(~J5Y*4tAzH9_hF>TMz}7aZy{_Yh=FbJhH&1P}FM#wW{By!lHCi(I z>Z48a@U?%1?Wh~i%0XgZfG#%vo5#*x$43tZs~Lm;L!~m2!T*SVQk`4SC&{U$tG2{gX z$gEcCXGc~H@@_aT!pZpQAY|S0zDa!X0x;v9(@_8CJES_;4W+K3mD(ny;{o69;d<+I z2cm{q5=zhA0wmeT;}@V52DWqwWFxt+u2fbaR1I5oYqr0K=KGpN)kZDjm1#=gTrP52 z9Aw&$cG6y%7K6~N%B%6`6p@f|{P&ITZ_6^in=M|?NOHe)AHciQ633_;c#%rc*~}G2 z53j{Q_rsC9Ys0U{{KXD@l1J=-eeUD8HYcG!5n>~6pdni)854MXl8B5OCcA*7D?xH! zy|A(ww#uO#T9kIebTU#`k|Y3D8#s4Z%EznXNj$@w?%1nOiSwoOOXd99F@ly2c>qJM zzhVWraDd*A!UFU=D2QrcNegWU@VEaDd0g24K^}MPAmLGLk@Bg1RG=wK5kRa$)m%&t zr4q0T%sid6{$5=0LP`&lc#l!=IpVW5O}G2hf0q_Z|-4-c} zQWdJPIj~Kz_SK+wGQwgu63zd5760ZU?3<4k#{m~)deLLAjN(7eHC}oz4X=R=!FV0{ zq!A^6^<=b@$@>M;jVtbIQ!F~iqSr%YJ=xmW<`L>p-is@!0ZFWcnN$5#wg7ZiXp7~*wuicvBUN0|LfQxZrO174d}1{+cSMp!U=`I z62|;|*tK{O;4DMy@&96oB&#Haz1MH<=EuPmQvw8Iu(y4gClD5I910t8E3ilHvWm)Q z7s5SOsqbiG6A~9CT`p1mFDc?kRWJpz78Rm~aC>u6^D>LeSDX2I4IwQv<4pTCPKrY<={M z@Nk4+4v+)8lC(Zl86a7(9^EG(R`XPpY^_G`39k2D@rd(n6YnvghAB>t@6$W*&n7^N zm>6v*W`cclD8tW)i7H?nx-S%*=9}&S3`^&e^LDU#d$s9O<>+~NdI{}cJrOOMR&yx! z5afKO8ZA3W+6rqd&uo8#rF5zee32hOVm0lC??*lTyOX%RwqJ7{V9#b9-^ue>)S{HJ z{Uv?vghDl9PMg)pfC$i$m??}_ebSV3yDt1vD;+?jt%8P;Wt=H%iDD(TM#O1sTCGR7 zp%Iz}!Z#08kqTyt#p`URskD262Qn^B)|9vjAKqn%o_BeP`?Rnyq$c4?rY#4zZ84GF2QcVO-4NyU`>z} z6Wny(U?D33SCpqMtGu_%Cs%X7A`wtw79fj1w)6+lFzpYkWRK@n&5++_1ME>w63h`R z@B)7G?bDfK^W(o%RL8l4Twzd6zmY>c$qIfNF1lwFbA~2v4++LU%5Dp46(taa7o8+Bj?YFTJ)t$)VL7e zUfAKZjrl~N+Q-q%2Prtu(Yy*uUB|M~Lz;cnf|HU@XQ4jK;y5SZUlE*qme=ioba|{8 zewcJ!9EnKQpYIQlX7t{VjkEZ-`FeU2B3xm^)nwUqSeoaC$gvR~E3kc8paDX*2zpsFA zA|^M4)R&`;T4W@uEpc;{Y(0HhCM6>ZhrcO^@5y>_T87m*spDK$`=PQ!OJ#MBwj}|E zX9eWB^73m(w2^jgzqD2hf22$pNd_IhpXV&0idzl}`exAngkAE5BkDAf_ND`q0_)^$ zDBdlh(94!^XY{IQqSksxFVatERxdIk8Sc)HwlgQ7^ps819xo2{FrdmN}t#pCkiT`ITsVTCrns7 zg$5LaD4ymGX$mY{S01PAfF|zt(PT(9d|5POPqvPBghH;PS_%A#M<2XF6@r{Eeg^oS z=Fng;u6=MwAtu>cIGldfY3UENCNyNdg^c_gq+OP#&6KD{t_#o}$tC~v!Hnp-(8%XQ$wlXDU zAXV-FLP2c4-{F`sykx@_Spc4}4RT5y0TfBO0raPu=DEE251*q!MBdj<^w+%er**la zT&PfTmm3-la)-i zGGl`l{TO4BimRa8lwR`@R{NOEl@GCE{Uq;6$`F+e*U`5Pt`LcY!w{8Pf}Gx zt>wPpo05nZA`cmGm9y@ z13YF}juH=&ha6OF)AKVtzDkw=Ld;>`~4|CLu@rYab){B>dk$t4UOremelw zcXP-T`@|cf50Er1bFL8XvVQ(53&Fv(aIDLRgw4(LavAF#nASJ-s-VD5VP=g38ph-h z9tzq&w?3L7%xCB_+!;4KD$<&toU<_pB&!&Kn)-$&qy43Fdkz{KhtD-Nr@M&)NE$cH zc%e*}B~Z^|T4wWC+q3YUu<($z$Keqwm2x9ew@4^i#D)9XS4|3R*N7~>I%#z)X>G%` zusEyJA929sxxb#|3R)W6zEPu3GZ-qXB&=!67r8fj1L7!OAoD*0wyc4qXe67`?G{H{ zZi{U@Ph?G;b3}g&sH<-DAuSXrnfx^Ro9f!$>I+(OUpX{(E-K~9|F6`A;iXxSciS79 zQIm$?x;trgp?*98NwMdgAA+9kTW_(Q72PV;3z(W;0#Mg7=E=V5_t7dZ&t*Nn1+Ql2sqe6vL9qt|4O0~0@U;!_?*vM6Gf9`lb z@sWPWY4VBOVnOZ zw}LN`z!?S=k>}y&>oADAe+2J$r|Cg3N0bvnE(YmR>h8W;GroSX(}`9IbWzUOuYP~V zjJAK<4F&cNx!*OownADL*K_TNg<3hikZSJ~pd@T`AX>UEtJyrp1XqUFB7Pd@@=2Hga(?Vudr=yh3aoQo^x<<3ZwPwz;mi{zHlAru*pL#+5L_1Y>^C6(bu3{i(cK{eu zXx5%o7ZJ{NU-doQB_NY@cYidXMbp4)UQ8t)AVcxj;6}GlEYAioI{1jG#!q|j4k62a zA4CY`q^GB=y1t&i#d5a-LVJ)bsTZz!dmczHb16aFsXzL95$r*%lKP1OEEQprZB!Tk zoRR+qU5K~d-VBd`3z;_rpxP&gYUQOD%i`Z=vtX9*E7|%rB4%aj*jj zwFK^H)fS;bXd|1El?2wRUfeqXsMy4iI}WCPJ*0L08LsxEC%y+P)Yatz!=9rr8OFvS z>dpZgkmc~Fh3pg8cp0_Pa#T>qCuiB4SWvQE--odFK9l4WO*#}k?f`Q0e6n>f*7++_ zce0`Obro7^GA^xQM+)8Sk2V_s49g_k!g69`iLdZ ztzU=SeKJj1=+Gs9=E++e1Z6MuN}Sbz!{jSyeUP4S?-rGD`u)y4S~+-_FByW8EEk(g zN0q1oXuhv_?+Wz)IO2DDJ+}tDXOO)E%}}*oHK&3;!BbjayHh|i$a+U7`ZIiB+4mAj zQ`mB~>$jOpB#5`5*?B{nrE|s~6-OG8LasmY<=|=R1G=QtI0FgDnqzp?JnTlnLVA;Z z2LzDwnTzmI3ZLZGH*9%jZDLWI8Fg<&r^RY9h>jAriM@XRs8IwL#4A5O{0Sh4HDk^y z$qQK%Vv$yB6<4c&K(lixm9Jt4<@qs5c;1Y6e5>)d_&+rx@Wdh7T@W|_!Ao?H{^yTY z9WhX=H;^l>^X28QoT(~i0I^drrr`H*CsnhDFq^|&RDxi%Wb*wVp7>%O&^&=H@spFv zG_7wy3`d$$v^=o0{S{5uKfk?s4PUeg*7BHZ!x_cc69HV4I@^nco!d_m(NbrWUM&U( z=1Z-LZ4%;6q&S!BpyPiVkfND=EO`ge-d%qduzroOA5tH|y^{Nry&)*tc#}hcgku)m zIg>U@8Xz%gBf#8bE(SO_5+yjjvA%&oUgT>6#$+<>ge+^CEx>F2*pEIi(e(k-P|@Fv z!oHHc7Ctw{wjb_C1OAMsiNoK%be>#OQ|OC0O~vpX5L z1rp7n$&jmJ|3$$FiCFJrWro3SRPE4Ep zUO{YW^rKPu`t#uJ7TgTnXBOQ^$I&nuUKVW99VDRkgadbNj>-H?j`apmg2iBvE<0l1 z&=2||7B}_Odmt5&eAWm$tnb0FJ(Y_(jT;vyG(PxYv*sgAu_DxC=Uq3^JO@MH^ZxO) zizgfIY<`DPZs52l+%+cj-{DI%c7oi-yUnilS#_`ToapW=qTr_G~N^2WldKmHcZb3ZX{fF&QH=Mckg7$d`d!(x_?mz3=wv zb2!LHd*FMu1i7B-hLM76@)>>o7ORQ{?;?=Q{qDY$_cZ5kEdUfg{$B}Im)_5U`L5xs zn3UkH%*(B=Uet3*A6H52Le9TmC0%^@i@ic=ZMz%zHt*9>Cu{)nEkR9TWyr<$SZKpL zHjbUM)+!tDW$+%?7Wo#M>?NY2?XI=kW4GtjV81O1trcJmzjpu~#y;R!n9Zv`i0$G~<%~u2CzhPU{uwb} zucDUxlB|Hj9t6&q;3*T@h}oI_ah(RDI;5An<&K}KV$;sYTic(bnYqyW2-F!p1Plje z8sGG>0>#BEsLBhK8bbmI_Cd^4NdGFSC%!WFNArlU60yR~jAKFKz2(p%Cz_pDPq=r$ ze%L6@6Y~x;f+5Neqzb<|Jy?HN4yF|GnHKOhj#W7z_zwk16LU_P@3ZmGyS4dy9_7~@ zZk=W5IWnSV`v_U=YBg}zDt-@95P0MTQOubTcOJtA=Df<4eJ9DA*?$NUXaq1W&0tX= za6%V;Z&5zNin&|izVq!NxnA?(YmhzV79D>R&h;$uRui*@T*y7%n!d0x@mpsF_>ZV% z8v|lf!JWsITO4p2jE&SQ!=J9!C&A>mahKZek%(#XjmHP(tXxCdS?O^Rw{eG4n|Fq( zyUqry2i`v>w!WW;^k;6ZRNzjFGn8o}8kE&a=Ogf~~4QFP@lvkN~0)IPRm(cE>8{Tk&jRH%J zvSWI%?=0=ti7pMt9XY{ z$lnm`GrkXZh>MD$1L%6L$G`+!$E{w>0DG^-OC?ga71#tpg+0b0Dtkh^la!ENAd@q? zD*xblkQK2UM`I|hVu~#Nn2rv4YomPD!W|fcY=d&HZre^_^a-?sn1h(dvq+6uk*%Yn zolj~6s-_DY);*;9_VP{$4}EcbqMfYuHR%m}n*~MM@i-^iXPRW&5v3Y>E>lHv^_DgA zK}OxWG>6wBsP11q=pD3zjMu>nH>WXGnD>~&U&6j|D%~$a3}SHm)j_M8%Q(!50>O&} zJgSSm%!}?e{QJN?Z9moRZpK$Kylr1!Ra6)Fl z#dCiJ-*(5~^?lJpfTXap)o@zt;y+qRRCBqJb1h#ecVkH8@2EB%Gw4xv>7w(oEad)X zH96*mu!5lOAai5+Z@M}e7xQA)J{%nt<9|4G*Q04wp?ti6eZp{MD{fXSl8RP1&;QcO z!etGWeD>O`qz;8|50_E@^v5B12uSXF?sQ3NP3a2C<`V?lDV=_=g}e4ZekdzR|2onb zY5t!v1>NEg_Xl{LV3f!bz>D&fKT^IDWEkW@yb+tJDKAtdo+d$Jb|{s#^;}L$rPH8n zWUN99mnhSRXs-#V@wdx#=hI^}7BVljdEA7Qz{TN^&kjlIkc4z+TKe#*%QP~W1Z4PO zeYo|w+40Q`E;1$fB%ke7%??Q-^SoFFp}+ti(G@ciZ(?=aIT}|H3IEKn6ivS7rW6PJ zQ&*{pu4OxY;E8TbKYillge&e3l?#!%??tYGr}U(o6oN#TkYfj<_gG7wbyw5WX-Mf1Fc!@41B)x5?>S# zGVvzjGIRcN5)6a$A%*U>;E9B&b#d{%YiGq@cxCg+ND2x0(GAZEBM%KFEwbfZby&RC!EZ zru>1r4696p@s0&Qr$XL!N_$nU`t8JmNIDw)OL%g7=~8`Rzg78>Niuyjiz<8R#h*zBNosG{PsK8(QVZe^##`aDE!4V6y>)2W^D=rfVU;wT z5Or0pmQRivS?Rdkp-U&zt2ow0-2zf`Qkr{faBU3iO>yIw$GBbZo!2dyqs(AYZVccr zd+OK0pGE2oDsMOXQ63g66rLw=M9@jqVF+ zd544t7AKh%n zk0AYc+CM|aJ$*D}fLN~Tf_UfWUBrJ8bG(p5XEy3I7^W4@?zQfK-tqsaZ~*b~$$P>) zn&;PgzZ^=-#f;*+)JIE|qPV@uIq0-YKj=iKX!fP|vxmhqe<$rD4W-BJr=iDmR?+LU z)2Kv5l>sjP-1~Ua9A4m_Fd@tfyWtABQ4-rq^rIkB(}k)SP3FM|)}}SmSp8>C&USNF z3%#yJr)?x@o|fHYkYV;egn7I^GN}3R=3fT~Cs&$Izy13m=^gnGVbjNdiMD==IR8+N z;M~G$6N#@x=jkmo#nS4zn=2mjd-o)&>(6745*CP)kkk%4c`(>nb#;X{6-YeBw*eJLtWzz?s=@ zRbFMX4=wNt7FmMt*SX4XTZK-qBuW;qUJ5q>ZXy1w7h@dHg3{lvqA~Rsq9jVl-RJcF zdfq?v67;-#i7y3N2N@A_>1eQZWsp}1YJbT($Fs>Yh!-8P;5kdLP3g?!PdXp=g&i}E zsmW5hDZs%|b(&9@#t@T<7gvmun^XAxbVq>8?E^N=^Mt;ZM>D&*x!4vP`2z~3);K-E z%?tAUvSMjmae=f7ESnx3ncBGPbu^kYa-xT@L$w;oN;OJ9#;*j4%NuG4YT>7;wl9d` zbLE>KL^6LjKJQ1@1F>h?V~ia}=JVJ4)OnHa zypU=xLw-0&u~)GpU4WVfi&4SE&8ufi4l5mhPMub*3G1p*D#_bzNT&3Xj9wvw)hZQb zMX`j?bR>Q8Dhv)c&~+6Uy|peK!DDgIN2%u2jizB=js=X1%47MPg15xeRgLX}sVL<) z^~@G2Ff6|Lm}+rzUCO%+#S30veuw@TVmpBi@#TV(`=GVf%+~>;?!Tk&fUU_^&zSMAuxx`gA zL@flf-9v9Ch^OOPY9`~UF#KVp&2ne#)Z$||15=gNBt!Ro0>8a_?lDSMo8s7&6CSBz z4vpOrN^sltZCbS_*q*#W3Vhtc{vb-EE%@)BIx(WGFLy9Kps0U*wCOJK+KW&peKMsz z^URi6?aYJ8I;Sys!X73S(sj~B`Znf#BLUy-&F*{9tTDdbEX_&%5UZ5ceCX809|<#9+?>$HP{|dpmtlW7YNU8gXf@k*EFU$w|&3%$Lq742y zfIl@It*>L^=uM)RNH_ef&j-5<47ccY-&nX#Ft&G}do;u)0OOHVew9j)9y|x-kA&}42aj1$Wbi4UrjOW!AcG7};d~v_(7&U%eyo)yVaC%=lvIp2z9C1R?-s4t0mx6{r3cI~RZE;p ztQtPa*rkppPe{208 z^5fAH2fTscdrB@up%xE2z{2=Guf;|rTnNwkm3>pMQ$*ji4`Lny)j`Y20%#|Lqz|O1<`}**U6I;Z zlC;N*V10Kj{?eE^ggX4Y82wlg(e8Q-1)3!Kvr>7U=<0g#4%nH}Rbu*;mVbWbXZ!?^fGsSXzECFF5IX>=Z#kfTevH#y_tGEJ^GHGr zG|qMG!q1jexiTEefRVIoE`Xlp8HWpIJDGZ=IY$1R3pe|TqQqY_$&m4HYJ0a3?&G?Sh!gH^H6z8 zB`7sSUjcDZX}lj^&w2SBkad;xM%3S#1JiCXAn5}TJX4)hobW>A;n_R@G5-0o5HrAI z{r~EMwB&!c^nhaG-qG^~Fk04eLwJ3bnugfSIlI1+mnN=_=Vz~{O{0se&-&@TX$1Qq z*&4|f&?jGDJ5fcI{6(;}+Jh2pHxXHdC+RwA36g~)S{`K-fHZq%8j|tyfEeohxdjL} zO4&VXK969s)((Kciv^p6t7)ExRvr$nh82o%e~^HNwPezSbR5B>Rwf9Gw2;fI>Hci$iGxv^ifKUWv1|vP?!< zM=mMDUuvI4t;~KCv_Iv)z)&QBP$_%R&AC*hKWE><470hlfz>=>!hITHU5R|rTWG__ zH+Uu6l!WFd=f5C*K8WPMy}i;q0ouQf5It3R9?HOf-3Y1Ftad#G&)_kARfPjo{-L|Z zvke0j4KWRn!s^Bzv_6ny3sB&nmDQ|y=~~pRIgs`wS%SpZuq(ujY(04E;pv}Hr~ZtT zn03sB<8BxU1gtJ`8btmVs*1?U3qKf(g*Kt2F1e8Gn#FKW#H7k7Nz$*2apT> zX9DFπ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 literal 0 HcmV?d00001 diff --git a/doc/images/oidc-be-frontchannel-logout.png b/doc/images/oidc-be-frontchannel-logout.png new file mode 100644 index 0000000000000000000000000000000000000000..4392774ac979ec621d31fb18e344456d9e69f7a3 GIT binary patch literal 355164 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%0D*d~Vd^%%5b4x_NrI%-H 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≥Vc8?E5MvvM3f_r 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 Yk=;O(mN@H9pn?C6sOhN^luupzf6}B-R{#J2 literal 0 HcmV?d00001 diff --git a/doc/images/session-storage.png b/doc/images/session-storage.png new file mode 100644 index 0000000000000000000000000000000000000000..bffde7d445cd3c3919c5e35a16b6a654e5109bb6 GIT binary patch literal 262332 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 _#M9)ISk|{(;uN3t9gBU%09Z&cJo-j}xwv%7C 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
  • q}1i+AmTPLdD<9q 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 literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py index 408cdb53d..19d0ba62c 100644 --- a/setup.py +++ b/setup.py @@ -32,8 +32,7 @@ "pyop_mongo": ["pyop[mongo]"], "pyop_redis": ["pyop[redis]"], "idpy_oidc_backend": ["idpyoidc >= 2.1.0"], - "storage_postgresql": ["psycopg2-binary"], - "logout_enabled": ["SQLAlchemy"], + "storage_postgresql": ["SQLAlchemy", "psycopg2-binary"], }, zip_safe=False, classifiers=[