34 lines
849 B
Go
34 lines
849 B
Go
package useCases
|
|
|
|
import (
|
|
"RenewCMS/internal/domain/hash"
|
|
"RenewCMS/internal/domain/user"
|
|
"time"
|
|
)
|
|
|
|
type VerifyUserUseCase struct {
|
|
userRepository user.Repository
|
|
hasher hash.Hasher
|
|
}
|
|
|
|
func NewVerifyUserUseCase(userRepository user.Repository, hasher hash.Hasher) *VerifyUserUseCase {
|
|
return &VerifyUserUseCase{userRepository, hasher}
|
|
}
|
|
|
|
func (v *VerifyUserUseCase) Verify(userId uint32, code string) (user.User, error) {
|
|
dbUser, err := v.userRepository.Get(userId)
|
|
if err != nil {
|
|
return user.User{}, err
|
|
}
|
|
|
|
if dbUser.VerificationCode == "" || v.hasher.Compare(dbUser.VerificationCode, code) != nil {
|
|
return user.User{}, user.ErrInvalidVerificationCode
|
|
}
|
|
|
|
if time.Now().After(dbUser.VerificationExpiration) {
|
|
return user.User{}, user.ErrVerificationCodeExpired
|
|
}
|
|
|
|
return v.userRepository.ClearVerificationCode(userId)
|
|
}
|