Files
rengine/shared/services/api_key/sync_api_key.py
T
Yogesh Ojha 69239333bc Refactor validation and DNS tools, implementation of onboarding wizard
- 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`.
2026-06-21 21:56:20 +05:30

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()