fix password validation - issue #13

This commit is contained in:
Alexis Gousseau 2023-07-25 12:55:22 +02:00
parent d362359509
commit 189a114511
4 changed files with 62 additions and 23 deletions

View file

@ -5,6 +5,7 @@ namespace App\Http\Requests\Bo\AppUser;
use App\Enums\AppUserRolesEnum;
use Illuminate\Foundation\Http\FormRequest;
use Kwaadpepper\Enum\Rules\EnumIsValidRule;
use Illuminate\Validation\Rules\Password;
class StoreAppUserRequest extends FormRequest
{
@ -42,7 +43,14 @@ class StoreAppUserRequest extends FormRequest
'lastname' => 'required|min:3|max:255',
'firstname' => 'required|min:3|max:255',
'email' => 'required|min:3|max:255|email:rfc,dns|unique:app_users,email',
'password' => 'required|nullable|required_with:password_confirmation|confirmed|min:8|max:255',
'password' => [
'required', 'required_with:password_confirmation', 'confirmed', 'max:255',
Password::min(8)
->letters()
->mixedCase()
->numbers()
->symbols()
],
'authorizedFolders' => 'present|array',
'role' => [
'required',

View file

@ -2,9 +2,8 @@
namespace App\Http\Requests\Bo\AppUser;
use App\Enums\AppUserRolesEnum;
use Illuminate\Validation\Rule;
use Kwaadpepper\Enum\Rules\EnumIsValidRule;
use Illuminate\Validation\Rules\Password;
class UpdateAppUserRequest extends StoreAppUserRequest
{
@ -15,9 +14,7 @@ class UpdateAppUserRequest extends StoreAppUserRequest
*/
public function rules()
{
return [
'lastname' => 'required|min:3|max:255',
'firstname' => 'required|min:3|max:255',
$rules = [
'email' => [
'required',
'min:3',
@ -25,12 +22,15 @@ class UpdateAppUserRequest extends StoreAppUserRequest
'email:rfc,dns',
Rule::unique('app_users', 'email')->ignore($this->route('app_user')->id),
],
'password' => 'sometimes|nullable|required_with:password_confirmation|confirmed|min:8|max:255',
'role' => [
'required',
new EnumIsValidRule(AppUserRolesEnum::class)
'password' => [
'sometimes', 'nullable', 'required_with:password_confirmation', 'confirmed', 'max:255',
Password::min(8)
->letters()
->mixedCase()
->numbers()
->symbols()
],
'status' => 'sometimes'
];
return array_merge(parent::rules(), $rules);
}
}

View file

@ -38,6 +38,15 @@ class AppUser extends Model
'order',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
];
/**
* cast enum
* @var string[]
@ -58,17 +67,28 @@ class AppUser extends Model
static::creating(function (self $model) {
self::assertFieldIsUnique('email', $model->email);
self::setOrder($model);
$model->password = Hash::make($model->password);
static::updatePassword($model);
});
static::updating(function (self $model) {
if (Hash::needsRehash($model->password)) {
$model->password = Hash::make($model->password);
}
static::updatePassword($model);
});
}
// * METHODS
/**
* Update password.
*
* @param self $model
* @return void
*/
private static function updatePassword(self $model): void
{
if (Hash::needsRehash($model->password)) {
$model->password = Hash::make($model->password);
}
}
/**
* Asserts using validation that the field is unique.
*

View file

@ -62,15 +62,26 @@ class User extends Authenticatable
protected static function booted()
{
// * EVENT CLOSURES.
static::creating(function (User $user) {
if (Hash::needsRehash($user->password)) {
$user->password = Hash::make($user->password);
}
static::creating(function (self $model) {
static::updatePassword($model);
});
static::updating(function (User $user) {
if (Hash::needsRehash($user->password)) {
$user->password = Hash::make($user->password);
}
static::updating(function (self $model) {
static::updatePassword($model);
});
}
// * METHODS
/**
* Update password.
*
* @param self $model
* @return void
*/
private static function updatePassword(self $model): void
{
if (Hash::needsRehash($model->password)) {
$model->password = Hash::make($model->password);
}
}
}