local.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package auth
  2. import (
  3. "net/http"
  4. types "github.com/OliveTin/OliveTin/internal/auth/authpublic"
  5. log "github.com/sirupsen/logrus"
  6. )
  7. func getLocalSessionCookie(r *http.Request) (string, bool) {
  8. c, err := r.Cookie("olivetin-sid-local")
  9. if err != nil {
  10. return "", false
  11. }
  12. if c == nil {
  13. return "", false
  14. }
  15. if c.Value == "" {
  16. return "", false
  17. }
  18. return c.Value, true
  19. }
  20. func checkUserFromLocalSession(context *types.AuthCheckingContext) *types.AuthenticatedUser {
  21. u := &types.AuthenticatedUser{}
  22. sid, ok := getLocalSessionCookie(context.Request)
  23. if !ok {
  24. return u
  25. }
  26. sess := GetUserSession("local", sid)
  27. if sess == nil {
  28. log.WithFields(log.Fields{"sid": sid, "provider": "local"}).Warn("UserFromContext: stale local session")
  29. return u
  30. }
  31. cfgUser := context.Config.FindUserByUsername(sess.Username)
  32. if cfgUser == nil {
  33. log.WithFields(log.Fields{"username": sess.Username}).Warn("UserFromContext: local session user not in config")
  34. return u
  35. }
  36. u.Username = cfgUser.Username
  37. u.UsergroupLine = cfgUser.Usergroup
  38. u.Provider = "local"
  39. u.SID = sid
  40. return u
  41. }