70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
package fesession
|
|
|
|
import (
|
|
"context"
|
|
"encoding/base64"
|
|
|
|
"git.1in9.net/raider/wroofauth/internal/database"
|
|
"git.1in9.net/raider/wroofauth/internal/logger"
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
)
|
|
|
|
const (
|
|
PREFIX = "fe_session_"
|
|
)
|
|
|
|
func (s *FeSession) Persist(ctx context.Context) error {
|
|
return Persist(ctx, s)
|
|
}
|
|
|
|
func Persist(ctx context.Context, session *FeSession) error {
|
|
if session == nil {
|
|
logger.Logger.Panic("trying to persist null-pointer")
|
|
}
|
|
|
|
err := session.Validate(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
marshaled, err := bson.Marshal(session)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
encoded := base64.StdEncoding.EncodeToString(marshaled)
|
|
|
|
status := database.Redis.Set(ctx, PREFIX+session.ID.Hex(), encoded, 0)
|
|
if status.Err() != nil {
|
|
return status.Err()
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func GetById(ctx context.Context, id primitive.ObjectID) (*FeSession, error) {
|
|
encoded, err := database.Redis.Get(ctx, PREFIX+id.Hex()).Result()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
marshaled, err := base64.StdEncoding.DecodeString(encoded)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var session FeSession
|
|
|
|
err = bson.Unmarshal(marshaled, &session)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = session.Hydrate(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &session, nil
|
|
}
|