correctly distinguish user/pass auth errors from other connectivity errors again

This commit is contained in:
Drew Weymouth
2023-11-14 17:36:07 -08:00
parent d1380d6a41
commit b7f54054d8
6 changed files with 34 additions and 10 deletions
@@ -23,6 +23,17 @@ type JellyfinServer struct {
jellyfin.Client jellyfin.Client
} }
func (j *JellyfinServer) Login(user, pass string) mediaprovider.LoginResponse {
if _, err := j.Ping(); err != nil {
return mediaprovider.LoginResponse{Error: err}
}
err := j.Client.Login(user, pass)
return mediaprovider.LoginResponse{
Error: err,
IsAuthError: err != nil,
}
}
func (j *JellyfinServer) MediaProvider() mediaprovider.MediaProvider { func (j *JellyfinServer) MediaProvider() mediaprovider.MediaProvider {
return newJellyfinMediaProvider(&j.Client) return newJellyfinMediaProvider(&j.Client)
} }
+6 -1
View File
@@ -61,8 +61,13 @@ type Favorites struct {
Tracks []*Track Tracks []*Track
} }
type LoginResponse struct {
Error error
IsAuthError bool
}
type Server interface { type Server interface {
Login(username, password string) error Login(username, password string) LoginResponse
MediaProvider() MediaProvider MediaProvider() MediaProvider
} }
@@ -9,9 +9,13 @@ type SubsonicServer struct {
subsonicCli.Client subsonicCli.Client
} }
func (s *SubsonicServer) Login(username, password string) error { func (s *SubsonicServer) Login(username, password string) mediaprovider.LoginResponse {
s.User = username s.User = username
return s.Client.Authenticate(password) err := s.Client.Authenticate(password)
return mediaprovider.LoginResponse{
Error: err,
IsAuthError: err == subsonicCli.ErrAuthenticationFailure,
}
} }
func (s *SubsonicServer) MediaProvider() mediaprovider.MediaProvider { func (s *SubsonicServer) MediaProvider() mediaprovider.MediaProvider {
+8 -4
View File
@@ -199,12 +199,16 @@ func (s *ServerManager) connect(connection ServerConnection, password string) (m
}, },
} }
} }
var authError error
pingChan := make(chan bool, 2) // false for primary hostname, true for alternate pingChan := make(chan bool, 2) // false for primary hostname, true for alternate
pingFunc := func(delay time.Duration, cli mediaprovider.Server, val bool) { pingFunc := func(delay time.Duration, cli mediaprovider.Server, val bool) {
<-time.After(delay) <-time.After(delay)
if err := cli.Login(connection.Username, password); err == nil { resp := cli.Login(connection.Username, password)
pingChan <- val if resp.Error != nil && !resp.IsAuthError {
return
} }
authError = resp.Error
pingChan <- val // reached the server
} }
go pingFunc(0, cli, false) go pingFunc(0, cli, false)
if connection.AltHostname != "" { if connection.AltHostname != "" {
@@ -218,8 +222,8 @@ func (s *ServerManager) connect(connection ServerConnection, password string) (m
return nil, ErrUnreachable return nil, ErrUnreachable
case altPing := <-pingChan: case altPing := <-pingChan:
if altPing { if altPing {
return altCli, nil return altCli, authError
} }
return cli, nil return cli, authError
} }
} }
+1 -1
View File
@@ -8,7 +8,7 @@ require (
github.com/deluan/sanitize v0.0.0-20230310221930-6e18967d9fc1 github.com/deluan/sanitize v0.0.0-20230310221930-6e18967d9fc1
github.com/dweymouth/go-jellyfin v0.0.0-20231114014232-1e011bb03a9f github.com/dweymouth/go-jellyfin v0.0.0-20231114014232-1e011bb03a9f
github.com/dweymouth/go-mpv v0.0.0-20230406003141-7f1858e503ee github.com/dweymouth/go-mpv v0.0.0-20230406003141-7f1858e503ee
github.com/dweymouth/go-subsonic v0.0.0-20231105161622-54b5aec28363 github.com/dweymouth/go-subsonic v0.0.0-20231115012731-a3d1f90274c1
github.com/fsnotify/fsnotify v1.6.0 github.com/fsnotify/fsnotify v1.6.0
github.com/godbus/dbus/v5 v5.1.0 github.com/godbus/dbus/v5 v5.1.0
github.com/google/uuid v1.3.0 github.com/google/uuid v1.3.0
+2 -2
View File
@@ -75,8 +75,8 @@ github.com/dweymouth/go-jellyfin v0.0.0-20231114014232-1e011bb03a9f h1:sJY4MjrNa
github.com/dweymouth/go-jellyfin v0.0.0-20231114014232-1e011bb03a9f/go.mod h1:BMwS4vdjEYf1gmjPGSKCzWP/I6YlI6fkefJ9nsjBjaU= github.com/dweymouth/go-jellyfin v0.0.0-20231114014232-1e011bb03a9f/go.mod h1:BMwS4vdjEYf1gmjPGSKCzWP/I6YlI6fkefJ9nsjBjaU=
github.com/dweymouth/go-mpv v0.0.0-20230406003141-7f1858e503ee h1:ZGyJ6wp7CAfT31BugypcF/TPKEy2RrGR9JFq1JOjOpY= github.com/dweymouth/go-mpv v0.0.0-20230406003141-7f1858e503ee h1:ZGyJ6wp7CAfT31BugypcF/TPKEy2RrGR9JFq1JOjOpY=
github.com/dweymouth/go-mpv v0.0.0-20230406003141-7f1858e503ee/go.mod h1:Ov0ieN90M7i+0k3OxhA/g1dozGs+UcPHDsMKqPgRDk0= github.com/dweymouth/go-mpv v0.0.0-20230406003141-7f1858e503ee/go.mod h1:Ov0ieN90M7i+0k3OxhA/g1dozGs+UcPHDsMKqPgRDk0=
github.com/dweymouth/go-subsonic v0.0.0-20231105161622-54b5aec28363 h1:MIH7MAWWPPVRKEKxz+RJubn+ycyQPimHn1Zvoxs1KRI= github.com/dweymouth/go-subsonic v0.0.0-20231115012731-a3d1f90274c1 h1:1I5/hlV4lQ0B0NdBZvwWSqL8hvvKhRRbJK6fGsxFSLs=
github.com/dweymouth/go-subsonic v0.0.0-20231105161622-54b5aec28363/go.mod h1:dVriurACA/XTnE7BgSOTapYOtxMq7jTOVExrIbwi84c= github.com/dweymouth/go-subsonic v0.0.0-20231115012731-a3d1f90274c1/go.mod h1:OWtcumdQsan8uM6wmx6PqKhldaCthH10CQ+vb+94kzo=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=