Сделал пароль qBittorrent опциональным (config)

qBittorrent может работать без аутентификации (обход авторизации для
доверенной подсети) — пустой пароль валиден.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
av
2026-06-29 12:25:14 +03:00
co-authored by Claude Opus 4.8
parent 4fc8c41b3a
commit 783664622c
2 changed files with 14 additions and 6 deletions
+3 -5
View File
@@ -252,11 +252,9 @@ func (c *Config) validate() error {
errs = append(errs, fmt.Errorf("worker.source_missing_threshold %d must be >= 1", c.Worker.SourceMissingThreshold)) errs = append(errs, fmt.Errorf("worker.source_missing_threshold %d must be >= 1", c.Worker.SourceMissingThreshold))
} }
// Обязательные секреты включённых секций (ловит криво отрендеренный деплоем // qbittorrent.password намеренно не обязателен: qBittorrent может работать без
// файл). qBittorrent — ядро, пароль нужен всегда. // аутентификации (например, обход авторизации для клиентов из доверенной
if c.QBittorrent.Password == "" { // подсети) — пустой пароль валиден.
errs = append(errs, errors.New("qbittorrent.password is empty (required secret)"))
}
// llm.api_key намеренно не обязателен: keyless-local LLM (LM Studio с // llm.api_key намеренно не обязателен: keyless-local LLM (LM Studio с
// заданным base_url, но без ключа) — валидный документированный дефолт. // заданным base_url, но без ключа) — валидный документированный дефолт.
+11 -1
View File
@@ -33,6 +33,17 @@ func TestValidate_OK(t *testing.T) {
} }
} }
// TestValidate_NoQBittorrentPassword — пустой пароль qBittorrent валиден:
// клиент может работать без аутентификации (обход авторизации для доверенной
// подсети).
func TestValidate_NoQBittorrentPassword(t *testing.T) {
c := validCfg(t)
c.QBittorrent.Password = ""
if err := c.validate(); err != nil {
t.Fatalf("пустой пароль qBittorrent должен быть валиден, got %v", err)
}
}
// TestValidate_KeylessLocalLLM — keyless-local LLM (задан base_url, пустой // TestValidate_KeylessLocalLLM — keyless-local LLM (задан base_url, пустой
// api_key, напр. LM Studio) — валиден: ключ не обязателен. // api_key, напр. LM Studio) — валиден: ключ не обязателен.
func TestValidate_KeylessLocalLLM(t *testing.T) { func TestValidate_KeylessLocalLLM(t *testing.T) {
@@ -51,7 +62,6 @@ func TestValidate_Errors(t *testing.T) {
want string want string
}{ }{
{"empty qbittorrent.url", func(c *Config) { c.QBittorrent.URL = "" }, "qbittorrent.url"}, {"empty qbittorrent.url", func(c *Config) { c.QBittorrent.URL = "" }, "qbittorrent.url"},
{"empty qbittorrent.password", func(c *Config) { c.QBittorrent.Password = "" }, "qbittorrent.password"},
{"empty db_path", func(c *Config) { c.Storage.DBPath = "" }, "storage.db_path"}, {"empty db_path", func(c *Config) { c.Storage.DBPath = "" }, "storage.db_path"},
{"bad llm.type", func(c *Config) { c.LLM.Type = "anthropic" }, "llm.type"}, {"bad llm.type", func(c *Config) { c.LLM.Type = "anthropic" }, "llm.type"},
{"relative movies", func(c *Config) { c.Paths.Movies = "movies" }, "absolute"}, {"relative movies", func(c *Config) { c.Paths.Movies = "movies" }, "absolute"},