fix: harden kyc startup and beorg errors

This commit is contained in:
2026-06-28 14:12:24 +03:00
parent 08fdd92060
commit 6f1912261a
3 changed files with 21 additions and 7 deletions

View File

@@ -1,6 +1,7 @@
from __future__ import annotations
from typing import Any
import aiohttp
from pydantic import ValidationError
from src.application.contracts import IBeorgService
from src.application.domain.dto import BeorgKycCreateResponse,BeorgKycResultResponse
from src.application.domain.exceptions import BeorgConfigException,BeorgRejectedException,BeorgUnavailableException
@@ -50,11 +51,16 @@ class BeorgService(IBeorgService):
raise BeorgUnavailableException() from None
except aiohttp.ClientError:
raise BeorgUnavailableException() from None
except (ValueError,ValidationError):
raise BeorgUnavailableException() from None
if response.status >= 500:
raise BeorgUnavailableException()
result = BeorgKycCreateResponse.model_validate(data)
try:
result = BeorgKycCreateResponse.model_validate(data)
except ValidationError:
raise BeorgUnavailableException() from None
if not result.status:
raise BeorgRejectedException(result.error or 'Beorg rejected kyc request')
@@ -79,11 +85,16 @@ class BeorgService(IBeorgService):
raise BeorgUnavailableException() from None
except aiohttp.ClientError:
raise BeorgUnavailableException() from None
except (ValueError,ValidationError):
raise BeorgUnavailableException() from None
if response.status >= 500:
raise BeorgUnavailableException()
return BeorgKycResultResponse.model_validate(data)
try:
return BeorgKycResultResponse.model_validate(data)
except ValidationError:
raise BeorgUnavailableException() from None
def _ensure_configured(self) -> None:

View File

@@ -14,6 +14,7 @@ class Settings(BaseSettings):
DOCS_USERNAME: str = 'admin'
DOCS_PASSWORD: str = 'admin'
CORS_ALLOW_ORIGIN_REGEX: str = r'https?://([a-z0-9-]+\.)*elcsa\.ru(:\d+)?$'
VAULT_ADDR: str = 'https://corp.vault.elcsa.ru'
VAULT_ROLE_ID: str = ''
VAULT_SECRET_ID: str = ''

View File

@@ -84,10 +84,12 @@ async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
app.state.jwt_key_store = jwt_store
app.state.jwt_keys_scheduler = jwt_scheduler
app.state.kyc_scheduler = kyc_scheduler
yield
app.state.kyc_scheduler.shutdown(wait=False)
app.state.jwt_keys_scheduler.shutdown(wait=False)
logger.info(f'Users service instance ended with id {instance_id}')
try:
yield
finally:
app.state.kyc_scheduler.shutdown(wait=False)
app.state.jwt_keys_scheduler.shutdown(wait=False)
logger.info(f'KYC service instance ended with id {instance_id}')
app: FastAPI = FastAPI(
@@ -126,7 +128,7 @@ app.add_middleware(
app.add_middleware(
CORSMiddleware,
allow_origins=[],
allow_origin_regex='.*',
allow_origin_regex=settings.CORS_ALLOW_ORIGIN_REGEX,
allow_credentials=True,
allow_methods=['*'],
allow_headers=['*'],