refactoring

This commit is contained in:
Devaev Maxim 2019-04-16 00:28:13 +03:00
parent b1e2d5967a
commit da46733840
3 changed files with 16 additions and 17 deletions

View File

@ -47,9 +47,9 @@ def main(argv: Optional[List[str]]=None) -> None:
Server( Server(
auth_manager=AuthManager( auth_manager=AuthManager(
internal_type=config.auth.internal_type, internal_type=config.auth.internal_type,
internal=config.auth.internal._unpack(), internal_kwargs=config.auth.internal._unpack(),
external_type=config.auth.external_type, external_type=config.auth.external_type,
external=(config.auth.external._unpack() if config.auth.external_type else {}), external_kwargs=(config.auth.external._unpack() if config.auth.external_type else {}),
internal_users=config.auth.internal_users, internal_users=config.auth.internal_users,
), ),
info_manager=InfoManager(**config.info._unpack()), info_manager=InfoManager(**config.info._unpack()),

View File

@ -38,20 +38,20 @@ class AuthManager:
self, self,
internal_type: str, internal_type: str,
internal: Dict, internal_kwargs: Dict,
external_type: str, external_type: str,
external: Dict, external_kwargs: Dict,
internal_users: List[str], internal_users: List[str],
) -> None: ) -> None:
self.__internal_service = get_auth_service_class(internal_type)(**internal) self.__internal_service = get_auth_service_class(internal_type)(**internal_kwargs)
get_logger().info("Using internal login service %r", self.__internal_service.PLUGIN_NAME) get_logger().info("Using internal login service %r", self.__internal_service.PLUGIN_NAME)
self.__external_service: Optional[BaseAuthService] = None self.__external_service: Optional[BaseAuthService] = None
if external_type: if external_type:
self.__external_service = get_auth_service_class(external_type)(**external) self.__external_service = get_auth_service_class(external_type)(**external_kwargs)
get_logger().info("Using external login service %r", self.__external_service.PLUGIN_NAME) get_logger().info("Using external login service %r", self.__external_service.PLUGIN_NAME)
self.__internal_users = internal_users self.__internal_users = internal_users

View File

@ -24,6 +24,7 @@ import os
import contextlib import contextlib
from typing import List from typing import List
from typing import Dict
from typing import AsyncGenerator from typing import AsyncGenerator
from typing import Optional from typing import Optional
@ -39,6 +40,12 @@ from kvmd.plugins.auth import get_auth_service_class
# ===== # =====
def _make_service_kwargs(path: str) -> Dict:
cls = get_auth_service_class("htpasswd")
scheme = cls.get_options()
return make_config({"file": path}, scheme)._unpack() # pylint: disable=protected-access
@contextlib.asynccontextmanager @contextlib.asynccontextmanager
async def _get_configured_manager( async def _get_configured_manager(
internal_path: str, internal_path: str,
@ -46,22 +53,14 @@ async def _get_configured_manager(
internal_users: Optional[List[str]]=None, internal_users: Optional[List[str]]=None,
) -> AsyncGenerator[AuthManager, None]: ) -> AsyncGenerator[AuthManager, None]:
internal_class = get_auth_service_class("htpasswd")
internal = make_config({"file": internal_path}, internal_class.get_options())._unpack() # pylint: disable=protected-access
internal.update(internal)
if external_path:
external_class = get_auth_service_class("htpasswd")
external = make_config({"file": external_path}, external_class.get_options())._unpack() # pylint: disable=protected-access
external.update(external)
manager = AuthManager( manager = AuthManager(
internal_type="htpasswd", internal_type="htpasswd",
internal=internal, internal_kwargs=_make_service_kwargs(internal_path),
external_type=("htpasswd" if external_path else ""), external_type=("htpasswd" if external_path else ""),
external=(external if external_path else {}), external_kwargs=(_make_service_kwargs(external_path) if external_path else {}),
internal_users=(internal_users or []), internal_users=(internal_users or []),
) )
try: try:
yield manager yield manager
finally: finally: