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 }