6 Commits

Author SHA1 Message Date
enki 586b9cb51b Clean up deploy files for production: fix nginx config name, update example config 2026-05-20 16:29:20 -07:00
enki c6b9b676a4 add Deluge Web UI integration for publisher
Deluge uses a JSON-RPC HTTP API exposed by the Web UI plugin (port 8112),
not the daemon binary protocol (port 58846). The integration logs in,
fetches completed torrents, filters by configured labels, and enqueues
them the same way as the qBittorrent poller.

- DelugeConfig in config.rs (enabled, url, password, poll_interval_secs, labels)
- src/publisher/deluge.rs: DelugeClient with login/_session_id cookie
  handling, core.get_torrents_status, label + is_finished filtering
- Watcher: deluge_poll_loop alongside qb_poll_loop; each only starts
  if its respective client is configured/enabled
- Example config updated with deluge section and Web UI port note
2026-05-19 20:13:14 -07:00
enki bac30ecfdf add SOCKS5/Tor/I2P proxy support and improve network UI clarity
- NetworkConfig/ProxyConfig in config.rs: mode=direct|tor|i2p|socks5
  with socks5_addr() helper that maps tor→9050, i2p→4446, socks5→url
- build_http_client() routes reqwest through SOCKS5 when configured
- build_nostr_opts() routes nostr-sdk WebSocket connections through
  SOCKS5 using Connection::new().proxy(addr)
- Shared http_client passed to Enricher and BlossomClient so proxy
  applies to TMDB and Blossom blob fetches as well
- nostr_opts passed to Reader, WotBuilder, ProfileFetcher
- Dashboard: network status card showing proxy mode, listen address,
  IPv4/IPv6; relay section now shows X connected / Y configured
- Publishers: rename vouch form to "Override publisher trust", add
  clear note that this is local-only (not broadcast to Nostr), explain
  WoT comes from NIP-02 kind 3; rename column headers for clarity
- Example and dev configs updated with network.proxy section
2026-05-18 21:46:09 -07:00
enki a3db453942 feat: Blossom binary bridge (BUD-01)
- BlossomClient: unauthenticated fetch, kind 24242 signed upload
- Parser: capture `url` tag from NIP-35 events as blossom_url
- Reader: spawn background fetch + cache of blob when url tag present
- Writer: include `url` tag in published NIP-35 events when blob uploaded
- Watcher: upload .torrent file to Blossom before publishing, attach URL
- Migration 007: adds blossom_url + torrent_blob columns to torrents
- Route GET /torrent/<info_hash>.torrent serves cached blobs
- Config: blossom.enabled + blossom.server (disabled by default)
2026-05-17 19:09:42 -07:00
enki f595b8067f chore: update spec to reflect phases 0-4 done; fix axum 0.8 path syntax; add dev config 2026-05-17 15:35:39 -07:00
enki 1b7b70426c feat: Phase 0 bootstrap — kindexr boots, migrates, serves /health
- config: koanf-based loading (defaults → YAML → KINDEXR_ env vars)
- db: embedded SQLite migrations with BEGIN/END-aware statement splitter
- server: chi router, GET /health returns JSON stats
- cmd/kindexr: graceful SIGTERM shutdown
- cmd/kindexr-cli: stub
- deploy: systemd unit, example config, nginx snippet
- all packages covered by race-clean tests
2026-05-16 18:45:15 -07:00