public async Task <IHttpActionResult> RequestResetPassword(ResetPasswordBindingModel resetmodel)
        {
            using (var dataContext = HttpContext.Current.GetOwinContext().Get <ApplicationDbContext>())
            {
                using (var trans = dataContext.Database.BeginTransaction(IsolationLevel.ReadCommitted))
                {
                    try
                    {
                        resetmodel.token = RandomLink.getVerifyPathResetPsw() + resetmodel.token;
                        var resetpass = dataContext.ResetPasswords.FirstOrDefault(t => t.email.Equals(resetmodel.email) && t.token.Equals(resetmodel.token));
                        if (resetpass == null)
                        {
                            throw new ApiDataException(16, "No existe una confirmación en el sistema para confirmar"
                                                       , System.Net.HttpStatusCode.NotFound, "Http://");
                        }

                        if (resetpass.state == (Int32)StatesEnum.Confirmed)
                        {
                            throw new ApiBusinessException(0006, "El link ya fue utilizado", System.Net.HttpStatusCode.NotFound, "Http");
                        }

                        if (resetpass.state == (Int32)StatesEnum.Annulled)
                        {
                            throw new ApiDataException(18, "La confirmación fue reemplazada por una nueva o ya expiró"
                                                       , System.Net.HttpStatusCode.NotFound, "Http://");
                        }

                        if (resetpass.expiredate < DateTime.Now)
                        {
                            throw new ApiBusinessException(17, "Esta solicitud ya expiró, mande una nueva solicitud."
                                                           , System.Net.HttpStatusCode.NotFound, "Http://");
                        }

                        var user = await this.AppUserManager.FindByEmailAsync(resetpass.email);

                        if (user == null)
                        {
                            throw new ApiDataException(15, "No existe ese email en nuestro sistema",
                                                       System.Net.HttpStatusCode.NotFound, "Http://");
                        }

                        user.PasswordHash = this.AppUserManager.PasswordHasher.HashPassword(resetmodel.newpassword);
                        this.AppUserManager.UpdateSecurityStamp(user.Id);
                        resetpass.state = (Int32)StatesEnum.Confirmed;
                        dataContext.SaveChanges();
                        trans.Commit();
                        return(Ok());
                    }
                    catch (Exception ex)
                    {
                        trans.Rollback();
                        throw HandlerExceptions.GetInstance().RunCustomExceptions(ex);
                    }
                }
            }
        }
Beispiel #2
0
 internal TimeLink(RandomLink random)
 {
     this._random = random;
 }
Beispiel #3
0
 internal NamesLink(RandomLink random)
 {
     this._random = random;
 }
Beispiel #4
0
 internal TextLink(RandomLink random)
 {
     this._random = random;
 }
Beispiel #5
0
 internal PhoneNumbersLink(RandomLink random)
 {
     this._random = random;
     this._generate = this._random.Numbers.Integers(0, 10);
 }
Beispiel #6
0
 internal InternetLink(RandomLink random)
 {
     this._random = random;
 }