Esempio n. 1
0
        public async Task <IActionResult> RegisterAsync(RegisterViewModel registerViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            User user = new User()
            {
                UserPassword  = service.HashPassword(null, registerViewModel.Password),
                UserEmail     = registerViewModel.Email,
                UserFirstname = registerViewModel.Prenom,
                UserName      = registerViewModel.Nom,
                UserPoleId    = registerViewModel.PoleId,
                UserPhone     = registerViewModel.PhoneNumber,
                UserNumpermis = registerViewModel.NumPermis
            };

            //Vérification de l'email
            IdentityResult result = _authService.VerifUser(user, registerViewModel.Password);

            if (!result.Succeeded)
            {
                ModelState.AddModelError("Error", result.Errors.First().Description);

                return(BadRequest(ModelState));
            }

            // Ajout du rôle à l'utilisateur
            IdentityResult result2 = _authService.AddToRoleUserAsync(user);

            if (!result2.Succeeded)
            {
                ModelState.AddModelError("Error", result2.Errors.First().Description);
                return(BadRequest(ModelState));
            }

            // verification de l'unicité du téléphone
            IdentityResult result3 = _authService.VerifPhoneNumber(user);

            if (!result3.Succeeded)
            {
                ModelState.AddModelError("Error", result3.Errors.First().Description);
                return(BadRequest(ModelState));
            }


            // mise à jour de l'état du compte à en attente
            user.UserState = (sbyte)Enums.UserState.InWaiting;

            try
            {
                _context.User.Add(user);
                _context.SaveChanges();
                _context.Dispose();
            }
            catch (Exception e)
            {
                ModelState.AddModelError("Error", "Une erreur est survenue." + e.Message);
                Console.WriteLine(e);
                return(BadRequest(ModelState));
            }

            // token valide 10 mins
            var tokenGenerate = TokenService.GenerateToken(user);

            string myFiles = System.IO.File.ReadAllText(ConstantsEmail.RegisterPath);

            myFiles = myFiles.Replace("%%LIEN%%", Environment.GetEnvironmentVariable("UrlVerifEmail") + tokenGenerate);
            myFiles = myFiles.Replace("%%USERNAME%%", user.UserFirstname);

            try
            {
                var response =
                    await EmailService.SendEmailAsync("Confirmez votre e-mail - BookYourCar", myFiles, user.UserEmail);
            }
            catch (Exception e)
            {
                ModelState.AddModelError("Error",
                                         "Une erreur s'est produite sur l'envoi de mail." + e.Message);
                return(BadRequest(ModelState));
            }

            return(Ok());
        }