Files
hanko/backend/persistence/saml_state_persister.go
2025-09-25 19:15:20 +02:00

55 lines
1.2 KiB
Go

package persistence
import (
"fmt"
"github.com/gobuffalo/pop/v6"
"github.com/teamhanko/hanko/backend/v2/persistence/models"
)
type SamlStatePersister interface {
Create(state models.SamlState) error
GetByNonce(nonce string) (*models.SamlState, error)
Delete(state models.SamlState) error
}
type samlStatePersister struct {
db *pop.Connection
}
func NewSamlStatePersister(db *pop.Connection) SamlStatePersister {
return &samlStatePersister{db: db}
}
func (s samlStatePersister) Create(state models.SamlState) error {
validationError, err := s.db.ValidateAndCreate(&state)
if err != nil {
return err
}
if validationError != nil && validationError.HasAny() {
return fmt.Errorf("token object validation failed: %w", validationError)
}
return nil
}
func (s samlStatePersister) GetByNonce(nonce string) (*models.SamlState, error) {
state := models.SamlState{}
err := s.db.Where("nonce = ?", nonce).First(&state)
if err != nil {
return nil, fmt.Errorf("failed to get state by nonce: %w", err)
}
return &state, nil
}
func (s samlStatePersister) Delete(state models.SamlState) error {
err := s.db.Destroy(&state)
if err != nil {
return fmt.Errorf("failed to delete state: %w", err)
}
return nil
}