From f54c51fa06c2beedf69cadcdccdb7ae3ee1da669 Mon Sep 17 00:00:00 2001 From: ze0s <43699394+zze0s@users.noreply.github.com> Date: Sun, 24 Nov 2024 00:53:59 +0100 Subject: [PATCH] fix(downloadclient): qBittorrent url parse err handling (#1832) * fix(downloadclient): qBittorrent url parse err handling * fix(downloadclient): qBittorrent url parse err handling test --- internal/domain/client.go | 13 ++++++++----- internal/domain/client_test.go | 3 ++- internal/download_client/connection.go | 7 ++++++- internal/download_client/service.go | 7 ++++++- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/internal/domain/client.go b/internal/domain/client.go index d543f94..914aad0 100644 --- a/internal/domain/client.go +++ b/internal/domain/client.go @@ -158,17 +158,20 @@ func (c DownloadClient) Validate() error { return nil } -func (c DownloadClient) BuildLegacyHost() string { +func (c DownloadClient) BuildLegacyHost() (string, error) { if c.Type == DownloadClientTypeQbittorrent { return c.qbitBuildLegacyHost() } - return "" + return c.Host, nil } // qbitBuildLegacyHost exists to support older configs -func (c DownloadClient) qbitBuildLegacyHost() string { +func (c DownloadClient) qbitBuildLegacyHost() (string, error) { // parse url - u, _ := url.Parse(c.Host) + u, err := url.Parse(c.Host) + if err != nil { + return "", err + } // reset Opaque u.Opaque = "" @@ -200,5 +203,5 @@ func (c DownloadClient) qbitBuildLegacyHost() string { } // make into new string and return - return u.String() + return u.String(), nil } diff --git a/internal/domain/client_test.go b/internal/domain/client_test.go index 5556372..253dff8 100644 --- a/internal/domain/client_test.go +++ b/internal/domain/client_test.go @@ -153,7 +153,8 @@ func TestDownloadClient_qbitBuildLegacyHost(t *testing.T) { Password: tt.fields.Password, Settings: tt.fields.Settings, } - assert.Equalf(t, tt.want, c.qbitBuildLegacyHost(), "qbitBuildLegacyHost()") + got, _ := c.qbitBuildLegacyHost() + assert.Equalf(t, tt.want, got, "qbitBuildLegacyHost()") }) } } diff --git a/internal/download_client/connection.go b/internal/download_client/connection.go index faa53f4..b33a1df 100644 --- a/internal/download_client/connection.go +++ b/internal/download_client/connection.go @@ -71,8 +71,13 @@ func (s *service) testConnection(ctx context.Context, client domain.DownloadClie } func (s *service) testQbittorrentConnection(ctx context.Context, client domain.DownloadClient) error { + clientHost, err := client.BuildLegacyHost() + if err != nil { + return errors.Wrap(err, "error building qBittorrent host url: %s", client.Host) + } + qbtSettings := qbittorrent.Config{ - Host: client.BuildLegacyHost(), + Host: clientHost, TLSSkipVerify: client.TLSSkipVerify, Username: client.Username, Password: client.Password, diff --git a/internal/download_client/service.go b/internal/download_client/service.go index 57a277d..b89a7a5 100644 --- a/internal/download_client/service.go +++ b/internal/download_client/service.go @@ -181,8 +181,13 @@ func (s *service) GetClient(ctx context.Context, clientId int32) (*domain.Downlo switch client.Type { case domain.DownloadClientTypeQbittorrent: + clientHost, err := client.BuildLegacyHost() + if err != nil { + return nil, errors.Wrap(err, "error building qBittorrent host url: %v", client.Host) + } + client.Client = qbittorrent.NewClient(qbittorrent.Config{ - Host: client.BuildLegacyHost(), + Host: clientHost, Username: client.Username, Password: client.Password, TLSSkipVerify: client.TLSSkipVerify,