48 lines
943 B
Go
48 lines
943 B
Go
package authmiddleware
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
|
|
"git.sapphic.engineer/roleypoly/v4/types"
|
|
"github.com/goccy/go-json"
|
|
"github.com/gofiber/fiber/v3"
|
|
"github.com/gofiber/fiber/v3/middleware/session"
|
|
)
|
|
|
|
var (
|
|
SessionKey uint8
|
|
DefaultSession *Session = &Session{Permissions: PermAnonymous}
|
|
)
|
|
|
|
type Session struct {
|
|
Permissions Permission
|
|
User *types.DiscordUser
|
|
AccessToken string
|
|
LastRefresh time.Time
|
|
}
|
|
|
|
func (s *Session) AsJSON() []byte {
|
|
out, err := json.Marshal(s)
|
|
if err != nil {
|
|
log.Panicln("failed to marshal session json: ", err)
|
|
}
|
|
|
|
return out
|
|
}
|
|
|
|
func SessionFromJSON(input []byte) (*Session, error) {
|
|
var s Session
|
|
err := json.Unmarshal(input, &s)
|
|
return &s, err
|
|
}
|
|
|
|
func SessionFrom(c fiber.Ctx) (s *Session) {
|
|
sess := session.FromContext(c)
|
|
sessionJSON := sess.Get(SessionKey).([]byte)
|
|
s, err := SessionFromJSON(sessionJSON)
|
|
if err != nil {
|
|
log.Panicln("session failed to parse", err)
|
|
}
|
|
return s
|
|
}
|