feat: add auth token storage module

This commit is contained in:
chengyongru 2026-04-16 21:24:48 +08:00
parent 482961875f
commit a4a17a5bb2

56
nanobot/auth/__init__.py Normal file
View File

@ -0,0 +1,56 @@
"""Token storage for nanobot auth."""
from __future__ import annotations
import json
from pathlib import Path
from dataclasses import dataclass
@dataclass
class AuthInfo:
token: str
server_url: str
expires_at: float | None = None
def _auth_file_path() -> Path:
return Path.home() / ".nanobot" / "auth.json"
def load_auth() -> AuthInfo | None:
"""Load saved auth info from disk."""
path = _auth_file_path()
if not path.exists():
return None
try:
data = json.loads(path.read_text(encoding="utf-8"))
return AuthInfo(
token=data["token"],
server_url=data["server_url"],
expires_at=data.get("expires_at"),
)
except (json.JSONDecodeError, KeyError):
return None
def save_auth(info: AuthInfo) -> None:
"""Save auth info to disk."""
path = _auth_file_path()
path.parent.mkdir(parents=True, exist_ok=True)
data = {
"token": info.token,
"server_url": info.server_url,
}
if info.expires_at is not None:
data["expires_at"] = info.expires_at
path.write_text(json.dumps(data, indent=2), encoding="utf-8")
def delete_auth() -> bool:
"""Delete saved auth info. Returns True if file was deleted."""
path = _auth_file_path()
if path.exists():
path.unlink()
return True
return False