From 01834c6ba74c4b3ed43f4992973e3d380cbf1bcc Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Mon, 12 Apr 2021 15:11:46 +0200 Subject: [PATCH] add check_role to dispatcher --- src/risotto/controller.py | 25 +++++++++++++++++++++++++ src/risotto/dispatcher.py | 5 +++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/risotto/controller.py b/src/risotto/controller.py index 779b344..0c4caa2 100644 --- a/src/risotto/controller.py +++ b/src/risotto/controller.py @@ -48,6 +48,31 @@ class Controller: **kwargs, ) + @staticmethod + async def check_role(self, + uri: str, + username: str, + **kwargs: dict, + ) -> None: + # create a new config + async with await Config(dispatcher.option) as config: + await config.property.read_write() + await config.option('message').value.set(uri) + subconfig = config.option(uri) + for key, value in kwargs.items(): + try: + await subconfig.option(key).value.set(value) + except AttributeError: + if get_config()['global']['debug']: + print_exc() + raise ValueError(_(f'unknown parameter in "{uri}": "{key}"')) + except ValueOptionError as err: + raise ValueError(_(f'invalid parameter in "{uri}": {err}')) + await dispatcher.check_role(subconfig, + username, + uri, + ) + async def on_join(self, risotto_context, ): diff --git a/src/risotto/dispatcher.py b/src/risotto/dispatcher.py index 531b201..49b01fa 100644 --- a/src/risotto/dispatcher.py +++ b/src/risotto/dispatcher.py @@ -333,7 +333,7 @@ class Dispatcher(register.RegisterDispatcher, parameters = await subconfig.value.dict() if extra_parameters: parameters.update(extra_parameters) - return parameters + return parameters def get_service(self, name: str): @@ -342,7 +342,8 @@ class Dispatcher(register.RegisterDispatcher, async def check_role(self, config: Config, user_login: str, - uri: str) -> None: + uri: str, + ) -> None: async with self.pool.acquire() as connection: async with connection.transaction(): # Verify if user exists and get ID