mirror of
https://github.com/yogeshojha/rengine.git
synced 2026-10-20 15:21:30 +02:00
- Added `clean_name` function to `validation.py` for name validation with max length. - Simplified docstrings in `dnsx` client, parser, and service files for clarity. - Enhanced error handling in `ViewDNSService` to prevent disabling keys on rate limits. - Improved WHOIS service to handle concurrent inserts gracefully with integrity checks. - Updated `Settings` class in worker config to inherit from `BaseAppSettings`. - Added new dependencies in `pyproject.toml` for `apprise` and `cryptography`.
43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
from sqlalchemy.orm import Session
|
|
from sqlmodel import select
|
|
|
|
from shared.enums.api_key import APIProvider
|
|
from shared.models.api_key import APIKey
|
|
from shared.utils.crypto import try_decrypt
|
|
from shared.utils.datetime import utc_now
|
|
|
|
|
|
class SyncAPIKeyService:
|
|
def __init__(self, session: Session):
|
|
self.session = session
|
|
|
|
def get_key_for_provider(self, provider: APIProvider) -> str | None:
|
|
result = self.session.execute(
|
|
select(APIKey).where(
|
|
APIKey.provider == provider,
|
|
APIKey.is_enabled == True, # noqa: E712
|
|
)
|
|
)
|
|
api_key = result.scalar_one_or_none()
|
|
if not api_key:
|
|
return None
|
|
return try_decrypt(api_key.key_value) or api_key.key_value
|
|
|
|
def increment_usage(self, provider: APIProvider) -> None:
|
|
result = self.session.execute(select(APIKey).where(APIKey.provider == provider))
|
|
api_key = result.scalar_one_or_none()
|
|
if api_key:
|
|
api_key.usage_counter += 1
|
|
api_key.last_used_at = utc_now()
|
|
self.session.add(api_key)
|
|
self.session.commit()
|
|
|
|
def disable_key(self, provider: APIProvider) -> None:
|
|
result = self.session.execute(select(APIKey).where(APIKey.provider == provider))
|
|
api_key = result.scalar_one_or_none()
|
|
if api_key:
|
|
api_key.is_enabled = False
|
|
api_key.updated_at = utc_now()
|
|
self.session.add(api_key)
|
|
self.session.commit()
|