Verify current password before change password

This commit is contained in:
Jorge Colmenarez
2017-04-24 13:51:25 -04:00
parent 8261cc1f72
commit 8f728500d4
5 changed files with 52 additions and 21 deletions

View File

@@ -94,25 +94,31 @@ class Employees extends Persons
{
if($this->input->post('current_password') != '')
{
$employee_data = array(
'username' => $this->input->post('username'),
'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
'hash_version' => 2
);
if($this->Employee->change_password($employee_data, $employee_id))
if($this->_check_password($employee_id,$this->input->post('current_password')))
{
$employee_data = $this->xss_clean($employee_data);
$employee_data = array(
'username' => $this->input->post('username'),
'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
'hash_version' => 2
);
if($this->Employee->change_password($employee_data, $employee_id))
{
$employee_data = $this->xss_clean($employee_data);
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('employees_successful_change_password').' '.
$person_data['first_name'].' '.$person_data['last_name'], 'id' => $employee_id));
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('employees_successful_change_password').' '.
$person_data['first_name'].' '.$person_data['last_name'], 'id' => $employee_id));
}
else//failure
{
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('employees_successful_change_password').' '.
$person_data['first_name'].' '.$person_data['last_name'], 'id' => -1));
}
}
else//failure
else
{
$person_data = $this->xss_clean($person_data);
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('employees_successful_change_password').' '.
$person_data['first_name'].' '.$person_data['last_name'], 'id' => -1));
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('employees_current_password_invalid').' '.
$person_data['first_name'].' '.$person_data['last_name'], 'id' => -1));
}
}
else
@@ -206,5 +212,18 @@ class Employees extends Persons
$this->load->view("change_password", $data);
}
private function _check_password($employee_id,$password)
{
$person_info = $this->Employee->get_info($employee_id);
if(password_verify($password, $person_info->password))
{
return TRUE;
}
else
{
return FALSE;
}
}
}
?>

View File

@@ -5,6 +5,7 @@ $lang["employees_cannot_be_deleted"] = "Could not deleted selected employees, on
$lang["employees_change_password"] = "Change Password";
$lang["employees_confirm_delete"] = "Are you sure you want to delete the selected employees?";
$lang["employees_current_password"] = "Current Password";
$lang["employees_current_password_invalid"] = "Invalid Current Password";
$lang["employees_employee"] = "Employee";
$lang["employees_error_adding_updating"] = "Error adding/updating employee";
$lang["employees_error_deleting_demo_admin"] = "You can not delete the demo admin user";
@@ -16,6 +17,7 @@ $lang["employees_one_or_multiple"] = "employee(s)";
$lang["employees_password"] = "Password";
$lang["employees_password_minlength"] = "Passwords must be at least 8 characters";
$lang["employees_password_must_match"] = "Passwords do not match";
$lang["employees_password_not_must_match"] = "Current password and new password should not be the same";
$lang["employees_password_required"] = "Password is required";
$lang["employees_permission_desc"] = "Check the boxes below to grant access to modules";
$lang["employees_permission_info"] = "Permissions";

View File

@@ -5,6 +5,7 @@ $lang["employees_cannot_be_deleted"] = "No se pudieron borrar empleados. Uno o m
$lang["employees_change_password"] = "Cambiar Contraseña";
$lang["employees_confirm_delete"] = "¿Seguro(a) que quieres borrar los empleados seleccionados?";
$lang["employees_current_password"] = "Contraseña Actual";
$lang["employees_current_password_invalid"] = "Contraseña Actual Inválida";
$lang["employees_employee"] = "Empleado";
$lang["employees_error_adding_updating"] = "Error al agregar/actualizar empleado";
$lang["employees_error_deleting_demo_admin"] = "No puedes borrar el usuario admin del demo";
@@ -16,6 +17,7 @@ $lang["employees_one_or_multiple"] = "empleado(s)";
$lang["employees_password"] = "Contraseña";
$lang["employees_password_minlength"] = "La contraseña debe tener, por lo menos, 8 caracteres";
$lang["employees_password_must_match"] = "Las Contraseñas no coinciden";
$lang["employees_password_not_must_match"] = "Las contraseña actual y la nueva contraseña no deben ser iguales";
$lang["employees_password_required"] = "La Contraseña es requerida";
$lang["employees_permission_desc"] = "Activa las cajas debajo para permitir el acceso a los módulos";
$lang["employees_permission_info"] = "Permisos y Acceso del Empleado";

View File

@@ -414,7 +414,7 @@ class Employee extends Person
/*
Change password for the employee
*/
public function change_password(&$employee_data, $employee_id = FALSE)
public function change_password($employee_data, $employee_id = FALSE)
{
$success = FALSE;

View File

@@ -32,9 +32,7 @@
<?php echo form_password(array(
'name'=>'current_password',
'id'=>'current_password',
'class'=>'form-control input-sm',
'value'=>$person_info->password,
'readonly'=>'true')
'class'=>'form-control input-sm')
);?>
</div>
</div>
@@ -77,6 +75,10 @@
$(document).ready(function()
{
$.validator.setDefaults({ ignore: [] });
$.validator.addMethod("notEqualTo", function(value, element, param) {
return this.optional(element) || value != $(param).val();
}, '<?php echo $this->lang->line('employees_password_not_must_match'); ?>');
$('#employee_form').validate($.extend({
submitHandler:function(form)
@@ -91,11 +93,17 @@ $(document).ready(function()
});
},
rules:
{
password:
{
current_password:
{
required:true,
minlength: 8
},
password:
{
required:true,
minlength: 8,
notEqualTo: "#current_password"
},
repeat_password:
{