| """ |
| migrate.py — Migrate accounts from accounts.json to SQLite |
| """ |
|
|
| import json |
| import time |
| from pathlib import Path |
| from database import get_db |
|
|
| DATA_DIR = Path(__file__).parent / "data" |
| ACCOUNTS_FILE = DATA_DIR / "accounts.json" |
|
|
|
|
| def migrate(): |
| if not ACCOUNTS_FILE.exists(): |
| print("No accounts.json found, skipping migration") |
| return 0 |
|
|
| db = get_db() |
|
|
| |
| existing = db.fetchone("SELECT COUNT(*) as c FROM accounts") |
| if existing["c"] > 0: |
| print(f"Database already has {existing['c']} accounts, skipping migration") |
| return existing["c"] |
|
|
| raw = json.loads(ACCOUNTS_FILE.read_text(encoding="utf-8")) |
| count = 0 |
| for item in raw: |
| db.execute( |
| """INSERT OR IGNORE INTO accounts |
| (id, name, token, visitorid, enabled, email, password, |
| mail_provider, mail_api_key, created_at, quota_remain) |
| VALUES (?,?,?,?,?,?,?,?,?,?,?)""", |
| ( |
| item.get("id", ""), |
| item.get("name", ""), |
| item.get("token", ""), |
| item.get("visitorid", ""), |
| 1 if item.get("enabled", True) else 0, |
| item.get("email", ""), |
| item.get("password", ""), |
| item.get("mail_provider", ""), |
| item.get("mail_api_key", ""), |
| item.get("created_at", time.time()), |
| 100, |
| ) |
| ) |
| count += 1 |
|
|
| |
| import os |
| from dotenv import load_dotenv |
| load_dotenv() |
|
|
| env_mappings = { |
| "RITA_UPSTREAM": os.getenv("RITA_UPSTREAM", ""), |
| "RITA_ORIGIN": os.getenv("RITA_ORIGIN", ""), |
| "AUTH_TOKEN": os.getenv("AUTH_TOKEN", ""), |
| "DISABLE_SSL_VERIFY": os.getenv("DISABLE_SSL_VERIFY", ""), |
| "HEALTH_CHECK_INTERVAL": os.getenv("HEALTH_CHECK_INTERVAL", ""), |
| "AUTO_REGISTER_ENABLED": os.getenv("AUTO_REGISTER_ENABLED", ""), |
| "YESCAPTCHA_KEY": os.getenv("YESCAPTCHA_KEY", ""), |
| "GPTMAIL_API_KEY": os.getenv("GPTMAIL_API_KEY", ""), |
| "YYDSMAIL_API_KEY": os.getenv("YYDSMAIL_API_KEY", ""), |
| } |
| for key, val in env_mappings.items(): |
| if val: |
| db.set_config(key, val) |
|
|
| print(f"Migrated {count} accounts from accounts.json to SQLite") |
| return count |
|
|
|
|
| if __name__ == "__main__": |
| migrate() |
|
|