mirror of
https://github.com/BigBodyCobain/Shadowbroker.git
synced 2026-04-23 19:16:06 +02:00
668ce16dc7
Gate messages now propagate via the Infonet hashchain as encrypted blobs — every node syncs them through normal chain sync while only Gate members with MLS keys can decrypt. Added mesh reputation system, peer push workers, voluntary Wormhole opt-in for node participation, fork recovery, killwormhole scripts, obfuscated terminology, and hardened the self-updater to protect encryption keys and chain state during updates. New features: Shodan search, train tracking, Sentinel Hub imagery, 8 new intelligence layers, CCTV expansion to 11,000+ cameras across 6 countries, Mesh Terminal CLI, prediction markets, desktop-shell scaffold, and comprehensive mesh test suite (215 frontend + backend tests passing). Community contributors: @wa1id, @AlborzNazari, @adust09, @Xpirix, @imqdcr, @csysp, @suranyami, @chr0n1x, @johan-martensson, @singularfailure, @smithbh, @OrfeoTerkuci, @deuza, @tm-const, @Elhard1, @ttulttul
93 lines
3.1 KiB
Python
93 lines
3.1 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
import time
|
|
from pathlib import Path
|
|
|
|
DATA_DIR = Path(__file__).parent.parent / "data"
|
|
WORMHOLE_FILE = DATA_DIR / "wormhole.json"
|
|
_cache: dict | None = None
|
|
_cache_ts: float = 0.0
|
|
_CACHE_TTL = 5.0 # seconds
|
|
_DEFAULTS = {
|
|
"enabled": False,
|
|
"transport": "direct",
|
|
"socks_proxy": "",
|
|
"socks_dns": True,
|
|
"privacy_profile": "default",
|
|
"anonymous_mode": False,
|
|
}
|
|
|
|
|
|
def _safe_int(val, default=0) -> int:
|
|
try:
|
|
return int(val)
|
|
except (TypeError, ValueError):
|
|
return default
|
|
|
|
|
|
def read_wormhole_settings() -> dict:
|
|
global _cache, _cache_ts
|
|
now = time.monotonic()
|
|
if _cache is not None and (now - _cache_ts) < _CACHE_TTL:
|
|
return _cache
|
|
if not WORMHOLE_FILE.exists():
|
|
result = {**_DEFAULTS, "updated_at": 0}
|
|
else:
|
|
try:
|
|
data = json.loads(WORMHOLE_FILE.read_text(encoding="utf-8"))
|
|
except Exception:
|
|
result = {**_DEFAULTS, "updated_at": 0}
|
|
else:
|
|
result = {
|
|
"enabled": bool(data.get("enabled", _DEFAULTS["enabled"])),
|
|
"transport": str(data.get("transport", _DEFAULTS["transport"]) or _DEFAULTS["transport"]),
|
|
"socks_proxy": str(data.get("socks_proxy", _DEFAULTS["socks_proxy"]) or ""),
|
|
"socks_dns": bool(data.get("socks_dns", _DEFAULTS["socks_dns"])),
|
|
"privacy_profile": str(
|
|
data.get("privacy_profile", _DEFAULTS["privacy_profile"]) or _DEFAULTS["privacy_profile"]
|
|
),
|
|
"anonymous_mode": bool(data.get("anonymous_mode", _DEFAULTS["anonymous_mode"])),
|
|
"updated_at": _safe_int(data.get("updated_at", 0) or 0),
|
|
}
|
|
_cache = result
|
|
_cache_ts = now
|
|
return result
|
|
|
|
|
|
def write_wormhole_settings(
|
|
*,
|
|
enabled: bool | None = None,
|
|
transport: str | None = None,
|
|
socks_proxy: str | None = None,
|
|
socks_dns: bool | None = None,
|
|
privacy_profile: str | None = None,
|
|
anonymous_mode: bool | None = None,
|
|
) -> dict:
|
|
DATA_DIR.mkdir(parents=True, exist_ok=True)
|
|
existing = read_wormhole_settings()
|
|
payload = {
|
|
"enabled": bool(existing.get("enabled")) if enabled is None else bool(enabled),
|
|
"transport": existing.get("transport", _DEFAULTS["transport"])
|
|
if transport is None
|
|
else str(transport),
|
|
"socks_proxy": existing.get("socks_proxy", "")
|
|
if socks_proxy is None
|
|
else str(socks_proxy),
|
|
"socks_dns": bool(existing.get("socks_dns", _DEFAULTS["socks_dns"]))
|
|
if socks_dns is None
|
|
else bool(socks_dns),
|
|
"privacy_profile": existing.get("privacy_profile", _DEFAULTS["privacy_profile"])
|
|
if privacy_profile is None
|
|
else str(privacy_profile),
|
|
"anonymous_mode": bool(existing.get("anonymous_mode", _DEFAULTS["anonymous_mode"]))
|
|
if anonymous_mode is None
|
|
else bool(anonymous_mode),
|
|
"updated_at": int(time.time()),
|
|
}
|
|
WORMHOLE_FILE.write_text(json.dumps(payload, indent=2), encoding="utf-8")
|
|
global _cache, _cache_ts
|
|
_cache = payload
|
|
_cache_ts = time.monotonic()
|
|
return payload
|