264 lines
11 KiB
Python
264 lines
11 KiB
Python
from typing import Optional
|
|
from pydantic import AliasChoices, Field
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
model_config = SettingsConfigDict(env_prefix="")
|
|
app_name: str = "Magent"
|
|
cors_allow_origin: str = "http://localhost:3000"
|
|
sqlite_path: str = Field(default="data/magent.db", validation_alias=AliasChoices("SQLITE_PATH"))
|
|
jwt_secret: str = Field(default="change-me", validation_alias=AliasChoices("JWT_SECRET"))
|
|
jwt_exp_minutes: int = Field(default=720, validation_alias=AliasChoices("JWT_EXP_MINUTES"))
|
|
admin_username: str = Field(default="admin", validation_alias=AliasChoices("ADMIN_USERNAME"))
|
|
admin_password: str = Field(default="adminadmin", validation_alias=AliasChoices("ADMIN_PASSWORD"))
|
|
log_level: str = Field(default="INFO", validation_alias=AliasChoices("LOG_LEVEL"))
|
|
log_file: str = Field(default="data/magent.log", validation_alias=AliasChoices("LOG_FILE"))
|
|
requests_sync_ttl_minutes: int = Field(
|
|
default=1440, validation_alias=AliasChoices("REQUESTS_SYNC_TTL_MINUTES")
|
|
)
|
|
requests_poll_interval_seconds: int = Field(
|
|
default=300, validation_alias=AliasChoices("REQUESTS_POLL_INTERVAL_SECONDS")
|
|
)
|
|
requests_delta_sync_interval_minutes: int = Field(
|
|
default=5, validation_alias=AliasChoices("REQUESTS_DELTA_SYNC_INTERVAL_MINUTES")
|
|
)
|
|
requests_full_sync_time: str = Field(
|
|
default="00:00", validation_alias=AliasChoices("REQUESTS_FULL_SYNC_TIME")
|
|
)
|
|
requests_cleanup_time: str = Field(
|
|
default="02:00", validation_alias=AliasChoices("REQUESTS_CLEANUP_TIME")
|
|
)
|
|
requests_cleanup_days: int = Field(
|
|
default=90, validation_alias=AliasChoices("REQUESTS_CLEANUP_DAYS")
|
|
)
|
|
requests_data_source: str = Field(
|
|
default="prefer_cache", validation_alias=AliasChoices("REQUESTS_DATA_SOURCE")
|
|
)
|
|
artwork_cache_mode: str = Field(
|
|
default="remote", validation_alias=AliasChoices("ARTWORK_CACHE_MODE")
|
|
)
|
|
|
|
jellyseerr_base_url: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("JELLYSEERR_URL", "JELLYSEERR_BASE_URL")
|
|
)
|
|
jellyseerr_api_key: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("JELLYSEERR_API_KEY", "JELLYSEERR_KEY")
|
|
)
|
|
jellyfin_base_url: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("JELLYFIN_URL", "JELLYFIN_BASE_URL")
|
|
)
|
|
jellyfin_api_key: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("JELLYFIN_API_KEY", "JELLYFIN_KEY")
|
|
)
|
|
jellyfin_public_url: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("JELLYFIN_PUBLIC_URL")
|
|
)
|
|
jellyfin_sync_to_arr: bool = Field(
|
|
default=True, validation_alias=AliasChoices("JELLYFIN_SYNC_TO_ARR")
|
|
)
|
|
|
|
sonarr_base_url: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("SONARR_URL", "SONARR_BASE_URL")
|
|
)
|
|
sonarr_api_key: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("SONARR_API_KEY", "SONARR_KEY")
|
|
)
|
|
sonarr_quality_profile_id: Optional[int] = Field(
|
|
default=None, validation_alias=AliasChoices("SONARR_QUALITY_PROFILE_ID")
|
|
)
|
|
sonarr_root_folder: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("SONARR_ROOT_FOLDER")
|
|
)
|
|
|
|
radarr_base_url: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("RADARR_URL", "RADARR_BASE_URL")
|
|
)
|
|
radarr_api_key: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("RADARR_API_KEY", "RADARR_KEY")
|
|
)
|
|
radarr_quality_profile_id: Optional[int] = Field(
|
|
default=None, validation_alias=AliasChoices("RADARR_QUALITY_PROFILE_ID")
|
|
)
|
|
radarr_root_folder: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("RADARR_ROOT_FOLDER")
|
|
)
|
|
|
|
prowlarr_base_url: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("PROWLARR_URL", "PROWLARR_BASE_URL")
|
|
)
|
|
prowlarr_api_key: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("PROWLARR_API_KEY", "PROWLARR_KEY")
|
|
)
|
|
|
|
qbittorrent_base_url: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("QBIT_URL", "QBITTORRENT_URL", "QBITTORRENT_BASE_URL")
|
|
)
|
|
qbittorrent_username: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("QBIT_USERNAME", "QBITTORRENT_USERNAME")
|
|
)
|
|
qbittorrent_password: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("QBIT_PASSWORD", "QBITTORRENT_PASSWORD")
|
|
)
|
|
|
|
discord_webhook_url: Optional[str] = Field(
|
|
default="https://discord.com/api/webhooks/1464141924775629033/O_rvCAmIKowR04tyAN54IuMPcQFEiT-ustU3udDaMTlF62PmoI6w4-52H3ZQcjgHQOgt",
|
|
validation_alias=AliasChoices("DISCORD_WEBHOOK_URL"),
|
|
)
|
|
invites_enabled: bool = Field(default=True, validation_alias=AliasChoices("INVITES_ENABLED"))
|
|
invites_require_captcha: bool = Field(
|
|
default=False, validation_alias=AliasChoices("INVITES_REQUIRE_CAPTCHA")
|
|
)
|
|
invite_default_profile_id: Optional[int] = Field(
|
|
default=None, validation_alias=AliasChoices("INVITE_DEFAULT_PROFILE_ID")
|
|
)
|
|
signup_allow_referrals: bool = Field(
|
|
default=True, validation_alias=AliasChoices("SIGNUP_ALLOW_REFERRALS")
|
|
)
|
|
referral_default_uses: int = Field(
|
|
default=1, validation_alias=AliasChoices("REFERRAL_DEFAULT_USES")
|
|
)
|
|
password_min_length: int = Field(
|
|
default=8, validation_alias=AliasChoices("PASSWORD_MIN_LENGTH")
|
|
)
|
|
password_require_upper: bool = Field(
|
|
default=False, validation_alias=AliasChoices("PASSWORD_REQUIRE_UPPER")
|
|
)
|
|
password_require_lower: bool = Field(
|
|
default=False, validation_alias=AliasChoices("PASSWORD_REQUIRE_LOWER")
|
|
)
|
|
password_require_number: bool = Field(
|
|
default=False, validation_alias=AliasChoices("PASSWORD_REQUIRE_NUMBER")
|
|
)
|
|
password_require_symbol: bool = Field(
|
|
default=False, validation_alias=AliasChoices("PASSWORD_REQUIRE_SYMBOL")
|
|
)
|
|
password_reset_enabled: bool = Field(
|
|
default=True, validation_alias=AliasChoices("PASSWORD_RESET_ENABLED")
|
|
)
|
|
captcha_provider: str = Field(
|
|
default="none", validation_alias=AliasChoices("CAPTCHA_PROVIDER")
|
|
)
|
|
hcaptcha_site_key: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("HCAPTCHA_SITE_KEY")
|
|
)
|
|
hcaptcha_secret_key: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("HCAPTCHA_SECRET_KEY")
|
|
)
|
|
recaptcha_site_key: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("RECAPTCHA_SITE_KEY")
|
|
)
|
|
recaptcha_secret_key: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("RECAPTCHA_SECRET_KEY")
|
|
)
|
|
turnstile_site_key: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("TURNSTILE_SITE_KEY")
|
|
)
|
|
turnstile_secret_key: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("TURNSTILE_SECRET_KEY")
|
|
)
|
|
smtp_host: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("SMTP_HOST")
|
|
)
|
|
smtp_port: Optional[int] = Field(
|
|
default=587, validation_alias=AliasChoices("SMTP_PORT")
|
|
)
|
|
smtp_user: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("SMTP_USER")
|
|
)
|
|
smtp_password: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("SMTP_PASSWORD")
|
|
)
|
|
smtp_from: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("SMTP_FROM")
|
|
)
|
|
smtp_tls: bool = Field(default=False, validation_alias=AliasChoices("SMTP_TLS"))
|
|
smtp_starttls: bool = Field(default=True, validation_alias=AliasChoices("SMTP_STARTTLS"))
|
|
notify_email_enabled: bool = Field(
|
|
default=False, validation_alias=AliasChoices("NOTIFY_EMAIL_ENABLED")
|
|
)
|
|
notify_discord_enabled: bool = Field(
|
|
default=False, validation_alias=AliasChoices("NOTIFY_DISCORD_ENABLED")
|
|
)
|
|
notify_telegram_enabled: bool = Field(
|
|
default=False, validation_alias=AliasChoices("NOTIFY_TELEGRAM_ENABLED")
|
|
)
|
|
notify_matrix_enabled: bool = Field(
|
|
default=False, validation_alias=AliasChoices("NOTIFY_MATRIX_ENABLED")
|
|
)
|
|
notify_pushover_enabled: bool = Field(
|
|
default=False, validation_alias=AliasChoices("NOTIFY_PUSHOVER_ENABLED")
|
|
)
|
|
notify_pushbullet_enabled: bool = Field(
|
|
default=False, validation_alias=AliasChoices("NOTIFY_PUSHBULLET_ENABLED")
|
|
)
|
|
notify_gotify_enabled: bool = Field(
|
|
default=False, validation_alias=AliasChoices("NOTIFY_GOTIFY_ENABLED")
|
|
)
|
|
notify_ntfy_enabled: bool = Field(
|
|
default=False, validation_alias=AliasChoices("NOTIFY_NTFY_ENABLED")
|
|
)
|
|
telegram_bot_token: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("TELEGRAM_BOT_TOKEN")
|
|
)
|
|
telegram_chat_id: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("TELEGRAM_CHAT_ID")
|
|
)
|
|
matrix_homeserver: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("MATRIX_HOMESERVER")
|
|
)
|
|
matrix_user: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("MATRIX_USER")
|
|
)
|
|
matrix_password: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("MATRIX_PASSWORD")
|
|
)
|
|
matrix_access_token: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("MATRIX_ACCESS_TOKEN")
|
|
)
|
|
matrix_room_id: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("MATRIX_ROOM_ID")
|
|
)
|
|
pushover_token: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("PUSHOVER_TOKEN")
|
|
)
|
|
pushover_user_key: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("PUSHOVER_USER_KEY")
|
|
)
|
|
pushbullet_token: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("PUSHBULLET_TOKEN")
|
|
)
|
|
gotify_url: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("GOTIFY_URL")
|
|
)
|
|
gotify_token: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("GOTIFY_TOKEN")
|
|
)
|
|
ntfy_url: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("NTFY_URL")
|
|
)
|
|
ntfy_topic: Optional[str] = Field(
|
|
default=None, validation_alias=AliasChoices("NTFY_TOPIC")
|
|
)
|
|
expiry_default_days: int = Field(
|
|
default=0, validation_alias=AliasChoices("EXPIRY_DEFAULT_DAYS")
|
|
)
|
|
expiry_default_action: str = Field(
|
|
default="disable", validation_alias=AliasChoices("EXPIRY_DEFAULT_ACTION")
|
|
)
|
|
expiry_warning_days: int = Field(
|
|
default=3, validation_alias=AliasChoices("EXPIRY_WARNING_DAYS")
|
|
)
|
|
expiry_check_interval_minutes: int = Field(
|
|
default=60, validation_alias=AliasChoices("EXPIRY_CHECK_INTERVAL_MINUTES")
|
|
)
|
|
jellyseerr_sync_users: bool = Field(
|
|
default=True, validation_alias=AliasChoices("JELLYSEERR_SYNC_USERS")
|
|
)
|
|
jellyseerr_sync_interval_minutes: int = Field(
|
|
default=1440, validation_alias=AliasChoices("JELLYSEERR_SYNC_INTERVAL_MINUTES")
|
|
)
|
|
|
|
|
|
settings = Settings()
|