All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m33s
Merges full history from art-dag/mono.git into the monorepo under the artdag/ directory. Contains: core (DAG engine), l1 (Celery rendering server), l2 (ActivityPub registry), common (shared templates/middleware), client (CLI), test (e2e). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> git-subtree-dir: artdag git-subtree-mainline:1a179de547git-subtree-split:4c2e716558
68 lines
2.5 KiB
Python
68 lines
2.5 KiB
Python
"""
|
|
L2 Server Configuration.
|
|
|
|
Environment-based settings for the ActivityPub server.
|
|
"""
|
|
|
|
import os
|
|
from dataclasses import dataclass
|
|
from pathlib import Path
|
|
|
|
|
|
@dataclass
|
|
class Settings:
|
|
"""L2 Server configuration."""
|
|
|
|
# Domain and URLs
|
|
domain: str = os.environ.get("ARTDAG_DOMAIN", "artdag.rose-ash.com")
|
|
l1_public_url: str = os.environ.get("L1_PUBLIC_URL", "https://celery-artdag.rose-ash.com")
|
|
effects_repo_url: str = os.environ.get("EFFECTS_REPO_URL", "https://git.rose-ash.com/art-dag/effects")
|
|
ipfs_gateway_url: str = os.environ.get("IPFS_GATEWAY_URL", "")
|
|
|
|
# L1 servers
|
|
l1_servers: list = None
|
|
|
|
# Cookie domain for cross-subdomain auth
|
|
cookie_domain: str = None
|
|
|
|
# Data directory
|
|
data_dir: Path = None
|
|
|
|
# JWT settings
|
|
jwt_secret: str = os.environ.get("JWT_SECRET", "")
|
|
jwt_algorithm: str = "HS256"
|
|
access_token_expire_minutes: int = 60 * 24 * 30 # 30 days
|
|
|
|
# OAuth SSO (via account.rose-ash.com)
|
|
oauth_authorize_url: str = os.environ.get("OAUTH_AUTHORIZE_URL", "https://account.rose-ash.com/auth/oauth/authorize")
|
|
oauth_token_url: str = os.environ.get("OAUTH_TOKEN_URL", "https://account.rose-ash.com/auth/oauth/token")
|
|
oauth_client_id: str = os.environ.get("OAUTH_CLIENT_ID", "artdag_l2")
|
|
oauth_redirect_uri: str = os.environ.get("OAUTH_REDIRECT_URI", "https://artdag.rose-ash.com/auth/callback")
|
|
oauth_logout_url: str = os.environ.get("OAUTH_LOGOUT_URL", "https://account.rose-ash.com/auth/sso-logout/")
|
|
secret_key: str = os.environ.get("SECRET_KEY", "change-me-in-production")
|
|
|
|
# Internal account URL for server-to-server token exchange (avoids external DNS/TLS)
|
|
internal_account_url: str = os.environ.get("INTERNAL_URL_ACCOUNT", "")
|
|
|
|
def __post_init__(self):
|
|
# Parse L1 servers
|
|
l1_str = os.environ.get("L1_SERVERS", "https://celery-artdag.rose-ash.com")
|
|
self.l1_servers = [s.strip() for s in l1_str.split(",") if s.strip()]
|
|
|
|
# Cookie domain
|
|
env_cookie = os.environ.get("COOKIE_DOMAIN")
|
|
if env_cookie:
|
|
self.cookie_domain = env_cookie
|
|
else:
|
|
parts = self.domain.split(".")
|
|
if len(parts) >= 2:
|
|
self.cookie_domain = "." + ".".join(parts[-2:])
|
|
|
|
# Data directory
|
|
self.data_dir = Path(os.environ.get("ARTDAG_DATA", str(Path.home() / ".artdag" / "l2")))
|
|
self.data_dir.mkdir(parents=True, exist_ok=True)
|
|
(self.data_dir / "assets").mkdir(exist_ok=True)
|
|
|
|
|
|
settings = Settings()
|