2025-09-16 00:05:16 -05:00
|
|
|
// backend/internal/auth.go
|
2025-09-08 00:48:47 -05:00
|
|
|
package internal
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"errors"
|
|
|
|
|
"net/http"
|
|
|
|
|
|
|
|
|
|
"github.com/golang-jwt/jwt/v5"
|
|
|
|
|
)
|
|
|
|
|
|
2026-04-11 00:02:59 -03:00
|
|
|
var parseJWT = jwt.ParseWithClaims
|
|
|
|
|
|
|
|
|
|
// CurrentUser parses the Pegasus session cookie and validates its JWT claims.
|
2025-09-08 00:48:47 -05:00
|
|
|
func CurrentUser(r *http.Request) (Claims, error) {
|
|
|
|
|
c, err := r.Cookie(CookieName)
|
2026-04-10 03:25:23 -03:00
|
|
|
if err != nil {
|
|
|
|
|
return Claims{}, err
|
|
|
|
|
}
|
2026-04-11 00:02:59 -03:00
|
|
|
tok, err := parseJWT(c.Value, &Claims{}, func(_ *jwt.Token) (any, error) { return sessionKey, nil })
|
2026-04-10 03:25:23 -03:00
|
|
|
if err != nil {
|
|
|
|
|
return Claims{}, err
|
|
|
|
|
}
|
2025-09-08 00:48:47 -05:00
|
|
|
if cl, ok := tok.Claims.(*Claims); ok && tok.Valid {
|
|
|
|
|
return *cl, nil
|
|
|
|
|
}
|
|
|
|
|
return Claims{}, errors.New("invalid session")
|
|
|
|
|
}
|