Add Tor hidden service support and fallback relay profile fetching (v0.46.0)
Some checks failed
Go / build-and-release (push) Has been cancelled
Some checks failed
Go / build-and-release (push) Has been cancelled
- Add pkg/tor package for Tor hidden service integration - Add Tor config options: ORLY_TOR_ENABLED, ORLY_TOR_PORT, ORLY_TOR_HS_DIR, ORLY_TOR_ONION_ADDRESS - Extend NIP-11 relay info with addresses field for .onion URLs - Add fallback relays (Damus, nos.lol, nostr.band, purplepag.es) for profile lookups - Refactor profile fetching to try local relay first, then fallback relays - Add Tor setup documentation and deployment scripts Files modified: - app/config/config.go: Add Tor configuration options - app/handle-relayinfo.go: Add ExtendedRelayInfo with addresses field - app/main.go: Initialize and manage Tor service lifecycle - app/server.go: Add torService field to Server struct - app/web/src/constants.js: Add FALLBACK_RELAYS - app/web/src/nostr.js: Add fallback relay profile fetching - pkg/tor/: New package for Tor hidden service management - docs/TOR_SETUP.md: Documentation for Tor configuration - deploy/orly-tor.service: Systemd service for Tor integration - scripts/tor-*.sh: Setup scripts for Tor development and production 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
33
app/main.go
33
app/main.go
@@ -33,6 +33,7 @@ import (
|
||||
dsync "next.orly.dev/pkg/sync"
|
||||
"next.orly.dev/pkg/wireguard"
|
||||
"next.orly.dev/pkg/archive"
|
||||
"next.orly.dev/pkg/tor"
|
||||
|
||||
"git.mleku.dev/mleku/nostr/interfaces/signer/p8k"
|
||||
)
|
||||
@@ -548,6 +549,32 @@ func Run(
|
||||
log.I.F("archive relay manager initialized with %d relays", len(archiveRelays))
|
||||
}
|
||||
|
||||
// Initialize Tor hidden service if enabled
|
||||
torEnabled, torPort, torHSDir, torOnionAddr := cfg.GetTorConfigValues()
|
||||
if torEnabled {
|
||||
torCfg := &tor.Config{
|
||||
Port: torPort,
|
||||
HSDir: torHSDir,
|
||||
OnionAddress: torOnionAddr,
|
||||
Handler: l,
|
||||
}
|
||||
var err error
|
||||
l.torService, err = tor.New(torCfg)
|
||||
if err != nil {
|
||||
log.W.F("failed to create Tor service: %v", err)
|
||||
} else {
|
||||
if err = l.torService.Start(); err != nil {
|
||||
log.W.F("failed to start Tor service: %v", err)
|
||||
} else {
|
||||
if addr := l.torService.OnionWSAddress(); addr != "" {
|
||||
log.I.F("Tor hidden service listening on port %d, address: %s", torPort, addr)
|
||||
} else {
|
||||
log.I.F("Tor hidden service listening on port %d (waiting for .onion address)", torPort)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Start rate limiter if enabled
|
||||
if limiter != nil && limiter.IsEnabled() {
|
||||
limiter.Start()
|
||||
@@ -663,6 +690,12 @@ func Run(
|
||||
log.I.F("archive manager stopped")
|
||||
}
|
||||
|
||||
// Stop Tor service if running
|
||||
if l.torService != nil {
|
||||
l.torService.Stop()
|
||||
log.I.F("Tor service stopped")
|
||||
}
|
||||
|
||||
// Stop garbage collector if running
|
||||
if l.garbageCollector != nil {
|
||||
l.garbageCollector.Stop()
|
||||
|
||||
Reference in New Issue
Block a user