fix: WIP on login regression
This commit is contained in:
parent
0dd9e9b2b7
commit
a7e7bf869e
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"connectrpc.com/connect"
|
"connectrpc.com/connect"
|
||||||
|
"github.com/OliveTin/OliveTin/internal/auth"
|
||||||
config "github.com/OliveTin/OliveTin/internal/config"
|
config "github.com/OliveTin/OliveTin/internal/config"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
|
|
@ -199,11 +200,43 @@ func UserFromContext[T any](ctx context.Context, req *connect.Request[T], cfg *c
|
||||||
|
|
||||||
if req != nil {
|
if req != nil {
|
||||||
ret = &AuthenticatedUser{}
|
ret = &AuthenticatedUser{}
|
||||||
ret.Username = getHeaderKeyOrEmpty(req.Header(), "username")
|
// Only trust headers if explicitly configured
|
||||||
ret.UsergroupLine = getHeaderKeyOrEmpty(req.Header(), "usergroup")
|
if cfg.AuthHttpHeaderUsername != "" {
|
||||||
ret.Provider = getHeaderKeyOrEmpty(req.Header(), "provider")
|
ret.Username = getHeaderKeyOrEmpty(req.Header(), cfg.AuthHttpHeaderUsername)
|
||||||
|
}
|
||||||
|
|
||||||
buildUserAcls(cfg, ret)
|
if cfg.AuthHttpHeaderUserGroup != "" {
|
||||||
|
ret.UsergroupLine = getHeaderKeyOrEmpty(req.Header(), cfg.AuthHttpHeaderUserGroup)
|
||||||
|
}
|
||||||
|
// Optional provider header; otherwise infer below
|
||||||
|
prov := getHeaderKeyOrEmpty(req.Header(), "provider")
|
||||||
|
if prov != "" {
|
||||||
|
ret.Provider = prov
|
||||||
|
}
|
||||||
|
|
||||||
|
// If no username from headers, fall back to local session cookie
|
||||||
|
if ret.Username == "" {
|
||||||
|
// Build a minimal http.Request to parse cookies from headers
|
||||||
|
dummy := &http.Request{Header: req.Header()}
|
||||||
|
if c, err := dummy.Cookie("olivetin-sid-local"); err == nil && c != nil && c.Value != "" {
|
||||||
|
if sess := auth.GetUserSession("local", c.Value); sess != nil {
|
||||||
|
if u := cfg.FindUserByUsername(sess.Username); u != nil {
|
||||||
|
ret.Username = u.Username
|
||||||
|
ret.UsergroupLine = u.Usergroup
|
||||||
|
ret.Provider = "local"
|
||||||
|
ret.SID = c.Value
|
||||||
|
} else {
|
||||||
|
log.WithFields(log.Fields{"username": sess.Username}).Warn("UserFromContext: local session user not in config")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.WithFields(log.Fields{"sid": c.Value, "provider": "local"}).Warn("UserFromContext: stale local session")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ret.Username != "" {
|
||||||
|
buildUserAcls(cfg, ret)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ret == nil || ret.Username == "" {
|
if ret == nil || ret.Username == "" {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue