mirror of
https://github.com/Routstr/routstr-core.git
synced 2026-07-30 15:26:14 +00:00
A node with a legacy plaintext nsec but no ROUTSTR_SECRET_KEY refused to boot: bootstrap_secrets raised and vault.encrypt required the env key. That turned encryption at rest into a hard breaking change on auto-upgrade. Encryption stays mandatory — the nsec is never persisted in plaintext — but key custody becomes flexible. When no ROUTSTR_SECRET_KEY is set, encrypt() generates a Fernet key, writes it owner-only (0600) to a key file, and prints a one-time back-it-up notice, so an upgrading node keeps running. The read path stays strict: decrypt()/get_fernet() never mint a key (a fresh key could not match existing ciphertext) and fail fast with the generation command when none is configured. A malformed env key still fails fast rather than silently self-provisioning a different key. The key file defaults beside the SQLite database (ROUTSTR_SECRET_KEY_FILE overrides), so it rides whatever volume already persists the data instead of a working-directory path a container recreate would drop. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
46 lines
441 B
Plaintext
46 lines
441 B
Plaintext
__pycache__
|
|
.env
|
|
keys.db
|
|
routstr_secret.key
|
|
wallet.sqlite3
|
|
|
|
# Python build artifacts
|
|
*.egg-info/
|
|
build/
|
|
dist/
|
|
*.egg
|
|
.mypy_cache/**
|
|
|
|
# Development
|
|
.notes
|
|
.*keys.db
|
|
*.db-shm
|
|
*.db-wal
|
|
.*wallet.sqlite3
|
|
.wallet/
|
|
AGENTS.md
|
|
TEST_SUITE_OVERVIEW.md
|
|
*models.json
|
|
.cashu
|
|
.relay
|
|
relay-data
|
|
.dockerignore
|
|
relay-data
|
|
|
|
compose.override.yml
|
|
|
|
# Coverage
|
|
.coverage
|
|
|
|
# Logging
|
|
logs/*
|
|
!logs/.gitkeep
|
|
*.log
|
|
|
|
# deployment
|
|
proof_backups
|
|
|
|
*.todo
|
|
ui_out
|
|
.worktrees
|