mirror of
https://github.com/teamhanko/hanko.git
synced 2025-10-27 14:17:56 +08:00
This pull request introduces the new Flowpilot system along with several new features and various improvements. The key enhancements include configurable authorization, registration, and profile flows, as well as the ability to enable and disable user identifiers (e.g., email addresses and usernames) and login methods. --------- Co-authored-by: Frederic Jahn <frederic.jahn@hanko.io> Co-authored-by: Lennart Fleischmann <lennart.fleischmann@hanko.io> Co-authored-by: lfleischmann <67686424+lfleischmann@users.noreply.github.com> Co-authored-by: merlindru <hello@merlindru.com>
73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
package persistence
|
|
|
|
import (
|
|
"database/sql"
|
|
"errors"
|
|
"fmt"
|
|
"github.com/gobuffalo/pop/v6"
|
|
"github.com/teamhanko/hanko/backend/persistence/models"
|
|
)
|
|
|
|
type UsernamePersister interface {
|
|
Create(username models.Username) error
|
|
GetByName(name string) (*models.Username, error)
|
|
Update(username *models.Username) error
|
|
Delete(username *models.Username) error
|
|
}
|
|
|
|
type usernamePersister struct {
|
|
db *pop.Connection
|
|
}
|
|
|
|
func NewUsernamePersister(db *pop.Connection) UsernamePersister {
|
|
return &usernamePersister{db: db}
|
|
}
|
|
|
|
func (p *usernamePersister) Create(username models.Username) error {
|
|
vErr, err := p.db.ValidateAndCreate(&username)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to store username credential: %w", err)
|
|
}
|
|
|
|
if vErr != nil && vErr.HasAny() {
|
|
return fmt.Errorf("username object validation failed: %w", vErr)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (p *usernamePersister) GetByName(username string) (*models.Username, error) {
|
|
pw := models.Username{}
|
|
query := p.db.Where("username = (?)", username)
|
|
err := query.First(&pw)
|
|
if err != nil && errors.Is(err, sql.ErrNoRows) {
|
|
return nil, nil
|
|
}
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get username: %w", err)
|
|
}
|
|
return &pw, nil
|
|
}
|
|
|
|
func (p *usernamePersister) Update(username *models.Username) error {
|
|
vErr, err := p.db.ValidateAndUpdate(username)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to update username: %w", err)
|
|
}
|
|
|
|
if vErr != nil && vErr.HasAny() {
|
|
return fmt.Errorf("username object validation failed: %w", vErr)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (p *usernamePersister) Delete(username *models.Username) error {
|
|
err := p.db.Destroy(username)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to delete user: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|