73278667e0
A→B SFTP 中继与一键 tar 打包 curl 拉取;含审计修复与 18 项单测。
42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
"""Redis-backed metadata for cross-server package transfer download tokens."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import logging
|
|
from typing import Any
|
|
|
|
from server.infrastructure.redis.client import get_redis
|
|
|
|
logger = logging.getLogger("nexus.transfer_package_store")
|
|
|
|
REDIS_PREFIX = "transfer:pkg:"
|
|
DEFAULT_TTL_SECONDS = 3600
|
|
|
|
|
|
def _key(token: str) -> str:
|
|
return f"{REDIS_PREFIX}{token}"
|
|
|
|
|
|
async def save_package_meta(token: str, meta: dict[str, Any], *, ttl: int = DEFAULT_TTL_SECONDS) -> None:
|
|
redis = get_redis()
|
|
await redis.set(_key(token), json.dumps(meta, ensure_ascii=False), ex=ttl)
|
|
|
|
|
|
async def load_package_meta(token: str) -> dict[str, Any] | None:
|
|
redis = get_redis()
|
|
raw = await redis.get(_key(token))
|
|
if not raw:
|
|
return None
|
|
try:
|
|
data = json.loads(raw)
|
|
except json.JSONDecodeError:
|
|
logger.warning("Invalid transfer package JSON for token prefix %s…", token[:8])
|
|
return None
|
|
return data if isinstance(data, dict) else None
|
|
|
|
|
|
async def delete_package_meta(token: str) -> None:
|
|
redis = get_redis()
|
|
await redis.delete(_key(token))
|