File size: 3,010 Bytes
439f3f3
1476658
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
439f3f3
3d8213d
439f3f3
3d8213d
 
1476658
439f3f3
 
 
3d8213d
 
 
 
 
 
 
 
6c3b773
d72f783
 
 
6c3b773
d72f783
 
6c3b773
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import os
from urllib.parse import parse_qs, urlparse, urlunparse


def _normalize_sqlitecloud_uri(raw_uri):
    uri = (raw_uri or "").strip()
    if not uri:
        return ""

    # If a malformed value includes extra text before sqlitecloud://, keep only
    # the driver URL portion.
    idx = uri.find("sqlitecloud://")
    if idx > 0:
        uri = uri[idx:]

    if not uri.startswith("sqlitecloud://"):
        return uri

    parsed = urlparse(uri)
    query = parse_qs(parsed.query)

    # Some copied strings accidentally place the actual URL in the apikey query.
    apikey_values = query.get("apikey", [])
    if apikey_values and apikey_values[0].startswith("sqlitecloud://"):
        nested = apikey_values[0]
        nested_idx = nested.find("sqlitecloud://")
        if nested_idx >= 0:
            return _normalize_sqlitecloud_uri(nested[nested_idx:])

    db_name = os.environ.get("SQLITECLOUD_DB_NAME", "").strip()
    path = parsed.path or ""
    if path in ("", "/") and db_name:
        path = f"/{db_name}"

    return urlunparse(
        (parsed.scheme, parsed.netloc, path, parsed.params, parsed.query, parsed.fragment)
    )


def _default_database_uri():
    explicit = os.environ.get("DATABASE_URL")
    if explicit:
        return _normalize_sqlitecloud_uri(explicit)

    sqlitecloud_host = os.environ.get("SQLITECLOUD_HOST", "").strip()
    sqlitecloud_api_key = os.environ.get("SQLITECLOUD_API_KEY", "").strip()
    sqlitecloud_db_name = os.environ.get("SQLITECLOUD_DB_NAME", "porahobe").strip()
    if sqlitecloud_host and sqlitecloud_api_key:
        host = sqlitecloud_host.replace("sqlitecloud://", "").replace("https://", "")
        host = host.split("?")[0].split("/")[0].split(":443")[0]
        return f"sqlitecloud://{host}:8860/{sqlitecloud_db_name}?apikey={sqlitecloud_api_key}"

    if os.path.isdir("/data"):
        # Hugging Face Spaces persistent volume.
        return "sqlite:////data/porahobebot.db"

    # Local/dev fallback.
    return "sqlite:///instance/app.db"


class Config:
    SECRET_KEY = os.environ.get("SECRET_KEY") or "dev-secret-key"

    SQLALCHEMY_DATABASE_URI = _default_database_uri()
    SQLALCHEMY_TRACK_MODIFICATIONS = False

    # Google OAuth
    GOOGLE_CLIENT_SECRET = os.environ.get("GOOGLE_CLIENT_SECRET")
    GOOGLE_CLIENT_ID = os.environ.get("GOOGLE_CLIENT_ID")

    # Discord OAuth
    DISCORD_CLIENT_SECRET = os.environ.get("DISCORD_CLIENT_SECRET")
    DISCORD_CLIENT_ID = os.environ.get("DISCORD_CLIENT_ID")
    DISCORD_BOT_TOKEN = os.environ.get("DISCORD_BOT_TOKEN")
    DISCORD_GUILD_ID = os.environ.get("DISCORD_GUILD_ID")
    DISCORD_WEBHOOK_URL = os.environ.get("DISCORD_WEBHOOK_URL")

    # S3 Storage Configuration
    S3_BUCKET_NAME = os.environ.get("S3_BUCKET_NAME")
    S3_ENDPOINT_URL = os.environ.get("S3_ENDPOINT")
    S3_SECRET_KEY = os.environ.get("S3_SECRET_KEY")
    S3_ACCESS_KEY_ID = os.environ.get("S3_ACCESS_KEY_ID")

    # Admin
    ADMIN_SECRET_CODE = os.environ.get("ADMIN_SECRET_CODE") or "admin123"