Ejemplo n.º 1
0
        /// <summary>
        /// Actualiza un usuario por id en la base de datos
        /// </summary>
        /// <param name="user">usuario a modificar</param>
        /// <param name="session">sesion del usuario</param>
        /// <returns>UserApp</returns>
        public async Task <UserApp> UserAppUpdate(UserApp user, UserSession session)
        {
            try
            {
                if (await _userAppData.ExistUserByUserName(user))
                {
                    var control = await _controlsLanguageData.ControlFindByKey("UserExistForName", 2, session.LanguageId);

                    throw control.CreateException(user.UserName);
                }

                var oldUser = await _userAppData.GetAsync(user.UserId);

                oldUser.UpdateDate         = DateTime.Now;
                oldUser.UserUpdateId       = session.Id;
                oldUser.UserDocument       = user.UserDocument;
                oldUser.UserDocumentTypeId = user.UserDocumentTypeId;
                oldUser.UserEmail          = user.UserEmail;
                oldUser.UserFirstName      = user.UserFirstName;
                oldUser.UserLastName       = user.UserLastName;

                await _userAppData.UpdateAsync(oldUser);

                return(oldUser);
            }
            catch (Exception)
            {
                throw;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Verifica si el usuario puede autencarse correctamente con usuario y contraseña
        /// </summary>
        /// <param name="login">login de usuario</param>
        /// <returns>modelo de autenticacion</returns>
        public async Task <SessionAuthentication> AsyncAutenticateUser(Login login)
        {
            try
            {
                UserApp    userApp;
                PolicyView policy;
                string     pwDecode = string.Empty;
                bool       isAutenticate = false, valideNumberOfAttemps = false;
                int        stateInactiveUser = 0, stateLockedUser = 0, numberOfAttemps = 0;

                var autenticate = new SessionAuthentication()
                {
                    IsAuthenticate    = false,
                    TypeAutentication = TypeAutentication.Default
                };

                userApp = await _userAppData.UserFindByUser(login.UserName);

                if (null == userApp)
                {
                    autenticate.TypeAutentication = TypeAutentication.NotFound;
                    return(autenticate);
                }

                policy = !userApp.PolicyId.HasValue ?
                         await _policyGlobalAppData.PolicyGetGlobal() :
                         await _policyGlobalAppData.PolicyFindById(userApp.PolicyId.Value);

                pwDecode          = login.Password.Base64Decode();
                isAutenticate     = userApp.UserPw == pwDecode.SHA1();
                stateInactiveUser = await _parametersData.ValueFindByKey <int>("StateInactiveUser");

                stateLockedUser = await _parametersData.ValueFindByKey <int>("StateLockedUser");

                if (0 != stateInactiveUser && userApp.UserStateId == stateInactiveUser)
                {
                    autenticate.TypeAutentication = TypeAutentication.Inactive;
                    return(autenticate);
                }

                if (0 != stateLockedUser && userApp.UserStateId == stateLockedUser)
                {
                    autenticate.TypeAutentication = TypeAutentication.Locked;
                    return(autenticate);
                }

                if (!isAutenticate)
                {
                    numberOfAttemps       = policy.NumberOfAttemps;
                    valideNumberOfAttemps = 0 != numberOfAttemps;

                    userApp.UserNumberOfAttemps++;
                    userApp.UpdateDate = DateTime.Now;

                    if (valideNumberOfAttemps)
                    {
                        if (userApp.UserNumberOfAttemps >= numberOfAttemps)
                        {
                            autenticate.TypeAutentication = TypeAutentication.Locked;
                            userApp.UserStateId           = stateLockedUser;
                        }
                    }

                    await _userAppData.UpdateAsync(userApp);

                    autenticate.TypeAutentication = TypeAutentication.NotFound;
                }
                else
                {
                    if (policy.NumberOfDaysExpirePw > 0)
                    {
                        DateTime dateUserLastPasswordChange = userApp.UserLastPasswordChange.AddDays(policy.NumberOfDaysExpirePw.Value);
                        if (dateUserLastPasswordChange.Date >= DateTime.Now.Date)
                        {
                            autenticate.TypeAutentication = TypeAutentication.ChangePw;
                        }
                    }

                    if (autenticate.TypeAutentication == TypeAutentication.Default)
                    {
                        autenticate.TypeAutentication = TypeAutentication.Ok;
                    }

                    userApp.UserNumberOfAttemps = 0;
                    userApp.UserLastDateEntry   = DateTime.Now;
                    userApp.PolicyId            = !userApp.PolicyId.HasValue ? policy.PolicyId : userApp.PolicyId;

                    var sessionId = Guid.NewGuid();
                    using (var tran = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
                    {
                        await _userAppData.UpdateAsync(userApp);

                        await _sessionData.InsertKeyAsync <Guid>(new CurrentSession()
                        {
                            Active       = true,
                            CreationDate = DateTime.Now,
                            SessionId    = sessionId,
                            UserId       = userApp.UserId
                        });

                        tran.Complete();
                    }



                    autenticate.SessionId      = sessionId;
                    autenticate.UserId         = userApp.UserId;
                    autenticate.PolicyId       = policy.PolicyId;
                    autenticate.IsAuthenticate = true;
                }

                return(autenticate);
            }
            catch (Exception)
            {
                throw;
            }
        }