Files
standalone-openai-pool-cli/account_store.py

74 lines
2.4 KiB
Python

from __future__ import annotations
from typing import Any, Dict, Optional
import psycopg
def is_db_enabled(cfg: Dict[str, Any]) -> bool:
return bool(cfg.get("db_enabled", False))
def _dsn(cfg: Dict[str, Any]) -> str:
return (
f"host={cfg.get('db_host', '')} "
f"port={int(cfg.get('db_port', 5432) or 5432)} "
f"dbname={cfg.get('db_name', 'postgres')} "
f"user={cfg.get('db_user', '')} "
f"password={cfg.get('db_password', '')} "
"connect_timeout=10"
)
def save_registered_account(cfg: Dict[str, Any], record: Dict[str, Any]) -> Dict[str, Any]:
if not is_db_enabled(cfg):
return {"ok": False, "skipped": True, "reason": "db_disabled"}
table = str(cfg.get("db_table", "registered_accounts") or "registered_accounts").strip()
source = str(cfg.get("db_source", "standalone_cli") or "standalone_cli").strip()
payload = {
"email": str(record.get("email") or "").strip() or None,
"chatgpt_password": str(record.get("chatgpt_password") or "").strip() or None,
"mail_password": str(record.get("mail_password") or "").strip() or None,
"oauth_status": str(record.get("oauth_status") or "oauth=ok").strip() or "oauth=ok",
"mail_token": str(record.get("mail_token") or "").strip() or None,
"name": str(record.get("name") or "").strip() or None,
"birthdate": str(record.get("birthdate") or "").strip() or None,
"source": str(record.get("source") or source).strip() or source,
}
if not payload["email"]:
return {"ok": False, "error": "missing email"}
sql = f"""
INSERT INTO {table} (
email,
chatgpt_password,
mail_password,
oauth_status,
created_at,
updated_at,
mail_token,
name,
birthdate,
source
) VALUES (
%(email)s,
%(chatgpt_password)s,
%(mail_password)s,
%(oauth_status)s,
NOW(),
NOW(),
%(mail_token)s,
%(name)s,
%(birthdate)s,
%(source)s
)
"""
with psycopg.connect(_dsn(cfg)) as conn:
with conn.cursor() as cur:
cur.execute(sql, payload)
conn.commit()
return {"ok": True, "skipped": False, "table": table, "email": payload["email"]}