42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package internal
|
|
|
|
import (
|
|
"net/http"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/golang-jwt/jwt/v5"
|
|
)
|
|
|
|
type Claims struct {
|
|
Username string `json:"u"`
|
|
JFToken string `json:"t"`
|
|
jwt.RegisteredClaims
|
|
}
|
|
|
|
var sessionKey = []byte(os.Getenv("PEGASUS_SESSION_KEY"))
|
|
|
|
const CookieName = "pegasus_session"
|
|
|
|
func SetSession(w http.ResponseWriter, username, jfToken string) error {
|
|
now := time.Now()
|
|
tok := jwt.NewWithClaims(jwt.SigningMethodHS256, Claims{
|
|
Username: username,
|
|
JFToken: jfToken,
|
|
RegisteredClaims: jwt.RegisteredClaims{
|
|
ExpiresAt: jwt.NewNumericDate(now.Add(7 * 24 * time.Hour)),
|
|
IssuedAt: jwt.NewNumericDate(now),
|
|
},
|
|
})
|
|
signed, err := tok.SignedString(sessionKey)
|
|
if err != nil { return err }
|
|
http.SetCookie(w, &http.Cookie{
|
|
Name: CookieName, Value: signed, Path: "/", HttpOnly: true, Secure: true, SameSite: http.SameSiteLaxMode,
|
|
})
|
|
return nil
|
|
}
|
|
|
|
func ClearSession(w http.ResponseWriter) {
|
|
http.SetCookie(w, &http.Cookie{Name: CookieName, Value: "", Expires: time.Unix(0,0), Path: "/", HttpOnly: true, Secure: true, SameSite: http.SameSiteLaxMode})
|
|
}
|