restapi_auth_local.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package httpservers
  2. import (
  3. "google.golang.org/grpc/metadata"
  4. "github.com/OliveTin/OliveTin/internal/config"
  5. "net/http"
  6. "github.com/google/uuid"
  7. )
  8. func parseLocalUserCookie(cfg *config.Config, req *http.Request) (string, string, string) {
  9. cookie, err := req.Cookie("olivetin-sid-local")
  10. if err != nil {
  11. return "", "", ""
  12. }
  13. cookieValue := cookie.Value
  14. user := getUserFromSession(cfg, "local", cookieValue)
  15. if user == nil {
  16. return "", "", ""
  17. }
  18. return user.Username, user.Usergroup, cookie.Value
  19. }
  20. func forwardResponseHandlerLoginLocalUser(cfg *config.Config, md metadata.MD, w http.ResponseWriter) error {
  21. setUsername := getMetadataKeyOrEmpty(md, "set-username")
  22. if setUsername != "" {
  23. user := cfg.FindUserByUsername(setUsername)
  24. if user == nil {
  25. return nil
  26. }
  27. sid := uuid.NewString()
  28. registerUserSession(cfg, "local", sid, user.Username)
  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. }