63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
import json
|
|
import os
|
|
from typing import List
|
|
|
|
from app.core._config import PROJECT_HOST
|
|
from .constants import NODE_TYPE_PUBLIC, NODE_TYPE_PRIVATE
|
|
|
|
|
|
def _csv_list(val: str) -> List[str]:
|
|
return [x.strip() for x in (val or "").split(",") if x.strip()]
|
|
|
|
|
|
def _json_value(val: str, fallback):
|
|
if not val:
|
|
return fallback
|
|
try:
|
|
return json.loads(val)
|
|
except Exception:
|
|
return fallback
|
|
|
|
|
|
def _as_list(value):
|
|
if isinstance(value, list):
|
|
return value
|
|
if value is None:
|
|
return []
|
|
return [value]
|
|
|
|
|
|
# Handshake / network config driven by env
|
|
NODE_PRIVACY = os.getenv("NODE_PRIVACY", NODE_TYPE_PUBLIC).strip().lower()
|
|
if NODE_PRIVACY not in (NODE_TYPE_PUBLIC, NODE_TYPE_PRIVATE):
|
|
NODE_PRIVACY = NODE_TYPE_PUBLIC
|
|
|
|
# Public endpoint for network (can be empty for private nodes)
|
|
_env_public_host = os.getenv("PUBLIC_HOST")
|
|
PUBLIC_HOST = _env_public_host if (_env_public_host is not None and _env_public_host.strip() != "") else None
|
|
|
|
HANDSHAKE_INTERVAL_SEC = int(os.getenv("HANDSHAKE_INTERVAL_SEC", "5"))
|
|
UNSUPPORTED_RECHECK_INTERVAL_SEC = int(os.getenv("UNSUPPORTED_RECHECK_INTERVAL_SEC", str(24 * 3600)))
|
|
|
|
BOOTSTRAP_SEEDS = _csv_list(os.getenv("BOOTSTRAP_SEEDS", ""))
|
|
BOOTSTRAP_REQUIRED = int(os.getenv("BOOTSTRAP_REQUIRED", "1")) == 1
|
|
BOOTSTRAP_TIMEOUT_SEC = int(os.getenv("BOOTSTRAP_TIMEOUT_SEC", "20"))
|
|
|
|
# Security knobs
|
|
NETWORK_TLS_VERIFY = int(os.getenv("NETWORK_TLS_VERIFY", "1")) == 1
|
|
HANDSHAKE_TS_TOLERANCE_SEC = int(os.getenv("HANDSHAKE_TS_TOLERANCE_SEC", "300"))
|
|
HANDSHAKE_RATE_LIMIT_PER_MIN = int(os.getenv("HANDSHAKE_RATE_LIMIT_PER_MIN", "60"))
|
|
|
|
# IPFS discovery/peering
|
|
IPFS_PRIVATE_BOOTSTRAP_ADDRESSES = _as_list(_json_value(os.getenv("IPFS_PRIVATE_BOOTSTRAP"), []))
|
|
IPFS_PEERING_PEERS = _json_value(os.getenv("IPFS_PEERING_PEERS"), [])
|
|
IPFS_ANNOUNCE_ADDRESSES = _as_list(_json_value(os.getenv("IPFS_ANNOUNCE_ADDRESSES"), []))
|
|
IPFS_NOANNOUNCE_ADDRESSES = _as_list(_json_value(os.getenv("IPFS_NOANNOUNCE_ADDRESSES"), []))
|
|
|
|
# Capabilities
|
|
NODE_IS_BOOTSTRAP = int(os.getenv("NODE_IS_BOOTSTRAP", "0")) == 1
|
|
MAX_CONTENT_SIZE_MB = int(os.getenv("MAX_CONTENT_SIZE_MB", "512"))
|
|
|
|
# Privacy allowlist (for NODE_PRIVACY=private)
|
|
PRIVATE_ALLOWLIST = _csv_list(os.getenv("PRIVATE_ALLOWLIST", "/api/system.version"))
|