refactoring

This commit is contained in:
Devaev Maxim 2019-12-10 06:27:27 +03:00
parent 6c385327ff
commit fb2a9986d8
2 changed files with 24 additions and 20 deletions

View File

@ -12,6 +12,11 @@ from typing import Optional
import aiohttp import aiohttp
import aiohttp.web import aiohttp.web
try:
from aiohttp.web import AccessLogger # type: ignore
except ImportError:
from aiohttp.helpers import AccessLogger # type: ignore
from ...logging import get_logger from ...logging import get_logger
from ...validators import ValidatorError from ...validators import ValidatorError
@ -138,6 +143,21 @@ async def get_multipart_field(reader: aiohttp.MultipartReader, name: str) -> aio
return field return field
# =====
_REQUEST_AUTH_INFO = "_kvd_auth_info"
def _format_P(request: aiohttp.web.BaseRequest, *_, **__) -> str: # type: ignore # pylint: disable=invalid-name
return (getattr(request, _REQUEST_AUTH_INFO, None) or "-")
AccessLogger._format_P = staticmethod(_format_P) # type: ignore # pylint: disable=protected-access
def set_request_auth_info(request: aiohttp.web.BaseRequest, info: str) -> None:
setattr(request, _REQUEST_AUTH_INFO, info)
# ===== # =====
class HttpServer: class HttpServer:
def run( def run(

View File

@ -79,6 +79,7 @@ from .http import get_exposed_http
from .http import get_exposed_ws from .http import get_exposed_ws
from .http import make_json_response from .http import make_json_response
from .http import make_json_exception from .http import make_json_exception
from .http import set_request_auth_info
from .http import HttpServer from .http import HttpServer
from .api.log import LogApi from .api.log import LogApi
@ -88,23 +89,6 @@ from .api.atx import AtxApi
from .api.msd import MsdApi from .api.msd import MsdApi
# =====
try:
from aiohttp.web import AccessLogger # type: ignore # pylint: disable=ungrouped-imports
except ImportError:
from aiohttp.helpers import AccessLogger # type: ignore # pylint: disable=ungrouped-imports
_ATTR_KVMD_AUTH_INFO = "kvmd_auth_info"
def _format_P(request: aiohttp.web.BaseRequest, *_, **__) -> str: # type: ignore # pylint: disable=invalid-name
return (getattr(request, _ATTR_KVMD_AUTH_INFO, None) or "-")
AccessLogger._format_P = staticmethod(_format_P) # type: ignore # pylint: disable=protected-access
# ===== # =====
_HEADER_AUTH_USER = "X-KVMD-User" _HEADER_AUTH_USER = "X-KVMD-User"
_HEADER_AUTH_PASSWD = "X-KVMD-Passwd" _HEADER_AUTH_PASSWD = "X-KVMD-Passwd"
@ -318,16 +302,16 @@ class KvmdServer(HttpServer): # pylint: disable=too-many-arguments,too-many-ins
if user: if user:
user = valid_user(user) user = valid_user(user)
setattr(request, _ATTR_KVMD_AUTH_INFO, f"{user} (xhdr)") set_request_auth_info(request, f"{user} (xhdr)")
if not (await self.__auth_manager.authorize(user, valid_passwd(passwd))): if not (await self.__auth_manager.authorize(user, valid_passwd(passwd))):
raise ForbiddenError("Forbidden") raise ForbiddenError("Forbidden")
elif token: elif token:
user = self.__auth_manager.check(valid_auth_token(token)) user = self.__auth_manager.check(valid_auth_token(token))
if not user: if not user:
setattr(request, _ATTR_KVMD_AUTH_INFO, "- (token)") set_request_auth_info(request, "- (token)")
raise ForbiddenError("Forbidden") raise ForbiddenError("Forbidden")
setattr(request, _ATTR_KVMD_AUTH_INFO, f"{user} (token)") set_request_auth_info(request, f"{user} (token)")
else: else:
raise UnauthorizedError("Unauthorized") raise UnauthorizedError("Unauthorized")