예제 #1
0
        public Response <object> ChangePasswordFromProfile(string password)
        {
            var userId = int.Parse(NetworkHelper._contextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value);
            var user   = _repository.GetUserById(userId);

            var userBefore = CloneObject.Clone(user);

            //if (user.IdUserAuthorizationType != (int)UserAuthorizationTypeIds.SystemAccount)
            //{
            //    _saveLog.LogInformation("User with Active Directory cannot change password from this system!");
            //    return new Response<object>(PublicResultStatusCodes.NotAllowedOperation);
            //}

            var hashHelper = new HashHelper(password);

            user.Password                 = hashHelper.Hash;
            user.SaltedPassword           = hashHelper.Salt;
            user.LatestPasswordChangeDate = DateTime.Now;

            var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user);

            _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2);

            return(new Response <object>(PublicResultStatusCodes.Done));
        }
예제 #2
0
        public Response <object> ChangePasswordForFirstTime(UserChangePasswordForFirstTimeModel _)
        {
            var user       = _repository.GetUserByUsername(_contextAccessor.HttpContext.User.Identity.Name);
            var userBefore = CloneObject.Clone(user);

            //if (user.IdUserAuthorizationType != (int)UserAuthorizationTypeIds.SystemAccount)
            //{
            //    _saveLog.LogInformation("User with Active Directory cannot change password from this system!");
            //    return new Response<object>(PublicResultStatusCodes.NotAllowedOperation);
            //}

            var checkPassword = PasswordHelper.ValidatePassword(_.NewPassword);

            if (checkPassword)
            {
                var hashHelper = new HashHelper(_.NewPassword);
                user.Password                 = hashHelper.Hash;
                user.SaltedPassword           = hashHelper.Salt;
                user.LatestPasswordChangeDate = DateTime.Now;
                user.ChangePasswordNeeded     = false;

                var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user);

                _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2);

                return(new Response <object>(PublicResultStatusCodes.Done));
            }
            _saveLog.LogInformation("Password must have at least six characters, one upperCase and one number!");
            return(new Response <object>(PublicResultStatusCodes.ModelIsNotValid));
        }
예제 #3
0
        public Response <object> ChangePassword(UserChangePasswordModel _)
        {
            var user       = _repository.GetUserByUsername(_contextAccessor.HttpContext.User.Identity.Name);
            var userBefore = CloneObject.Clone(user);

            //if (user.IdUserAuthorizationType != (int)UserAuthorizationTypeIds.SystemAccount)
            //{
            //    _saveLog.LogInformation("User with Active Directory cannot change password from this system!");
            //    return new Response<object>(PublicResultStatusCodes.NotAllowedOperation);
            //}

            var checkPassword = HashHelper.Verify(user.SaltedPassword, user.Password, _.OldPassword);

            if (checkPassword)
            {
                var hashHelper = new HashHelper(_.NewPassword);
                user.Password                 = hashHelper.Hash;
                user.SaltedPassword           = hashHelper.Salt;
                user.LatestPasswordChangeDate = DateTime.Now;

                var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user);

                _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2);

                return(new Response <object>(PublicResultStatusCodes.Done));
            }
            _saveLog.LogInformation("Password do not match with data in Database!");
            return(new Response <object>(PublicResultStatusCodes.WrongOldPassword));
        }
예제 #4
0
        public Response <object> ChangePasswordFromResetPasswordLink(ResetPasswordModel _)
        {
            var user       = _repository.GetUserById(_.Id);
            var userBefore = CloneObject.Clone(user);

            //EntryUpdateUserHelper.FillUpdateData(ref user);

            if (user != null)
            {
                var hash = HashHelper.GetSha256FromString(user.Account + " " + user.ID + "$aa$" + user.EntryDate);
                if (!hash.Equals(_.Hash))
                {
                    return(new Response <object>(PublicResultStatusCodes.ModelIsNotValid));
                }

                var hashHelper = new HashHelper(_.Password);
                user.Password                 = hashHelper.Hash;
                user.SaltedPassword           = hashHelper.Salt;
                user.LatestPasswordChangeDate = DateTime.Now;
                user.ResetPasswordToken       = Guid.NewGuid();

                var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user);

                _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2);

                return(new Response <object>(PublicResultStatusCodes.Done));
            }

            return(new Response <object>(PublicResultStatusCodes.ModelIsNotValid));
        }
예제 #5
0
        public Response <UserModel> Update(int id, EditUserModel _)
        {
            var entryUser = _repository.GetUserByUsername(_contextAccessor.HttpContext.User?.Identity?.Name);

            var user = _repository.GetUserById(id);

            if (user == null)
            {
                _saveLog.LogInformation("Failed to Update User because user with Id=\"" + id + "\" does not exist");
                return(new Response <UserModel>(PublicResultStatusCodes.ModelIsNotValid));
            }

            var beforeUser = CloneObject.Clone(user);

            if (!string.IsNullOrWhiteSpace(_.Password))
            {
                var hashHelper = new HashHelper(_.Password);
                user.Password                 = hashHelper.Hash;
                user.SaltedPassword           = hashHelper.Salt;
                user.LatestPasswordChangeDate = DateTime.Now;
            }

            user.Account                 = _.Account;
            user.First                   = _.First;
            user.Last                    = _.Last;
            user.IsActive                = _.IsActive;
            user.ExpireDate              = _.ExprieDate;
            user.IDRole                  = _.IdRole;
            user.EmailAddress            = _.EmailAddress;
            user.IDUserAuthorizationType = _.IdUserAuthorizationType;
            //user.WithUserAuthorization = _.WithUserAuthorization;
            // user.SerialNumber = _.SerialNumber;
            //user.IdEmployee = _.IdEmployee;
            EntryUpdateUserHelper.FillUpdateData(ref user);


            var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(beforeUser, user);

            _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2);

            return(new Response <UserModel>(PublicResultStatusCodes.Done));
        }
