From 890cb875b15bbbc1a3cbc4f983b6577356345973 Mon Sep 17 00:00:00 2001 From: Simon Hamelin Date: Sun, 8 Jun 2025 19:13:39 -0400 Subject: [PATCH] feat: add basic auth support for SABnzbd --- Dockerfile | 2 +- README.md | 4 ++-- cmd/exportarr/main.go | 2 +- go.mod | 18 +++++++-------- go.sum | 16 +++++++++++++ internal/arr/client/auth.go | 4 ++-- internal/arr/client/auth_test.go | 2 +- internal/arr/collector/bazarr.go | 6 ++--- internal/arr/collector/bazarr_test.go | 4 ++-- internal/arr/collector/health.go | 6 ++--- internal/arr/collector/health_test.go | 4 ++-- internal/arr/collector/history.go | 6 ++--- internal/arr/collector/history_test.go | 4 ++-- internal/arr/collector/lidarr.go | 6 ++--- internal/arr/collector/lidarr_test.go | 4 ++-- internal/arr/collector/prowlarr.go | 6 ++--- internal/arr/collector/prowlarr_test.go | 2 +- internal/arr/collector/queue.go | 6 ++--- internal/arr/collector/queue_test.go | 4 ++-- internal/arr/collector/radarr.go | 6 ++--- internal/arr/collector/radarr_test.go | 4 ++-- internal/arr/collector/readarr.go | 6 ++--- internal/arr/collector/readarr_test.go | 4 ++-- internal/arr/collector/rootfolder.go | 6 ++--- internal/arr/collector/rootfolder_test.go | 4 ++-- internal/arr/collector/sonarr.go | 6 ++--- internal/arr/collector/sonarr_test.go | 4 ++-- internal/arr/collector/status.go | 6 ++--- internal/arr/collector/status_test.go | 4 ++-- internal/arr/config/arr.go | 2 +- internal/arr/config/arr_integration_test.go | 2 +- internal/arr/config/arr_test.go | 2 +- internal/commands/arr.go | 4 ++-- internal/commands/arr_test.go | 4 ++-- internal/commands/root.go | 6 ++--- internal/commands/sabnzbd.go | 4 ++-- internal/config/config.go | 8 +++++++ internal/handlers/middleware.go | 2 +- internal/sabnzbd/auth/auth.go | 16 +++++++++++++ internal/sabnzbd/collector/cache.go | 2 +- internal/sabnzbd/collector/cache_test.go | 2 +- internal/sabnzbd/collector/collector.go | 24 +++++++++++++++----- internal/sabnzbd/collector/collector_test.go | 2 +- internal/sabnzbd/config/config.go | 6 ++++- 44 files changed, 149 insertions(+), 93 deletions(-) diff --git a/Dockerfile b/Dockerfile index ff196fd..6c30ccf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,4 +27,4 @@ COPY --from=builder --chown=nonroot:nonroot /sbin/tini-static /tini ENTRYPOINT [ "/tini", "--", "/exportarr" ] LABEL \ org.opencontainers.image.title="exportarr" \ - org.opencontainers.image.source="https://github.com/onedr0p/exportarr" + org.opencontainers.image.source="https://github.com/shamelin/exportarr" diff --git a/README.md b/README.md index 1524492..618d3ef 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ AIO Prometheus Exporter for Sonarr, Radarr, Lidarr, Prowlarr, Readarr, Bazarr and Sabnzbd -[![Go Report Card](https://goreportcard.com/badge/github.com/onedr0p/exportarr)](https://goreportcard.com/report/github.com/onedr0p/exportarr) +[![Go Report Card](https://goreportcard.com/badge/github.com/shamelin/exportarr)](https://goreportcard.com/report/github.com/shamelin/exportarr) Note: This exporter will not gather metrics from all apps at once. You will need an `exportarr` instance for each app. Be sure to see the examples below for more information. @@ -30,7 +30,7 @@ docker run --name exportarr_$app \ -e APIKEY="$apikey" \ --restart unless-stopped \ -p 9707:9707 \ - -d ghcr.io/onedr0p/exportarr:latest $app + -d ghcr.io/shamelin/exportarr:latest $app ``` Visit http://127.0.0.1:9707/metrics to see the app metrics diff --git a/cmd/exportarr/main.go b/cmd/exportarr/main.go index ca23741..e76a973 100644 --- a/cmd/exportarr/main.go +++ b/cmd/exportarr/main.go @@ -1,7 +1,7 @@ package main import ( - "github.com/onedr0p/exportarr/internal/commands" + "github.com/shamelin/exportarr/internal/commands" ) var ( diff --git a/go.mod b/go.mod index 59eacfd..ec2291f 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/onedr0p/exportarr +module github.com/shamelin/exportarr go 1.23.0 @@ -16,7 +16,7 @@ require ( github.com/spf13/pflag v1.0.6 github.com/stretchr/testify v1.10.0 go.uber.org/zap v1.27.0 - golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 + golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476 golang.org/x/sync v0.15.0 ) @@ -35,12 +35,12 @@ require ( github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.62.0 // indirect - github.com/prometheus/procfs v0.15.1 // indirect - go.uber.org/multierr v1.10.0 // indirect - golang.org/x/sys v0.32.0 // indirect - golang.org/x/text v0.21.0 // indirect - google.golang.org/protobuf v1.36.5 // indirect + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/common v0.64.0 // indirect + github.com/prometheus/procfs v0.16.1 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/sys v0.33.0 // indirect + golang.org/x/text v0.26.0 // indirect + google.golang.org/protobuf v1.36.6 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index f0c2bfd..34b0855 100644 --- a/go.sum +++ b/go.sum @@ -53,10 +53,16 @@ github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/ github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= +github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= +github.com/prometheus/common v0.64.0 h1:pdZeA+g617P7oGv1CzdTzyeShxAGrTBsolKNOLQPGO4= +github.com/prometheus/common v0.64.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= +github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -72,20 +78,30 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 h1:ESSUROHIBHg7USnszlcdmjBEwdMj9VUvU+OPk4yl2mc= golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= +golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476 h1:bsqhLWFR6G6xiQcb+JoGqdKdRU6WzPWmK8E0jxTjzo4= +golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8= golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/internal/arr/client/auth.go b/internal/arr/client/auth.go index d9cdbe7..dfb25f4 100644 --- a/internal/arr/client/auth.go +++ b/internal/arr/client/auth.go @@ -7,8 +7,8 @@ import ( "strings" "time" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/client" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/client" ) type Client = client.Client diff --git a/internal/arr/client/auth_test.go b/internal/arr/client/auth_test.go index 8fdd014..da9382a 100644 --- a/internal/arr/client/auth_test.go +++ b/internal/arr/client/auth_test.go @@ -9,7 +9,7 @@ import ( "testing" "time" - base_client "github.com/onedr0p/exportarr/internal/client" + base_client "github.com/shamelin/exportarr/internal/client" "github.com/stretchr/testify/require" ) diff --git a/internal/arr/collector/bazarr.go b/internal/arr/collector/bazarr.go index e9480a9..214da2f 100644 --- a/internal/arr/collector/bazarr.go +++ b/internal/arr/collector/bazarr.go @@ -2,13 +2,13 @@ package collector import ( "fmt" + "github.com/shamelin/exportarr/internal/arr/model" "sync" "time" - "github.com/onedr0p/exportarr/internal/arr/client" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/arr/model" "github.com/prometheus/client_golang/prometheus" + "github.com/shamelin/exportarr/internal/arr/client" + "github.com/shamelin/exportarr/internal/arr/config" "go.uber.org/zap" "golang.org/x/sync/errgroup" ) diff --git a/internal/arr/collector/bazarr_test.go b/internal/arr/collector/bazarr_test.go index a153436..ce3c2c6 100644 --- a/internal/arr/collector/bazarr_test.go +++ b/internal/arr/collector/bazarr_test.go @@ -7,9 +7,9 @@ import ( "strings" "testing" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/test_util" "github.com/prometheus/client_golang/prometheus/testutil" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/test_util" "github.com/stretchr/testify/require" "golang.org/x/exp/slices" ) diff --git a/internal/arr/collector/health.go b/internal/arr/collector/health.go index cab46a0..4620172 100644 --- a/internal/arr/collector/health.go +++ b/internal/arr/collector/health.go @@ -3,10 +3,10 @@ package collector import ( "fmt" - "github.com/onedr0p/exportarr/internal/arr/client" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/arr/model" "github.com/prometheus/client_golang/prometheus" + "github.com/shamelin/exportarr/internal/arr/client" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/arr/model" "go.uber.org/zap" ) diff --git a/internal/arr/collector/health_test.go b/internal/arr/collector/health_test.go index 71aa8cd..30a8437 100644 --- a/internal/arr/collector/health_test.go +++ b/internal/arr/collector/health_test.go @@ -7,9 +7,9 @@ import ( "strings" "testing" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/test_util" "github.com/prometheus/client_golang/prometheus/testutil" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/test_util" "github.com/stretchr/testify/require" ) diff --git a/internal/arr/collector/history.go b/internal/arr/collector/history.go index 5494f04..aefeceb 100644 --- a/internal/arr/collector/history.go +++ b/internal/arr/collector/history.go @@ -3,10 +3,10 @@ package collector import ( "fmt" - "github.com/onedr0p/exportarr/internal/arr/client" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/arr/model" "github.com/prometheus/client_golang/prometheus" + "github.com/shamelin/exportarr/internal/arr/client" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/arr/model" "go.uber.org/zap" ) diff --git a/internal/arr/collector/history_test.go b/internal/arr/collector/history_test.go index 04f7773..62fd02d 100644 --- a/internal/arr/collector/history_test.go +++ b/internal/arr/collector/history_test.go @@ -7,9 +7,9 @@ import ( "strings" "testing" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/test_util" "github.com/prometheus/client_golang/prometheus/testutil" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/test_util" "github.com/stretchr/testify/require" ) diff --git a/internal/arr/collector/lidarr.go b/internal/arr/collector/lidarr.go index 3f522ff..f0b7e86 100644 --- a/internal/arr/collector/lidarr.go +++ b/internal/arr/collector/lidarr.go @@ -4,10 +4,10 @@ import ( "fmt" "strconv" - "github.com/onedr0p/exportarr/internal/arr/client" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/arr/model" "github.com/prometheus/client_golang/prometheus" + "github.com/shamelin/exportarr/internal/arr/client" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/arr/model" "go.uber.org/zap" ) diff --git a/internal/arr/collector/lidarr_test.go b/internal/arr/collector/lidarr_test.go index 5509ef8..535e00c 100644 --- a/internal/arr/collector/lidarr_test.go +++ b/internal/arr/collector/lidarr_test.go @@ -7,9 +7,9 @@ import ( "strings" "testing" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/test_util" "github.com/prometheus/client_golang/prometheus/testutil" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/test_util" "github.com/stretchr/testify/require" ) diff --git a/internal/arr/collector/prowlarr.go b/internal/arr/collector/prowlarr.go index b756327..ff9b930 100644 --- a/internal/arr/collector/prowlarr.go +++ b/internal/arr/collector/prowlarr.go @@ -5,10 +5,10 @@ import ( "sync" "time" - "github.com/onedr0p/exportarr/internal/arr/client" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/arr/model" "github.com/prometheus/client_golang/prometheus" + "github.com/shamelin/exportarr/internal/arr/client" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/arr/model" "go.uber.org/zap" ) diff --git a/internal/arr/collector/prowlarr_test.go b/internal/arr/collector/prowlarr_test.go index cf8532e..7b3e981 100644 --- a/internal/arr/collector/prowlarr_test.go +++ b/internal/arr/collector/prowlarr_test.go @@ -4,9 +4,9 @@ import ( "strings" "testing" - "github.com/onedr0p/exportarr/internal/arr/model" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/testutil" + "github.com/shamelin/exportarr/internal/arr/model" "github.com/stretchr/testify/require" ) diff --git a/internal/arr/collector/queue.go b/internal/arr/collector/queue.go index 3bcb3f9..ebecfac 100644 --- a/internal/arr/collector/queue.go +++ b/internal/arr/collector/queue.go @@ -3,10 +3,10 @@ package collector import ( "fmt" - "github.com/onedr0p/exportarr/internal/arr/client" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/arr/model" "github.com/prometheus/client_golang/prometheus" + "github.com/shamelin/exportarr/internal/arr/client" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/arr/model" "go.uber.org/zap" ) diff --git a/internal/arr/collector/queue_test.go b/internal/arr/collector/queue_test.go index 001baa7..b5932b8 100644 --- a/internal/arr/collector/queue_test.go +++ b/internal/arr/collector/queue_test.go @@ -7,9 +7,9 @@ import ( "strings" "testing" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/test_util" "github.com/prometheus/client_golang/prometheus/testutil" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/test_util" "github.com/stretchr/testify/require" ) diff --git a/internal/arr/collector/radarr.go b/internal/arr/collector/radarr.go index 051d0ad..5efb229 100644 --- a/internal/arr/collector/radarr.go +++ b/internal/arr/collector/radarr.go @@ -3,10 +3,10 @@ package collector import ( "strconv" - "github.com/onedr0p/exportarr/internal/arr/client" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/arr/model" "github.com/prometheus/client_golang/prometheus" + "github.com/shamelin/exportarr/internal/arr/client" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/arr/model" "go.uber.org/zap" ) diff --git a/internal/arr/collector/radarr_test.go b/internal/arr/collector/radarr_test.go index c47fdbe..a6c3d2e 100644 --- a/internal/arr/collector/radarr_test.go +++ b/internal/arr/collector/radarr_test.go @@ -7,9 +7,9 @@ import ( "strings" "testing" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/test_util" "github.com/prometheus/client_golang/prometheus/testutil" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/test_util" "github.com/stretchr/testify/require" ) diff --git a/internal/arr/collector/readarr.go b/internal/arr/collector/readarr.go index 3c151e4..9c1fa3a 100644 --- a/internal/arr/collector/readarr.go +++ b/internal/arr/collector/readarr.go @@ -3,10 +3,10 @@ package collector import ( "time" - "github.com/onedr0p/exportarr/internal/arr/client" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/arr/model" "github.com/prometheus/client_golang/prometheus" + "github.com/shamelin/exportarr/internal/arr/client" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/arr/model" "go.uber.org/zap" ) diff --git a/internal/arr/collector/readarr_test.go b/internal/arr/collector/readarr_test.go index 1fc4849..e7ab0c2 100644 --- a/internal/arr/collector/readarr_test.go +++ b/internal/arr/collector/readarr_test.go @@ -7,9 +7,9 @@ import ( "strings" "testing" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/test_util" "github.com/prometheus/client_golang/prometheus/testutil" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/test_util" "github.com/stretchr/testify/require" ) diff --git a/internal/arr/collector/rootfolder.go b/internal/arr/collector/rootfolder.go index a301b7e..b90318f 100644 --- a/internal/arr/collector/rootfolder.go +++ b/internal/arr/collector/rootfolder.go @@ -3,10 +3,10 @@ package collector import ( "fmt" - "github.com/onedr0p/exportarr/internal/arr/client" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/arr/model" "github.com/prometheus/client_golang/prometheus" + "github.com/shamelin/exportarr/internal/arr/client" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/arr/model" "go.uber.org/zap" ) diff --git a/internal/arr/collector/rootfolder_test.go b/internal/arr/collector/rootfolder_test.go index 5273669..49fe650 100644 --- a/internal/arr/collector/rootfolder_test.go +++ b/internal/arr/collector/rootfolder_test.go @@ -7,9 +7,9 @@ import ( "strings" "testing" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/test_util" "github.com/prometheus/client_golang/prometheus/testutil" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/test_util" "github.com/stretchr/testify/require" ) diff --git a/internal/arr/collector/sonarr.go b/internal/arr/collector/sonarr.go index 258980c..6fd0f7c 100644 --- a/internal/arr/collector/sonarr.go +++ b/internal/arr/collector/sonarr.go @@ -5,10 +5,10 @@ import ( "strconv" "time" - "github.com/onedr0p/exportarr/internal/arr/client" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/arr/model" "github.com/prometheus/client_golang/prometheus" + "github.com/shamelin/exportarr/internal/arr/client" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/arr/model" "go.uber.org/zap" ) diff --git a/internal/arr/collector/sonarr_test.go b/internal/arr/collector/sonarr_test.go index 109a129..59fcddf 100644 --- a/internal/arr/collector/sonarr_test.go +++ b/internal/arr/collector/sonarr_test.go @@ -7,9 +7,9 @@ import ( "strings" "testing" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/test_util" "github.com/prometheus/client_golang/prometheus/testutil" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/test_util" "github.com/stretchr/testify/require" ) diff --git a/internal/arr/collector/status.go b/internal/arr/collector/status.go index e5547ff..1997e37 100644 --- a/internal/arr/collector/status.go +++ b/internal/arr/collector/status.go @@ -3,10 +3,10 @@ package collector import ( "fmt" - "github.com/onedr0p/exportarr/internal/arr/client" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/arr/model" "github.com/prometheus/client_golang/prometheus" + "github.com/shamelin/exportarr/internal/arr/client" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/arr/model" "go.uber.org/zap" ) diff --git a/internal/arr/collector/status_test.go b/internal/arr/collector/status_test.go index aad3d4f..dd31728 100644 --- a/internal/arr/collector/status_test.go +++ b/internal/arr/collector/status_test.go @@ -7,9 +7,9 @@ import ( "strings" "testing" - "github.com/onedr0p/exportarr/internal/arr/config" - "github.com/onedr0p/exportarr/internal/test_util" "github.com/prometheus/client_golang/prometheus/testutil" + "github.com/shamelin/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/test_util" "github.com/stretchr/testify/require" ) diff --git a/internal/arr/config/arr.go b/internal/arr/config/arr.go index 1e2d4b1..279ca0c 100644 --- a/internal/arr/config/arr.go +++ b/internal/arr/config/arr.go @@ -13,7 +13,7 @@ import ( "github.com/knadh/koanf/v2" flag "github.com/spf13/pflag" - base_config "github.com/onedr0p/exportarr/internal/config" + base_config "github.com/shamelin/exportarr/internal/config" ) func RegisterArrFlags(flags *flag.FlagSet) { diff --git a/internal/arr/config/arr_integration_test.go b/internal/arr/config/arr_integration_test.go index 6a2d1cd..e6ab293 100644 --- a/internal/arr/config/arr_integration_test.go +++ b/internal/arr/config/arr_integration_test.go @@ -3,7 +3,7 @@ package config import ( "testing" - base_config "github.com/onedr0p/exportarr/internal/config" + base_config "github.com/shamelin/exportarr/internal/config" "github.com/spf13/pflag" "github.com/stretchr/testify/require" ) diff --git a/internal/arr/config/arr_test.go b/internal/arr/config/arr_test.go index 1f63fc2..de907f6 100644 --- a/internal/arr/config/arr_test.go +++ b/internal/arr/config/arr_test.go @@ -3,7 +3,7 @@ package config import ( "testing" - base_config "github.com/onedr0p/exportarr/internal/config" + base_config "github.com/shamelin/exportarr/internal/config" "github.com/spf13/pflag" "github.com/stretchr/testify/require" ) diff --git a/internal/commands/arr.go b/internal/commands/arr.go index 34c009b..aceae29 100644 --- a/internal/commands/arr.go +++ b/internal/commands/arr.go @@ -7,8 +7,8 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/spf13/cobra" - "github.com/onedr0p/exportarr/internal/arr/collector" - "github.com/onedr0p/exportarr/internal/arr/config" + "github.com/shamelin/exportarr/internal/arr/collector" + "github.com/shamelin/exportarr/internal/arr/config" ) func init() { diff --git a/internal/commands/arr_test.go b/internal/commands/arr_test.go index 8e360b2..10e0df6 100644 --- a/internal/commands/arr_test.go +++ b/internal/commands/arr_test.go @@ -3,8 +3,8 @@ package commands import ( "testing" - "github.com/onedr0p/exportarr/internal/arr/config" - base_config "github.com/onedr0p/exportarr/internal/config" + "github.com/shamelin/exportarr/internal/arr/config" + base_config "github.com/shamelin/exportarr/internal/config" "github.com/spf13/pflag" "github.com/stretchr/testify/require" ) diff --git a/internal/commands/root.go b/internal/commands/root.go index d24b577..c87d088 100644 --- a/internal/commands/root.go +++ b/internal/commands/root.go @@ -15,8 +15,8 @@ import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" - "github.com/onedr0p/exportarr/internal/config" - "github.com/onedr0p/exportarr/internal/handlers" + "github.com/shamelin/exportarr/internal/config" + "github.com/shamelin/exportarr/internal/handlers" ) var GRACEFUL_TIMEOUT = 5 * time.Second @@ -29,7 +29,7 @@ var ( Short: "exportarr is a AIO Prometheus exporter for *arr applications", Long: `exportarr is a Prometheus exporter for *arr applications. It can export metrics from Radarr, Sonarr, Lidarr, Readarr, Bazarr and Prowlarr. -More information available at the Github Repo (https://github.com/onedr0p/exportarr)`, +More information available at the Github Repo (https://github.com/shamelin/exportarr)`, PersistentPreRun: func(cmd *cobra.Command, args []string) { conf.App = cmd.Name() }, diff --git a/internal/commands/sabnzbd.go b/internal/commands/sabnzbd.go index 232852d..d85aae8 100644 --- a/internal/commands/sabnzbd.go +++ b/internal/commands/sabnzbd.go @@ -1,9 +1,9 @@ package commands import ( - "github.com/onedr0p/exportarr/internal/sabnzbd/collector" - "github.com/onedr0p/exportarr/internal/sabnzbd/config" "github.com/prometheus/client_golang/prometheus" + "github.com/shamelin/exportarr/internal/sabnzbd/collector" + "github.com/shamelin/exportarr/internal/sabnzbd/config" "github.com/spf13/cobra" ) diff --git a/internal/config/config.go b/internal/config/config.go index d5b2fa1..df19581 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -33,6 +33,8 @@ type Config struct { URL string `koanf:"url"` ApiKey string `koanf:"api-key"` ApiKeyFile string `koanf:"api-key-file"` + AuthUsername string `koanf:"auth-username"` + AuthPassword string `koanf:"auth-password"` Port int `koanf:"port" validate:"required"` Interface string `koanf:"interface" validate:"required|ip"` DisableSSLVerify bool `koanf:"disable-ssl-verify"` @@ -123,6 +125,8 @@ func (c Config) Translates() map[string]string { "URL": "url", "ApiKey": "api-key", "ApiKeyFile": "api-key-file", + "AuthUsername": "auth-username", + "AuthPassword": "auth-password", "ApiVersion": "api-version", "Port": "port", "Interface": "interface", @@ -130,6 +134,10 @@ func (c Config) Translates() map[string]string { } } +func (c *Config) UseBasicAuth() bool { + return c.AuthUsername != "" && c.AuthPassword != "" +} + // Remove in v2.0.0 func backwardsCompatibilityTransforms(s string) string { switch s { diff --git a/internal/handlers/middleware.go b/internal/handlers/middleware.go index d50dd3a..7c915dd 100644 --- a/internal/handlers/middleware.go +++ b/internal/handlers/middleware.go @@ -2,12 +2,12 @@ package handlers import ( "fmt" + "github.com/shamelin/exportarr/internal/config" "net/http" "time" "go.uber.org/zap" - "github.com/onedr0p/exportarr/internal/config" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" ) diff --git a/internal/sabnzbd/auth/auth.go b/internal/sabnzbd/auth/auth.go index 56eaa50..ead8d17 100644 --- a/internal/sabnzbd/auth/auth.go +++ b/internal/sabnzbd/auth/auth.go @@ -15,3 +15,19 @@ func (a ApiKeyAuth) Auth(req *http.Request) error { req.URL.RawQuery = q.Encode() return nil } + +type BasicAuth struct { + Username string + Password string + ApiKey string +} + +func (a *BasicAuth) Auth(req *http.Request) error { + req.SetBasicAuth(a.Username, a.Password) + if req.URL.Query().Get("apikey") == "" { + q := req.URL.Query() + q.Add("apikey", a.ApiKey) + req.URL.RawQuery = q.Encode() + } + return nil +} diff --git a/internal/sabnzbd/collector/cache.go b/internal/sabnzbd/collector/cache.go index eb3ff09..9559ac4 100644 --- a/internal/sabnzbd/collector/cache.go +++ b/internal/sabnzbd/collector/cache.go @@ -4,7 +4,7 @@ import ( "errors" "sync" - "github.com/onedr0p/exportarr/internal/sabnzbd/model" + "github.com/shamelin/exportarr/internal/sabnzbd/model" ) type ServerStats interface { diff --git a/internal/sabnzbd/collector/cache_test.go b/internal/sabnzbd/collector/cache_test.go index 5993caf..059fdd9 100644 --- a/internal/sabnzbd/collector/cache_test.go +++ b/internal/sabnzbd/collector/cache_test.go @@ -3,7 +3,7 @@ package collector import ( "testing" - "github.com/onedr0p/exportarr/internal/sabnzbd/model" + "github.com/shamelin/exportarr/internal/sabnzbd/model" "github.com/stretchr/testify/require" ) diff --git a/internal/sabnzbd/collector/collector.go b/internal/sabnzbd/collector/collector.go index 5446099..2d10361 100644 --- a/internal/sabnzbd/collector/collector.go +++ b/internal/sabnzbd/collector/collector.go @@ -2,15 +2,15 @@ package collector import ( "fmt" + "github.com/shamelin/exportarr/internal/sabnzbd/auth" "time" "github.com/prometheus/client_golang/prometheus" "go.uber.org/zap" - "github.com/onedr0p/exportarr/internal/client" - "github.com/onedr0p/exportarr/internal/sabnzbd/auth" - "github.com/onedr0p/exportarr/internal/sabnzbd/config" - "github.com/onedr0p/exportarr/internal/sabnzbd/model" + "github.com/shamelin/exportarr/internal/client" + "github.com/shamelin/exportarr/internal/sabnzbd/config" + "github.com/shamelin/exportarr/internal/sabnzbd/model" "golang.org/x/sync/errgroup" ) @@ -173,8 +173,20 @@ type SabnzbdCollector struct { // TODO: Add a sab-specific config struct to abstract away the config parsing func NewSabnzbdCollector(config *config.SabnzbdConfig) (*SabnzbdCollector, error) { - auther := auth.ApiKeyAuth{ApiKey: config.ApiKey} - client, err := client.NewClient(config.URL, config.DisableSSLVerify, auther) + var authClient client.Authenticator + if config.AuthUsername != "" && config.AuthPassword != "" { + authClient = &auth.BasicAuth{ + Username: config.AuthUsername, + Password: config.AuthPassword, + ApiKey: config.ApiKey, + } + } else { + authClient = &auth.ApiKeyAuth{ + ApiKey: config.ApiKey, + } + } + + client, err := client.NewClient(config.URL, config.DisableSSLVerify, authClient) if err != nil { return nil, fmt.Errorf("failed to build client: %w", err) } diff --git a/internal/sabnzbd/collector/collector_test.go b/internal/sabnzbd/collector/collector_test.go index 064a2f0..9eed55a 100644 --- a/internal/sabnzbd/collector/collector_test.go +++ b/internal/sabnzbd/collector/collector_test.go @@ -7,8 +7,8 @@ import ( "strings" "testing" - "github.com/onedr0p/exportarr/internal/sabnzbd/config" "github.com/prometheus/client_golang/prometheus/testutil" + "github.com/shamelin/exportarr/internal/sabnzbd/config" "github.com/stretchr/testify/require" ) diff --git a/internal/sabnzbd/config/config.go b/internal/sabnzbd/config/config.go index 5ea618f..45eb7d2 100644 --- a/internal/sabnzbd/config/config.go +++ b/internal/sabnzbd/config/config.go @@ -2,12 +2,14 @@ package config import ( "github.com/gookit/validate" - base_config "github.com/onedr0p/exportarr/internal/config" + base_config "github.com/shamelin/exportarr/internal/config" ) type SabnzbdConfig struct { URL string `validate:"required|url"` ApiKey string `validate:"required"` + AuthUsername string + AuthPassword string DisableSSLVerify bool } @@ -15,6 +17,8 @@ func LoadSabnzbdConfig(conf base_config.Config) (*SabnzbdConfig, error) { ret := &SabnzbdConfig{ URL: conf.URL, ApiKey: conf.ApiKey, + AuthUsername: conf.AuthUsername, + AuthPassword: conf.AuthPassword, DisableSSLVerify: conf.DisableSSLVerify, } return ret, nil