wroofauth/internal/machines/fesession/db.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
}