Files
2026-08-16 15:08:52 -04:00

128 lines
7.9 KiB
Python

import os
import secrets
import pytz
import redis
from apscheduler.jobstores.redis import RedisJobStore
try:
from dotenv import load_dotenv
load_dotenv()
except ImportError:
pass
def _to_bool(val, default: bool = False) -> bool:
if val is None:
return default
if isinstance(val, bool):
return val
return str(val).strip().lower() in ("true", "1", "yes", "on", "t")
def _to_list(val, default: list = None) -> list:
if val is None:
return default or []
if isinstance(val, list):
return val
return [item.strip() for item in str(val).split(",") if item.strip()]
class Config:
DB_USER : str = os.environ.get("POSTGRES_USER", "vortexi")
DB_PASSWORD : str = os.environ.get("POSTGRES_PASSWORD", "vortexipassword")
DB_NAME : str = os.environ.get("POSTGRES_DB", "vortexidb")
DB_HOST : str = os.environ.get("POSTGRES_HOST", "db")
DB_PORT : str = os.environ.get("POSTGRES_PORT", "5432")
SQLALCHEMY_DATABASE_URI : str = os.environ.get("DATABASE_URL") or os.environ.get("SQLALCHEMY_DATABASE_URI") or f"postgresql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
FLASK_SESSION_KEY : str = os.environ.get("FLASK_SESSION_KEY", "7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f")
AuthorizationKey : str = os.environ.get("AUTHORIZATION_KEY") or os.environ.get("AuthorizationKey", "1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d")
SWITCH_TO_ARGON_PASSWORD_HASH : bool = _to_bool(os.environ.get("SWITCH_TO_ARGON_PASSWORD_HASH"), True)
REDIS_HOST : str = os.environ.get("REDIS_HOST", "redis")
REDIS_PORT : int = int(os.environ.get("REDIS_PORT", 6379))
REDIS_DB : int = int(os.environ.get("REDIS_DB", 0))
SCHEDULER_JOBSTORES = {
'default': RedisJobStore(host=REDIS_HOST, port=REDIS_PORT, db=REDIS_DB)
}
SCHEDULER_TIMEZONE : pytz.timezone = pytz.utc
REDIS_CLIENT = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, db=REDIS_DB, decode_responses=True)
FLASK_LIMITED_STORAGE_URI : str = os.environ.get("FLASK_LIMITED_STORAGE_URI", f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB}")
BaseDomain : str = os.environ.get("BASE_DOMAIN") or os.environ.get("BaseDomain") or "localhost"
BaseURL : str = os.environ.get("BASE_URL") or (f"http://{BaseDomain}:3003" if BaseDomain in ("localhost", "127.0.0.1") else f"https://www.{BaseDomain}")
RCC_ACCESS_KEY : str = os.environ.get("RCC_ACCESS_KEY", "rcc_secret_key_12345")
CloudflareTurnstileSiteKey : str = os.environ.get("CLOUDFLARE_TURNSTILE_SITE_KEY", "0x4AAAAAABQup2-ddXh4IHmv")
CloudflareTurnstileSecretKey : str = os.environ.get("CLOUDFLARE_TURNSTILE_SECRET_KEY", "0x4AAAAAABQup8x54tvuzF_gqlubefQV7y4")
DISCORD_CLIENT_ID : str = os.environ.get("DISCORD_CLIENT_ID", "1363965818328580157")
DiscordBotToken : str = os.environ.get("DISCORD_BOT_TOKEN") or os.environ.get("DiscordBotToken") or "PleaseReplaceMeOneDay!"
DISCORD_CLIENT_SECRET : str = os.environ.get("DISCORD_CLIENT_SECRET", "PleaseReplaceMeOneDay!")
DISCORD_REDIRECT_URI : str = os.environ.get("DISCORD_REDIRECT_URI", f"{BaseURL}/settings/discord_handler")
DISCORD_AUTHORIZATION_BASE_URL : str = "https://discord.com/api/oauth2/authorize"
DISCORD_BOT_AUTHTOKEN : str = os.environ.get("DISCORD_BOT_AUTHTOKEN", "")
DISCORD_BOT_AUTHORISED_IPS : list[str] = _to_list(os.environ.get("DISCORD_BOT_AUTHORISED_IPS"), ["127.0.0.1", "23.136.44.116", "2602:f6b7:0:7::a"])
DISCORD_ADMIN_LOGS_WEBHOOK : str = os.environ.get("DISCORD_ADMIN_LOGS_WEBHOOK", "PleaseReplaceMeOneDay!")
MAILJET_APIKEY : str = os.environ.get("MAILJET_APIKEY", "PleaseReplaceMeOneDay!")
MAILJET_SECRETKEY : str = os.environ.get("MAILJET_SECRETKEY", "PleaseReplaceMeOneDay!")
MAILJET_NOREPLY_SENDER : str = os.environ.get("MAILJET_NOREPLY_SENDER", f"no-reply@{BaseDomain}")
MAILJET_DONATION_TEMPLATE_ID : int = int(os.environ.get("MAILJET_DONATION_TEMPLATE_ID", 6984478))
MAILJET_EMAILVERIFY_TEMPLATE_ID : int = int(os.environ.get("MAILJET_EMAILVERIFY_TEMPLATE_ID", 6932923))
MAILJET_PASSWORDRESET_TEMPLATE_ID : int = int(os.environ.get("MAILJET_PASSWORDRESET_TEMPLATE_ID", 6932939))
KOFI_VERIFICATION_TOKEN : str = os.environ.get("KOFI_VERIFICATION_TOKEN", "")
KOFI_ENABLED : bool = _to_bool(os.environ.get("KOFI_ENABLED"), False)
VERIFIED_EMAIL_REWARD_ASSET : int = int(os.environ.get("VERIFIED_EMAIL_REWARD_ASSET", 197))
ASSETMIGRATOR_ROBLOSECURITY : str = os.environ.get("ASSETMIGRATOR_ROBLOSECURITY", "")
ASSETMIGRATOR_USE_PROXIES : bool = _to_bool(os.environ.get("ASSETMIGRATOR_USE_PROXIES"), False)
ASSETMIGRATOR_PROXY_LIST_LOCATION : str = os.environ.get("ASSETMIGRATOR_PROXY_LIST_LOCATION", "./example_file.txt")
RSA_PRIVATE_KEY_PATH : str = os.environ.get("RSA_PRIVATE_KEY_PATH", "./app/files/rsa_private_1024.pem")
RSA_PRIVATE_KEY_PATH2 : str = os.environ.get("RSA_PRIVATE_KEY_PATH2", "./app/files/rsa_private_2048.pem")
GAMESERVER_COMM_PRIVATE_KEY_LOCATION : str = os.environ.get("GAMESERVER_COMM_PRIVATE_KEY_LOCATION", "./app/files/rsa_private_gameserver.pem")
USE_LOCAL_STORAGE : bool = _to_bool(os.environ.get("USE_LOCAL_STORAGE"), True)
AWS_ACCESS_KEY : str = os.environ.get("AWS_ACCESS_KEY", "PleaseReplaceMeOneDay!")
AWS_SECRET_KEY : str = os.environ.get("AWS_SECRET_KEY", "PleaseReplaceMeOneDay!")
AWS_S3_BUCKET_NAME : str = os.environ.get("AWS_S3_BUCKET_NAME", "PleaseReplaceMeOneDay!")
AWS_S3_ENDPOINT_URL : str = os.environ.get("AWS_S3_ENDPOINT_URL", "")
AWS_S3_DOWNLOAD_CACHE_DIR : str = os.environ.get("AWS_S3_DOWNLOAD_CACHE_DIR", "./download_cache")
R2_DOWNLOAD_CACHE_DIR : str = AWS_S3_DOWNLOAD_CACHE_DIR
AWS_REGION_NAME : str = os.environ.get("AWS_REGION_NAME", "eu-north-1")
AWS_S3_CACHE_LIFETIME : int = int(os.environ.get("AWS_S3_CACHE_LIFETIME", 3600))
AWS_S3_CUSTOM_DOMAIN : str = os.environ.get("AWS_S3_CUSTOM_DOMAIN", "")
r : str = AWS_S3_CUSTOM_DOMAIN
CDN_URL : str = os.environ.get("CDN_URL") or (
f"{BaseURL}/cdn_local" if USE_LOCAL_STORAGE else (
f"https://{AWS_S3_CUSTOM_DOMAIN}" if AWS_S3_CUSTOM_DOMAIN and not AWS_S3_CUSTOM_DOMAIN.startswith("http")
else (AWS_S3_CUSTOM_DOMAIN if AWS_S3_CUSTOM_DOMAIN else (f"{AWS_S3_ENDPOINT_URL}/{AWS_S3_BUCKET_NAME}" if AWS_S3_ENDPOINT_URL else f"https://{AWS_S3_BUCKET_NAME}.s3.{AWS_REGION_NAME}.amazonaws.com"))
)
)
DISCOURSE_SSO_ENABLED : bool = _to_bool(os.environ.get("DISCOURSE_SSO_ENABLED"), False)
DISCOURSE_FORUM_BASEURL : str = os.environ.get("DISCOURSE_FORUM_BASEURL", "")
DISCOURSE_SECRET_KEY : str = os.environ.get("DISCOURSE_SECRET_KEY", "")
ADMIN_GROUP_ID : int = int(os.environ.get("ADMIN_GROUP_ID", 1))
FILTER_DISCORD_WEBHOOK : str = os.environ.get("FILTER_DISCORD_WEBHOOK", "PleaseReplaceMeOneDay!")
ITEMRELEASER_DISCORD_WEBHOOK : str = os.environ.get("ITEMRELEASER_DISCORD_WEBHOOK", "PleaseReplaceMeOneDay!")
ITEMRELEASER_ITEM_PING_ROLE_ID : int = int(os.environ.get("ITEMRELEASER_ITEM_PING_ROLE_ID", 1364011164387770553))
WTF_CSRF_HEADERS : list[str] = ["x-csrf-token", "X-CSRFToken", "X-CSRF-Token"]
CHEATER_REPORTS_DISCORD_WEBHOOK : str = os.environ.get("CHEATER_REPORTS_DISCORD_WEBHOOK", "PleaseReplaceMeOneDay!")
PROMETHEUS_ENABLED : bool = _to_bool(os.environ.get("PROMETHEUS_ENABLED"), False)
PROMETHEUS_ALLOWED_IPS : list[str] = _to_list(os.environ.get("PROMETHEUS_ALLOWED_IPS"), ["127.0.0.1"])
ROLIMONS_API_ENABLED : bool = _to_bool(os.environ.get("ROLIMONS_API_ENABLED"), False)
ROLIMONS_API_KEY : str = os.environ.get("ROLIMONS_API_KEY", "ExampleKey")
CRYPTOMUS_PAYMENT_ENABLED : bool = _to_bool(os.environ.get("CRYPTOMUS_PAYMENT_ENABLED"), False)
CRYPTOMUS_MERCHANT_ID : str = os.environ.get("CRYPTOMUS_MERCHANT_ID", "")
CRYPTOMUS_API_KEY : str = os.environ.get("CRYPTOMUS_API_KEY", "")
IPAPI_AUTH_KEY : str = os.environ.get("IPAPI_AUTH_KEY", "xxxxxxxxx")
IPAPI_CACHE_LIFETIME : int = int(os.environ.get("IPAPI_CACHE_LIFETIME", 60 * 60 * 24))
DEBUG_IPS : list[str] = _to_list(os.environ.get("DEBUG_IPS"), ["0.0.0.0", "127.0.0.1"])