2026-02-25 11:04:47 +00:00
|
|
|
package auth
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
|
|
|
|
|
"emperror.dev/errors"
|
|
|
|
|
"lmika.dev/lmika/weiro/models"
|
|
|
|
|
"lmika.dev/lmika/weiro/providers/db"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Service struct {
|
|
|
|
|
db *db.Provider
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func New(db *db.Provider) *Service {
|
|
|
|
|
return &Service{
|
|
|
|
|
db: db,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Service) Login(ctx context.Context, username, password string) (models.User, error) {
|
|
|
|
|
user, err := s.db.SelectUserByUsername(ctx, username)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return models.User{}, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if !user.CheckPassword(password) {
|
|
|
|
|
return models.User{}, errors.New("invalid password")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return user, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Service) GetUser(ctx context.Context, userID int64) (models.User, error) {
|
|
|
|
|
return s.db.SelectUserByID(ctx, userID)
|
|
|
|
|
}
|
2026-02-25 11:30:28 +00:00
|
|
|
|
|
|
|
|
func (s *Service) SetPassword(ctx context.Context, username, password string) (models.User, error) {
|
|
|
|
|
user, err := s.db.SelectUserByUsername(ctx, username)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return models.User{}, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
user.SetPassword(password)
|
|
|
|
|
return user, s.db.SaveUser(ctx, &user)
|
|
|
|
|
}
|