Files
ad/molodetz/constants.py
T

106 lines
2.6 KiB
Python

# retoor <retoor@molodetz.nl>
import re
from pathlib import Path
INTRO_SEED_FILE = Path(__file__).resolve().parent / "seed" / "intro.md"
SITE_INTRO_SEED = re.sub(r"\A<!--.*?-->\n", "", INTRO_SEED_FILE.read_text(encoding="utf-8"), count=1, flags=re.S)
ROLE_ADMIN = "Admin"
ROLE_MEMBER = "Member"
ROLES = (ROLE_ADMIN, ROLE_MEMBER)
TOPICS = {
"roll": "Roll",
"standard": "Standard",
}
LEGACY_TOPICS = {
"rol": "roll",
"standaard": "standard",
}
POST_STATUSES = ("draft", "published")
MEDIA_KINDS = {
"flyer": "Flyers",
"meme": "Memes",
}
JOIN_STATUSES = ("open", "contacted", "accepted", "declined")
SOFT_DELETE_TABLES = (
"users",
"sessions",
"posts",
"join_requests",
"notifications",
"media_items",
)
UNREPORTABLE_TABLES = {
"users": "Only the operator holds accounts; no public user content.",
"sessions": "Private credential rows.",
"posts": "Authored by administrators only; moderation module not selected.",
"join_requests": "Owner-private ledger visible to administrators only.",
"notifications": "Owner-private inbox rows.",
"media_items": "Operator-curated gallery assets.",
}
REPORTABLE_TARGETS: frozenset[str] = frozenset()
NOTIFICATION_TYPES = {
"join.request": "New request via Join",
"post.published": "Post published",
"backup.finished": "Backup finished",
"backup.failed": "Backup failed",
"auth.apikey": "API key renewed",
"system.maintenance": "Maintenance mode changed",
}
CRAWLER_PRIVATE_PREFIXES = ("/notifications", "/admin", "/profile")
CRAWLER_MARKERS = (
"bot",
"crawler",
"spider",
"slurp",
"crawl",
"facebookexternalhit",
"bingpreview",
)
TERMS_EXEMPT_PREFIXES = (
"/static",
"/avatar",
"/auth",
"/docs",
"/terms",
"/privacy",
)
MAINTENANCE_ALLOWED_PREFIXES = ("/static", "/avatar", "/auth", "/admin")
RATE_LIMIT_EXEMPT_PREFIXES: tuple[str, ...] = ()
GZIP_SKIP_PREFIXES: tuple[str, ...] = ()
SETTINGS_DEFAULTS = {
"site_title": "Molodetz",
"site_tagline": "The circle, not the commercial.",
"site_intro": SITE_INTRO_SEED,
"maintenance_mode": "0",
"maintenance_message": "Molodetz is closed for maintenance. Back shortly.",
"rate_limit_per_minute": "60",
"rate_limit_window_seconds": "60",
"session_max_age_days": "7",
"session_remember_days": "30",
"terms_version": "1",
"friendly_404": "1",
"audit_retention_days": "365",
"outbound_proxy_url": "",
}
CLIENT_RENDER_TEMPLATES = frozenset({"admin/post_form.html"})
HTTP_CLIENT_ALLOWLIST = frozenset({"molodetz/stealth.py"})