feat(arr): drop unused podnapisi credentials

Podnapisi's search and download are unauthenticated (#188), so the
ARR_PODNAPISI_USERNAME/PASSWORD fields were config nothing read. §10
keeps bootstrap config an honest list.
This commit is contained in:
Miguel Palhas
2026-08-25 06:40:38 +01:00
parent 5bc9022046
commit 5f1fffdd97
+5 -21
View File
@@ -36,8 +36,8 @@ pub const ENV_NTFY_OPERATOR_TOPIC: &str = "ARR_NTFY_OPERATOR_TOPIC";
pub const ENV_OPENSUBTITLES_API_KEY: &str = "ARR_OPENSUBTITLES_API_KEY"; pub const ENV_OPENSUBTITLES_API_KEY: &str = "ARR_OPENSUBTITLES_API_KEY";
pub const ENV_OPENSUBTITLES_USERNAME: &str = "ARR_OPENSUBTITLES_USERNAME"; pub const ENV_OPENSUBTITLES_USERNAME: &str = "ARR_OPENSUBTITLES_USERNAME";
pub const ENV_OPENSUBTITLES_PASSWORD: &str = "ARR_OPENSUBTITLES_PASSWORD"; pub const ENV_OPENSUBTITLES_PASSWORD: &str = "ARR_OPENSUBTITLES_PASSWORD";
pub const ENV_PODNAPISI_USERNAME: &str = "ARR_PODNAPISI_USERNAME"; // Podnapisi takes no credentials (#215): its search and download are
pub const ENV_PODNAPISI_PASSWORD: &str = "ARR_PODNAPISI_PASSWORD"; // unauthenticated, so there is nothing here for an operator to set.
pub const ENV_TRANSLATE_OPENAI_API_KEY: &str = "ARR_TRANSLATE_OPENAI_API_KEY"; pub const ENV_TRANSLATE_OPENAI_API_KEY: &str = "ARR_TRANSLATE_OPENAI_API_KEY";
pub const ENV_TRANSLATE_OPENAI_BASE_URL: &str = "ARR_TRANSLATE_OPENAI_BASE_URL"; pub const ENV_TRANSLATE_OPENAI_BASE_URL: &str = "ARR_TRANSLATE_OPENAI_BASE_URL";
pub const ENV_TRANSLATE_OPENAI_MODEL: &str = "ARR_TRANSLATE_OPENAI_MODEL"; pub const ENV_TRANSLATE_OPENAI_MODEL: &str = "ARR_TRANSLATE_OPENAI_MODEL";
@@ -178,8 +178,6 @@ pub struct EnvOverrides {
pub opensubtitles_api_key: Option<String>, pub opensubtitles_api_key: Option<String>,
pub opensubtitles_username: Option<String>, pub opensubtitles_username: Option<String>,
pub opensubtitles_password: Option<String>, pub opensubtitles_password: Option<String>,
pub podnapisi_username: Option<String>,
pub podnapisi_password: Option<String>,
pub translate_openai_api_key: Option<String>, pub translate_openai_api_key: Option<String>,
pub translate_openai_base_url: Option<String>, pub translate_openai_base_url: Option<String>,
pub translate_openai_model: Option<String>, pub translate_openai_model: Option<String>,
@@ -215,8 +213,6 @@ impl EnvOverrides {
opensubtitles_api_key: std::env::var(ENV_OPENSUBTITLES_API_KEY).ok(), opensubtitles_api_key: std::env::var(ENV_OPENSUBTITLES_API_KEY).ok(),
opensubtitles_username: std::env::var(ENV_OPENSUBTITLES_USERNAME).ok(), opensubtitles_username: std::env::var(ENV_OPENSUBTITLES_USERNAME).ok(),
opensubtitles_password: std::env::var(ENV_OPENSUBTITLES_PASSWORD).ok(), opensubtitles_password: std::env::var(ENV_OPENSUBTITLES_PASSWORD).ok(),
podnapisi_username: std::env::var(ENV_PODNAPISI_USERNAME).ok(),
podnapisi_password: std::env::var(ENV_PODNAPISI_PASSWORD).ok(),
translate_openai_api_key: std::env::var(ENV_TRANSLATE_OPENAI_API_KEY).ok(), translate_openai_api_key: std::env::var(ENV_TRANSLATE_OPENAI_API_KEY).ok(),
translate_openai_base_url: std::env::var(ENV_TRANSLATE_OPENAI_BASE_URL).ok(), translate_openai_base_url: std::env::var(ENV_TRANSLATE_OPENAI_BASE_URL).ok(),
translate_openai_model: std::env::var(ENV_TRANSLATE_OPENAI_MODEL).ok(), translate_openai_model: std::env::var(ENV_TRANSLATE_OPENAI_MODEL).ok(),
@@ -265,8 +261,6 @@ pub struct Config {
pub opensubtitles_api_key: Option<String>, pub opensubtitles_api_key: Option<String>,
pub opensubtitles_username: Option<String>, pub opensubtitles_username: Option<String>,
pub opensubtitles_password: Option<String>, pub opensubtitles_password: Option<String>,
pub podnapisi_username: Option<String>,
pub podnapisi_password: Option<String>,
pub translate_openai_api_key: Option<String>, pub translate_openai_api_key: Option<String>,
/// §15. No default: an OpenAI-compatible endpoint has no universal /// §15. No default: an OpenAI-compatible endpoint has no universal
/// address the way `DeepL` or Google Translate do. /// address the way `DeepL` or Google Translate do.
@@ -299,8 +293,6 @@ struct SubtitleBootstrap {
opensubtitles_api_key: Option<String>, opensubtitles_api_key: Option<String>,
opensubtitles_username: Option<String>, opensubtitles_username: Option<String>,
opensubtitles_password: Option<String>, opensubtitles_password: Option<String>,
podnapisi_username: Option<String>,
podnapisi_password: Option<String>,
translate_openai_api_key: Option<String>, translate_openai_api_key: Option<String>,
translate_openai_base_url: Option<String>, translate_openai_base_url: Option<String>,
translate_openai_model: String, translate_openai_model: String,
@@ -318,8 +310,6 @@ fn resolve_subtitle_bootstrap(env: &EnvOverrides, file: &ConfigFile) -> Subtitle
opensubtitles_api_key: env.opensubtitles_api_key.clone(), opensubtitles_api_key: env.opensubtitles_api_key.clone(),
opensubtitles_username: env.opensubtitles_username.clone(), opensubtitles_username: env.opensubtitles_username.clone(),
opensubtitles_password: env.opensubtitles_password.clone(), opensubtitles_password: env.opensubtitles_password.clone(),
podnapisi_username: env.podnapisi_username.clone(),
podnapisi_password: env.podnapisi_password.clone(),
translate_openai_api_key: env.translate_openai_api_key.clone(), translate_openai_api_key: env.translate_openai_api_key.clone(),
translate_openai_base_url: env translate_openai_base_url: env
.translate_openai_base_url .translate_openai_base_url
@@ -443,8 +433,6 @@ impl Config {
opensubtitles_api_key: subtitles.opensubtitles_api_key, opensubtitles_api_key: subtitles.opensubtitles_api_key,
opensubtitles_username: subtitles.opensubtitles_username, opensubtitles_username: subtitles.opensubtitles_username,
opensubtitles_password: subtitles.opensubtitles_password, opensubtitles_password: subtitles.opensubtitles_password,
podnapisi_username: subtitles.podnapisi_username,
podnapisi_password: subtitles.podnapisi_password,
translate_openai_api_key: subtitles.translate_openai_api_key, translate_openai_api_key: subtitles.translate_openai_api_key,
translate_openai_base_url: subtitles.translate_openai_base_url, translate_openai_base_url: subtitles.translate_openai_base_url,
translate_openai_model: subtitles.translate_openai_model, translate_openai_model: subtitles.translate_openai_model,
@@ -502,7 +490,6 @@ mod tests {
assert_eq!(config.tmdb_api_key, None); assert_eq!(config.tmdb_api_key, None);
assert_eq!(config.jellyfin_api_key, None); assert_eq!(config.jellyfin_api_key, None);
assert_eq!(config.opensubtitles_api_key, None); assert_eq!(config.opensubtitles_api_key, None);
assert_eq!(config.podnapisi_username, None);
assert_eq!(config.translate_command_template, None); assert_eq!(config.translate_command_template, None);
assert_eq!( assert_eq!(
config.translate_openai_model, config.translate_openai_model,
@@ -578,16 +565,15 @@ prowlarr_url = "http://prowlarr.internal:9696"
assert_eq!(config.jellyfin_api_key.as_deref(), Some("secret-3")); assert_eq!(config.jellyfin_api_key.as_deref(), Some("secret-3"));
} }
/// §15: `OpenSubtitles`, Podnapisi and every translator's credentials are /// §15: `OpenSubtitles` and every translator's credentials are secrets,
/// secrets, so this mirrors [`secrets_come_only_from_env`] for them. /// so this mirrors [`secrets_come_only_from_env`] for them. Podnapisi has
/// no entry: it takes no credentials at all (#215).
#[test] #[test]
fn subtitle_secrets_come_only_from_env() { fn subtitle_secrets_come_only_from_env() {
let env = EnvOverrides { let env = EnvOverrides {
opensubtitles_api_key: Some("os-key".into()), opensubtitles_api_key: Some("os-key".into()),
opensubtitles_username: Some("os-user".into()), opensubtitles_username: Some("os-user".into()),
opensubtitles_password: Some("os-pass".into()), opensubtitles_password: Some("os-pass".into()),
podnapisi_username: Some("pod-user".into()),
podnapisi_password: Some("pod-pass".into()),
translate_openai_api_key: Some("oa-key".into()), translate_openai_api_key: Some("oa-key".into()),
translate_deepl_api_key: Some("dl-key".into()), translate_deepl_api_key: Some("dl-key".into()),
translate_google_api_key: Some("gg-key".into()), translate_google_api_key: Some("gg-key".into()),
@@ -597,8 +583,6 @@ prowlarr_url = "http://prowlarr.internal:9696"
assert_eq!(config.opensubtitles_api_key.as_deref(), Some("os-key")); assert_eq!(config.opensubtitles_api_key.as_deref(), Some("os-key"));
assert_eq!(config.opensubtitles_username.as_deref(), Some("os-user")); assert_eq!(config.opensubtitles_username.as_deref(), Some("os-user"));
assert_eq!(config.opensubtitles_password.as_deref(), Some("os-pass")); assert_eq!(config.opensubtitles_password.as_deref(), Some("os-pass"));
assert_eq!(config.podnapisi_username.as_deref(), Some("pod-user"));
assert_eq!(config.podnapisi_password.as_deref(), Some("pod-pass"));
assert_eq!(config.translate_openai_api_key.as_deref(), Some("oa-key")); assert_eq!(config.translate_openai_api_key.as_deref(), Some("oa-key"));
assert_eq!(config.translate_deepl_api_key.as_deref(), Some("dl-key")); assert_eq!(config.translate_deepl_api_key.as_deref(), Some("dl-key"));
assert_eq!(config.translate_google_api_key.as_deref(), Some("gg-key")); assert_eq!(config.translate_google_api_key.as_deref(), Some("gg-key"));