예제 #6
0
        public Response <object> ChangePassword(AdminChangePasswordModel _)
        {
            var user       = _repository.GetUserById(_.IdUser);
            var userBefore = CloneObject.Clone(user);

            //if (user.IdUserAuthorizationType != (int)UserAuthorizationTypeIds.SystemAccount)
            //{
            //    _saveLog.LogInformation("User with Active Directory cannot change password from this system!");
            //    return new Response<object>(PublicResultStatusCodes.NotAllowedOperation);
            //}
            var hashHelper = new HashHelper(_.NewPassword);

            user.Password                 = hashHelper.Hash;
            user.SaltedPassword           = hashHelper.Salt;
            user.LatestPasswordChangeDate = DateTime.Now;

            var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user);

            _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2);

            return(new Response <object>(PublicResultStatusCodes.Done));
        }
예제 #7
0
        public async Task <Response <UserModel> > Create(CreateUserModel _)
        {
            try
            {
                var newUser = _repository.GetUserByUsername(_.Account);

                if (newUser != null)
                {
                    _saveLog.LogInformation("Account already exist! Account :" + _.Account);
                    return(new Response <UserModel>(PublicResultStatusCodes.AccountAlreadyExists));
                }

                //if (_.IdUserAuthorizationType == (int)UserAuthorizationTypeIds.SystemAccount && !PasswordHelper.ValidatePassword(_.Password))
                //{
                //    _saveLog.LogInformation("Trying creating account but password break pattern. Account:" + _.Account);
                //    return new Response<UserModel>(PublicResultStatusCodes.ModelIsNotValid);
                //}

                var user = _mapper.Map <User>(_);
                HashNewUserPassword(ref user, _contextAccessor.HttpContext.User.Identity.Name);

                //if (user.IdActiveDirectoryDomain.HasValue && !DoesADUserExist(user.Account, user.IdActiveDirectoryDomain.Value))
                //{
                //    _saveLog.LogInformation("Account Do not exist in Active Directory with Id = \"" + _.IdActiveDirectoryDomain + "\" and with Account = \"" + _.Account + "\"");
                //    return new Response<UserModel>(PublicResultStatusCodes.ActiveDirectoryAccountNotExists);
                //}

                //if (!user.IdActiveDirectoryDomain.HasValue)
                user.ChangePasswordNeeded = true;

                var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(null, user);

                _generalUpdateService.InsertAddLogDataChange(user, serials.Item1, serials.Item2);
                //var list = new List<UserAuthorization>();
                var idEntry   = int.Parse(_contextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value);
                var entryUser = _contextAccessor.HttpContext.User?.Identity?.Name;
                //if (_.UserAuthorization != null)
                //    foreach (var item in _.UserAuthorization)
                //    {
                //        list.Add(new UserAuthorization()
                //        {
                //            IdModule = item.IdModule,
                //            IdRoleAuthorizationType = item.IdRoleAuthorizationType,
                //            IdUser = user.Id,
                //            EntryDate = DateTime.Now,
                //            IdEntryUser = idEntry,
                //            EntryUser = entryUser
                //        });
                //    }
                //_repository.AddRangeRoleAuthorization(list);

                //if (!string.IsNullOrWhiteSpace(user.SerialNumber))
                //{
                //var deviceUser = new DeviceUsers()
                //{
                //    IdUser = user.Id,
                //    IdDevice = _deviceRepository.GetDevices().FirstOrDefault().Id
                //};
                //_deviceRepository.AddDeviceUser(deviceUser);
                //}

                var body = "I/E nderuar, <br/>" +
                           "Nje llogari eshte krijuar me email-in tend. <br/>" +
                           "Ju mund te kyceni permes ktyre te dhenave:<br/>" +
                           "<b>Account:</b> " + _.Account + " <br/>" +
                           "<b>Password:</b> " + _.Password + " <br/>" +
                           "Klikoni ne kete {[vegez]} per te vazhduar.";

                var info = new EmailInfo
                {
                    Subject  = $"Llogari e krijuar",
                    Body     = body,
                    ToEmails = new List <string> {
                        _.EmailAddress
                    }
                };

                await _emailSender.SendEmailAsync(info);



                return(new Response <UserModel>(PublicResultStatusCodes.Done, _mapper.Map <UserModel>(user)));
            }
            catch (Exception) { return(new Response <UserModel>(PublicResultStatusCodes.QueryHasError)); }
        }