50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package auth
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
types "github.com/OliveTin/OliveTin/internal/auth/authpublic"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func getLocalSessionCookie(r *http.Request) (string, bool) {
|
|
c, err := r.Cookie("olivetin-sid-local")
|
|
if err != nil {
|
|
return "", false
|
|
}
|
|
if c == nil {
|
|
return "", false
|
|
}
|
|
if c.Value == "" {
|
|
return "", false
|
|
}
|
|
return c.Value, true
|
|
}
|
|
|
|
func checkUserFromLocalSession(context *types.AuthCheckingContext) *types.AuthenticatedUser {
|
|
u := &types.AuthenticatedUser{}
|
|
|
|
sid, ok := getLocalSessionCookie(context.Request)
|
|
if !ok {
|
|
return u
|
|
}
|
|
|
|
sess := GetUserSession("local", sid)
|
|
if sess == nil {
|
|
log.WithFields(log.Fields{"sid": sid, "provider": "local"}).Warn("UserFromContext: stale local session")
|
|
return u
|
|
}
|
|
|
|
cfgUser := context.Config.FindUserByUsername(sess.Username)
|
|
if cfgUser == nil {
|
|
log.WithFields(log.Fields{"username": sess.Username}).Warn("UserFromContext: local session user not in config")
|
|
return u
|
|
}
|
|
|
|
u.Username = cfgUser.Username
|
|
u.UsergroupLine = cfgUser.Usergroup
|
|
u.Provider = "local"
|
|
u.SID = sid
|
|
return u
|
|
}
|