restapi_auth_local.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package httpservers
  2. import (
  3. "google.golang.org/grpc/metadata"
  4. "net/http"
  5. "github.com/google/uuid"
  6. log "github.com/sirupsen/logrus"
  7. )
  8. var (
  9. localUserSessions = make(map[string]string) // sid -> username, used for local user sessions
  10. )
  11. func parseLocalUserCookie(req *http.Request) (string, string, string) {
  12. cookie, err := req.Cookie("olivetin-sid-local")
  13. if err != nil {
  14. return "", "", ""
  15. }
  16. cookieValue := cookie.Value
  17. username, ok := localUserSessions[cookieValue]
  18. if !ok {
  19. log.WithFields(log.Fields{
  20. "sid": cookieValue,
  21. "provider": "local",
  22. }).Warnf("Stale session")
  23. return "", "", ""
  24. }
  25. return username, "", cookie.Value
  26. }
  27. func forwardResponseHandlerLoginLocalUser(md metadata.MD, w http.ResponseWriter) error {
  28. setUser := getMetadataKeyOrEmpty(md, "set-user")
  29. if setUser != "" {
  30. sid := uuid.NewString()
  31. localUserSessions[sid] = setUser
  32. http.SetCookie(
  33. w,
  34. &http.Cookie{
  35. Name: "olivetin-sid-local",
  36. Value: sid,
  37. MaxAge: 31556952, // 1 year
  38. HttpOnly: true,
  39. Path: "/",
  40. },
  41. )
  42. }
  43. return nil
  44. }