restapi_auth_local.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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.Warnf("Could not find local user session: %v", cookieValue)
  20. return "", "", ""
  21. }
  22. return username, "", cookie.Value
  23. }
  24. func forwardResponseHandlerLoginLocalUser(md metadata.MD, w http.ResponseWriter) error {
  25. setUser := getMetadataKeyOrEmpty(md, "set-user")
  26. if setUser != "" {
  27. sid := uuid.NewString()
  28. localUserSessions[sid] = setUser
  29. http.SetCookie(
  30. w,
  31. &http.Cookie{
  32. Name: "olivetin-sid-local",
  33. Value: sid,
  34. MaxAge: 31556952, // 1 year
  35. HttpOnly: true,
  36. Path: "/",
  37. },
  38. )
  39. }
  40. return nil
  41. }