add: Login system

This commit is contained in:
$(pass /github/name)
2024-09-03 20:20:24 +02:00
parent f648b53fe1
commit 569c0acaee
8 changed files with 189 additions and 44 deletions

View File

@@ -69,6 +69,47 @@ func (service *UserService) RegisterUser(user *models.User) (int64, string, erro
func (service *UserService) FindUserByEmail(email string) (*models.User, error) {
return service.Repo.FindUserByEmail(email)
func (service *UserService) Update(user *models.User) (int64, string, error) {
if err := validateRegistrationData(user); err != nil {
return http.StatusNotAcceptable, "", err
}
if user.Password == "" && user.RoleID != constants.Roles.Member {
return http.StatusNotAcceptable, "", fmt.Errorf("No password provided")
}
hash, err := utils.HashPassword(user.Password)
if err != nil {
return http.StatusInternalServerError, "", err
}
user.Password = hash
user.Status = constants.UnverifiedStatus
user.CreatedAt = time.Now()
user.UpdatedAt = time.Now()
id, err := service.Repo.CreateUser(user)
if err != nil && strings.Contains(err.Error(), "UNIQUE constraint failed") {
return http.StatusConflict, "", err
} else if err != nil {
return http.StatusInternalServerError, "", err
}
user.ID = id
token, err := utils.GenerateVerificationToken()
if err != nil {
return http.StatusInternalServerError, "", err
}
logger.Info.Printf("TOKEN: %v", token)
_, err = service.Repo.SetVerificationToken(user, &token)
if err != nil {
return http.StatusInternalServerError, "", err
}
return id, token, nil
}
func (service *UserService) GetUsers(where map[string]interface{}) (*[]models.User, error) {