package store import ( "context" "atlas9.dev/c/core" "atlas9.dev/c/core/dbi" "atlas9.dev/c/core/iam" "atlas9.dev/c/demo/lib" ) type SqlitePasswordHashStore struct { db dbi.DBI guard lib.Guard } var _ iam.PasswordStore = (*SqlitePasswordHashStore)(nil) func NewSqlitePasswordHashStore(db dbi.DBI, guard lib.Guard) *SqlitePasswordHashStore { return &SqlitePasswordHashStore{db: db, guard: guard} } func (s *SqlitePasswordHashStore) SetHash(ctx context.Context, userID core.ID, hash iam.PasswordHash) error { if err := s.guard.System(ctx, iam.CapPasswordsSet); err != nil { return err } _, err := s.db.Exec(ctx, ` INSERT INTO password_hashes (user_id, hash) VALUES ($1, $2) ON CONFLICT (user_id) DO UPDATE SET hash = EXCLUDED.hash `, userID, hash) return err } func (s *SqlitePasswordHashStore) GetHash(ctx context.Context, userID core.ID) (iam.PasswordHash, error) { if err := s.guard.System(ctx, iam.CapPasswordsGet); err != nil { return iam.PasswordHash{}, err } var hash iam.PasswordHash err := dbi.Get(ctx, s.db, &hash, `SELECT hash FROM password_hashes WHERE user_id = $1`, userID) return hash, err }