diff --git a/feeder-plugin/tribler-feeder/src/main.rs b/feeder-plugin/tribler-feeder/src/main.rs index dc75e40..ca789f9 100644 --- a/feeder-plugin/tribler-feeder/src/main.rs +++ b/feeder-plugin/tribler-feeder/src/main.rs @@ -7,12 +7,16 @@ //! torrent-core TMDB catalog-discovery stack. Split out of `meta-feeder-torrent` //! so its dashboard config panel resolves to the tribler schema. //! -//! Env (shared): `META_FEEDER_HTTP_LISTEN` (default `0.0.0.0:8080`), -//! `META_FEEDER_STATE_DIR` (default `/data/meta-feeder`), `META_CORE_URL` (D4 -//! self-publish), `RUST_LOG`. -//! Env (tribler source): `TRIBLER_SIDECAR_URL`, `TRIBLER_API_KEY`, -//! `TMDB_TOKEN`/`TMDB_LANGUAGE`, plus the enrichment-plugin URLs -//! (`FILENAME_PARSER_URL`, `TMDB_PLUGIN_URL`, `META_FEEDER_CALLBACK_URL`). +//! ALL tribler config — sidecar URL, api key, tmdb token/language, meta-core +//! URL — is read from the persisted `config.json` (dashboard-written) ONLY. +//! There is NO env seed for these: a field in the dashboard config schema must +//! not have an env var (config from JSON file / web UI is the single source of +//! truth). +//! +//! Env (infra only): `META_FEEDER_HTTP_LISTEN` (default `0.0.0.0:8080`), +//! `META_FEEDER_STATE_DIR` (default `/data/meta-feeder`), `META_GATEWAY_PEER_ID`, +//! the enrichment-plugin URLs (`FILENAME_PARSER_URL`, `TMDB_PLUGIN_URL`, +//! `META_FEEDER_CALLBACK_URL`), `RUST_LOG`. use std::net::SocketAddr; @@ -21,7 +25,7 @@ use meta_feeder_sdk::serve_feeders; use tracing::info; use tracing_subscriber::EnvFilter; -use tribler_feeder::tribler::{TriblerConfigFile, TriblerPlugin}; +use tribler_feeder::tribler::TriblerPlugin; #[tokio::main] async fn main() -> anyhow::Result<()> { @@ -35,11 +39,10 @@ async fn main() -> anyhow::Result<()> { let state_dir = std::env::var("META_FEEDER_STATE_DIR").unwrap_or_else(|_| "/data/meta-feeder".to_string()); - // Env is the first-boot seed; the persisted config.json (under the - // per-source cache dir) wins once saved through the dashboard. The tribler - // source builds its enrichment driver in configure(). - let mut tr = TriblerPlugin::new(); - tr.set_seed_config(TriblerConfigFile::from_env()); + // No env seed: the plugin reads config.json in configure() (sidecar URL, + // api key, tmdb, meta-core URL) and builds its enrichment/self-publish + // driver from config.meta_core_url there. + let tr = TriblerPlugin::new(); let plugins: Vec> = vec![Box::new(tr)]; diff --git a/feeder-plugin/tribler-feeder/src/tribler/mod.rs b/feeder-plugin/tribler-feeder/src/tribler/mod.rs index e0a41fc..239f1c3 100644 --- a/feeder-plugin/tribler-feeder/src/tribler/mod.rs +++ b/feeder-plugin/tribler-feeder/src/tribler/mod.rs @@ -92,39 +92,11 @@ pub struct TriblerConfigFile { } impl TriblerConfigFile { - /// Parse the config from the env (first-boot seed). Tribler-connection from - /// `TRIBLER_*`; the enrichment TMDB key/language from `TMDB_TOKEN` - /// (or `PROWLARR_TMDB_TOKEN`) / `TMDB_LANGUAGE` — so an operator can still seed - /// them from env, while the dashboard form overrides at runtime. - pub fn from_env() -> Self { - let mut c = Self::default(); - if let Ok(u) = std::env::var("META_CORE_URL") { - if !u.trim().is_empty() { - c.meta_core_url = Some(u.trim().to_string()); - } - } - if let Ok(url) = std::env::var("TRIBLER_SIDECAR_URL") { - if !url.trim().is_empty() { - c.sidecar_url = Some(url); - } - } - if let Ok(key) = std::env::var("TRIBLER_API_KEY") { - if !key.trim().is_empty() { - c.api_key = Some(key); - } - } - if let Ok(t) = std::env::var("TMDB_TOKEN").or_else(|_| std::env::var("PROWLARR_TMDB_TOKEN")) { - if !t.trim().is_empty() { - c.tmdb_api_key = Some(t); - } - } - if let Ok(l) = std::env::var("TMDB_LANGUAGE") { - if !l.trim().is_empty() { - c.tmdb_language = Some(l); - } - } - c - } + // NOTE: `TriblerConfigFile::from_env()` was deliberately removed. Tribler + // config (sidecar URL, api key, tmdb token/language, meta-core URL) is + // dashboard config — it lives ONLY in the persisted config.json, never in + // env. (Was: TRIBLER_SIDECAR_URL / TRIBLER_API_KEY / TMDB_TOKEN / + // TMDB_LANGUAGE / META_CORE_URL — all now config-schema fields.) } /// HTTP timeout for the *synchronous* calls (local search, remote-search @@ -223,9 +195,6 @@ pub struct TriblerPlugin { sidecar_url: String, api_key: Option, cache: Option, - /// Env-derived config seed (set by `main` via [`set_seed_config`]). - /// `configure()` applies it when no persisted `config.json` exists. - seed_config: TriblerConfigFile, /// Effective config snapshot, exposed (redacted) through the SDK config /// plane for the dashboard's per-plugin config form. cfg: TriblerConfigFile, @@ -261,7 +230,6 @@ impl TriblerPlugin { sidecar_url, api_key: None, cache: None, - seed_config: TriblerConfigFile::default(), cfg: TriblerConfigFile::default(), enricher: None, inline_tmdb: crate::enrich::Enricher::new(), @@ -283,11 +251,8 @@ impl TriblerPlugin { self.api_key = Some(key); } - /// Install the env-derived seed config (applied by `configure()` when no - /// persisted `config.json` exists). Mirrors the torznab feeder. - pub fn set_seed_config(&mut self, cfg: TriblerConfigFile) { - self.seed_config = cfg; - } + // set_seed_config was removed: there is no env seed. config.json is the only + // config source (dashboard-written); apply_config takes it in configure(). /// Apply an effective config: override sidecar URL / API key when present, /// otherwise keep the constructor defaults. Records the effective snapshot @@ -829,10 +794,12 @@ impl FeederPlugin for TriblerPlugin { // plane when the operator saves through the dashboard) wins over the env // seed. Both are optional — tribler has working defaults, so a fully // unconfigured feeder still serves (DEFAULT_SIDECAR_URL, no auth key). + // config.json (dashboard-written) is the ONLY config source — no env + // seed. Absent → tribler's built-in defaults (DEFAULT_SIDECAR_URL, no key). let effective = std::fs::read(cache_dir.join("config.json")) .ok() .and_then(|b| serde_json::from_slice::(&b).ok()) - .unwrap_or_else(|| self.seed_config.clone()); + .unwrap_or_default(); self.apply_config(effective); self.cache = Some(common::open_midhash_cache(cache_dir, "tribler")?); // Build the enrichment driver: infra (META_CORE_URL + plugin URLs + peer @@ -1448,7 +1415,6 @@ fn build_enricher(http: &reqwest::Client, cfg: &TriblerConfigFile) -> Option