fix(plugins): don't log "no proxy IP found" when using Subsonic API in plugins with reverse proxy auth (#4388)
* fix(auth): Do not try reverse proxy auth if internal auth succeeds * cmp.Or will still require function results to be evaluated... * move to a function
This commit is contained in:
@@ -47,11 +47,23 @@ func postFormToQueryParams(next http.Handler) http.Handler {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func fromInternalOrProxyAuth(r *http.Request) (string, bool) {
|
||||||
|
username := server.InternalAuth(r)
|
||||||
|
|
||||||
|
// If the username comes from internal auth, do not also do reverse proxy auth, as
|
||||||
|
// the request will have no reverse proxy IP
|
||||||
|
if username != "" {
|
||||||
|
return username, true
|
||||||
|
}
|
||||||
|
|
||||||
|
return server.UsernameFromReverseProxyHeader(r), false
|
||||||
|
}
|
||||||
|
|
||||||
func checkRequiredParameters(next http.Handler) http.Handler {
|
func checkRequiredParameters(next http.Handler) http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
var requiredParameters []string
|
var requiredParameters []string
|
||||||
|
|
||||||
username := cmp.Or(server.InternalAuth(r), server.UsernameFromReverseProxyHeader(r))
|
username, _ := fromInternalOrProxyAuth(r)
|
||||||
if username != "" {
|
if username != "" {
|
||||||
requiredParameters = []string{"v", "c"}
|
requiredParameters = []string{"v", "c"}
|
||||||
} else {
|
} else {
|
||||||
@@ -91,10 +103,9 @@ func authenticate(ds model.DataStore) func(next http.Handler) http.Handler {
|
|||||||
var usr *model.User
|
var usr *model.User
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
internalAuth := server.InternalAuth(r)
|
username, isInternalAuth := fromInternalOrProxyAuth(r)
|
||||||
proxyAuth := server.UsernameFromReverseProxyHeader(r)
|
if username != "" {
|
||||||
if username := cmp.Or(internalAuth, proxyAuth); username != "" {
|
authType := If(isInternalAuth, "internal", "reverse-proxy")
|
||||||
authType := If(internalAuth != "", "internal", "reverse-proxy")
|
|
||||||
usr, err = ds.User(ctx).FindByUsername(username)
|
usr, err = ds.User(ctx).FindByUsername(username)
|
||||||
if errors.Is(err, context.Canceled) {
|
if errors.Is(err, context.Canceled) {
|
||||||
log.Debug(ctx, "API: Request canceled when authenticating", "auth", authType, "username", username, "remoteAddr", r.RemoteAddr, err)
|
log.Debug(ctx, "API: Request canceled when authenticating", "auth", authType, "username", username, "remoteAddr", r.RemoteAddr, err)
|
||||||
|
|||||||
Reference in New Issue
Block a user