mirror of
https://github.com/Bubka/2FAuth.git
synced 2025-04-15 04:58:29 +02:00
Apply Pint fixes
This commit is contained in:
parent
ca903b6fc0
commit
49fddfd331
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
namespace App\Api\v1\Controllers;
|
namespace App\Api\v1\Controllers;
|
||||||
|
|
||||||
use App\Api\v1\Requests\UserManagerStoreRequest;
|
|
||||||
use App\Api\v1\Requests\UserManagerPromoteRequest;
|
use App\Api\v1\Requests\UserManagerPromoteRequest;
|
||||||
|
use App\Api\v1\Requests\UserManagerStoreRequest;
|
||||||
use App\Api\v1\Resources\UserManagerResource;
|
use App\Api\v1\Resources\UserManagerResource;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
@ -36,7 +36,7 @@ public function show(User $user)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reset user's password
|
* Reset user's password
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Http\JsonResponse
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
@ -59,15 +59,14 @@ public function resetPassword(Request $request, User $user)
|
|||||||
|
|
||||||
if ($response == Password::PASSWORD_RESET) {
|
if ($response == Password::PASSWORD_RESET) {
|
||||||
Log::info(sprintf('Temporary password set for User ID #%s', $user->id));
|
Log::info(sprintf('Temporary password set for User ID #%s', $user->id));
|
||||||
|
|
||||||
$response = $this->broker()->sendResetLink(
|
$response = $this->broker()->sendResetLink(
|
||||||
['email' => $credentials['email']]
|
['email' => $credentials['email']]
|
||||||
);
|
);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'bad request',
|
'message' => 'bad request',
|
||||||
'reason' => is_string($response) ? __($response) : __('errors.no_pwd_reset_for_this_user_type')
|
'reason' => is_string($response) ? __($response) : __('errors.no_pwd_reset_for_this_user_type'),
|
||||||
], 400);
|
], 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,7 +74,7 @@ public function resetPassword(Request $request, User $user)
|
|||||||
? new UserManagerResource($user)
|
? new UserManagerResource($user)
|
||||||
: response()->json([
|
: response()->json([
|
||||||
'message' => 'bad request',
|
'message' => 'bad request',
|
||||||
'reason' => __($response)
|
'reason' => __($response),
|
||||||
], 400);
|
], 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,9 +88,9 @@ public function store(UserManagerStoreRequest $request)
|
|||||||
$validated = $request->validated();
|
$validated = $request->validated();
|
||||||
|
|
||||||
$user = User::create([
|
$user = User::create([
|
||||||
'name' => $validated['name'],
|
'name' => $validated['name'],
|
||||||
'email' => $validated['email'],
|
'email' => $validated['email'],
|
||||||
'password' => Hash::make($validated['password']),
|
'password' => Hash::make($validated['password']),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
Log::info(sprintf('User ID #%s created by user ID #%s', $user->id, $request->user()->id));
|
Log::info(sprintf('User ID #%s created by user ID #%s', $user->id, $request->user()->id));
|
||||||
@ -196,5 +195,4 @@ protected function broker()
|
|||||||
{
|
{
|
||||||
return Password::broker();
|
return Password::broker();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ public function rules()
|
|||||||
$rule = [
|
$rule = [
|
||||||
'value' => [
|
'value' => [
|
||||||
'required',
|
'required',
|
||||||
]
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
if ($this->route()?->parameter('settingName') == 'restrictList') {
|
if ($this->route()?->parameter('settingName') == 'restrictList') {
|
||||||
|
@ -38,7 +38,7 @@ public function __construct($resource)
|
|||||||
{
|
{
|
||||||
$this->resource = $resource;
|
$this->resource = $resource;
|
||||||
$password_reset = null;
|
$password_reset = null;
|
||||||
|
|
||||||
// Password reset token
|
// Password reset token
|
||||||
$resetToken = DB::table(config('auth.passwords.users.table'))->where(
|
$resetToken = DB::table(config('auth.passwords.users.table'))->where(
|
||||||
'email', $this->resource->getEmailForPasswordReset()
|
'email', $this->resource->getEmailForPasswordReset()
|
||||||
@ -52,7 +52,7 @@ public function __construct($resource)
|
|||||||
|
|
||||||
// Personal Access Tokens (PATs)
|
// Personal Access Tokens (PATs)
|
||||||
$tokenRepository = App::make(TokenRepository::class);
|
$tokenRepository = App::make(TokenRepository::class);
|
||||||
$tokens = $tokenRepository->forUser($this->resource->getAuthIdentifier());
|
$tokens = $tokenRepository->forUser($this->resource->getAuthIdentifier());
|
||||||
|
|
||||||
$PATs_count = $tokens->load('client')->filter(function ($token) {
|
$PATs_count = $tokens->load('client')->filter(function ($token) {
|
||||||
return $token->client->personal_access_client && ! $token->revoked;
|
return $token->client->personal_access_client && ! $token->revoked;
|
||||||
@ -61,10 +61,9 @@ public function __construct($resource)
|
|||||||
$this->with = [
|
$this->with = [
|
||||||
'password_reset' => $password_reset,
|
'password_reset' => $password_reset,
|
||||||
'valid_personal_access_tokens' => $PATs_count,
|
'valid_personal_access_tokens' => $PATs_count,
|
||||||
'webauthn_credentials' => $this->resource->webAuthnCredentials()->count()
|
'webauthn_credentials' => $this->resource->webAuthnCredentials()->count(),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine if the token has expired.
|
* Determine if the token has expired.
|
||||||
@ -75,7 +74,7 @@ public function __construct($resource)
|
|||||||
protected function tokenExpired($createdAt)
|
protected function tokenExpired($createdAt)
|
||||||
{
|
{
|
||||||
// See Illuminate\Auth\Passwords\DatabaseTokenRepository
|
// See Illuminate\Auth\Passwords\DatabaseTokenRepository
|
||||||
return Carbon::parse($createdAt)->addSeconds(config('auth.passwords.users.expires', 60)*60)->isPast();
|
return Carbon::parse($createdAt)->addSeconds(config('auth.passwords.users.expires', 60) * 60)->isPast();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -90,8 +89,8 @@ public function toArray($request)
|
|||||||
parent::toArray($request),
|
parent::toArray($request),
|
||||||
[
|
[
|
||||||
'twofaccounts_count' => is_null($this->twofaccounts_count) ? 0 : $this->twofaccounts_count,
|
'twofaccounts_count' => is_null($this->twofaccounts_count) ? 0 : $this->twofaccounts_count,
|
||||||
'last_seen_at' => Carbon::parse($this->last_seen_at)->locale(App::getLocale())->diffForHumans(),
|
'last_seen_at' => Carbon::parse($this->last_seen_at)->locale(App::getLocale())->diffForHumans(),
|
||||||
'created_at' => Carbon::parse($this->created_at)->locale(App::getLocale())->diffForHumans(),
|
'created_at' => Carbon::parse($this->created_at)->locale(App::getLocale())->diffForHumans(),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -137,7 +137,7 @@ public function handle()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Runs the passport:install command silently
|
||||||
*/
|
*/
|
||||||
protected function installPassport() : void
|
protected function installPassport() : void
|
||||||
{
|
{
|
||||||
@ -147,7 +147,7 @@ protected function installPassport() : void
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Runs the config:cache command silently
|
||||||
*/
|
*/
|
||||||
protected function cacheConfig() : void
|
protected function cacheConfig() : void
|
||||||
{
|
{
|
||||||
@ -157,11 +157,11 @@ protected function cacheConfig() : void
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Runs the storage:link command silently
|
||||||
*/
|
*/
|
||||||
protected function createStorageLink() : void
|
protected function createStorageLink() : void
|
||||||
{
|
{
|
||||||
if (!file_exists(public_path('storage'))) {
|
if (! file_exists(public_path('storage'))) {
|
||||||
$this->components->task('Creating storage link', function () : void {
|
$this->components->task('Creating storage link', function () : void {
|
||||||
$this->callSilently('storage:link');
|
$this->callSilently('storage:link');
|
||||||
});
|
});
|
||||||
@ -169,7 +169,7 @@ protected function createStorageLink() : void
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Lets the user set the main environment variables
|
||||||
*/
|
*/
|
||||||
protected function setMainEnvVars() : void
|
protected function setMainEnvVars() : void
|
||||||
{
|
{
|
||||||
@ -177,8 +177,7 @@ protected function setMainEnvVars() : void
|
|||||||
$appUrl = trim($this->ask('URL of this 2FAuth instance', config('app.url')), '/');
|
$appUrl = trim($this->ask('URL of this 2FAuth instance', config('app.url')), '/');
|
||||||
if (filter_var($appUrl, FILTER_VALIDATE_URL)) {
|
if (filter_var($appUrl, FILTER_VALIDATE_URL)) {
|
||||||
break;
|
break;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$this->components->error('This is not a valid URL, please retry');
|
$this->components->error('This is not a valid URL, please retry');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -195,7 +194,7 @@ protected function setMainEnvVars() : void
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prompt user for valid database credentials and set them to .env file.
|
* Prompts user for valid database credentials and sets them to .env file.
|
||||||
*/
|
*/
|
||||||
protected function setDbEnvVars() : void
|
protected function setDbEnvVars() : void
|
||||||
{
|
{
|
||||||
@ -253,7 +252,7 @@ protected function setDbEnvVars() : void
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Runs db migration with --force option
|
||||||
*/
|
*/
|
||||||
protected function migrateDatabase() : mixed
|
protected function migrateDatabase() : mixed
|
||||||
{
|
{
|
||||||
@ -265,7 +264,7 @@ protected function migrateDatabase() : mixed
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Clears some caches
|
||||||
*/
|
*/
|
||||||
protected function clearCaches() : void
|
protected function clearCaches() : void
|
||||||
{
|
{
|
||||||
@ -276,7 +275,7 @@ protected function clearCaches() : void
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Loads the existing env file or creates it
|
||||||
*/
|
*/
|
||||||
protected function loadEnvFile() : void
|
protected function loadEnvFile() : void
|
||||||
{
|
{
|
||||||
@ -300,7 +299,7 @@ protected function loadEnvFile() : void
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Generates an app key if necessary
|
||||||
*/
|
*/
|
||||||
protected function maybeGenerateAppKey() : void
|
protected function maybeGenerateAppKey() : void
|
||||||
{
|
{
|
||||||
@ -317,7 +316,7 @@ protected function maybeGenerateAppKey() : void
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate a random key for the application.
|
* Generates a random key for the application.
|
||||||
*/
|
*/
|
||||||
protected function generateRandomKey() : string
|
protected function generateRandomKey() : string
|
||||||
{
|
{
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
use App\Http\Requests\UserUpdateRequest;
|
use App\Http\Requests\UserUpdateRequest;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\DB;
|
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
@ -109,6 +109,4 @@ public function clear(Request $request)
|
|||||||
|
|
||||||
return response()->json(['exit-code' => $exitCode], 200);
|
return response()->json(['exit-code' => $exitCode], 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
namespace App\Listeners;
|
namespace App\Listeners;
|
||||||
|
|
||||||
use Illuminate\Notifications\Events\NotificationSent;
|
use Illuminate\Notifications\Events\NotificationSent;
|
||||||
use Illuminate\Support\Facades\Auth;
|
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
class LogNotification
|
class LogNotification
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||||
use Illuminate\Notifications\Notifiable;
|
use Illuminate\Notifications\Notifiable;
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
use Illuminate\Support\Facades\Log;
|
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Laragear\WebAuthn\WebAuthnAuthentication;
|
use Laragear\WebAuthn\WebAuthnAuthentication;
|
||||||
use Laravel\Passport\HasApiTokens;
|
use Laravel\Passport\HasApiTokens;
|
||||||
@ -92,7 +91,7 @@ public function scopeAdmins($query)
|
|||||||
/**
|
/**
|
||||||
* Determine if the user is an administrator.
|
* Determine if the user is an administrator.
|
||||||
*
|
*
|
||||||
* @return boolean
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function isAdministrator()
|
public function isAdministrator()
|
||||||
{
|
{
|
||||||
@ -102,7 +101,6 @@ public function isAdministrator()
|
|||||||
/**
|
/**
|
||||||
* Grant administrator permissions to the user.
|
* Grant administrator permissions to the user.
|
||||||
*
|
*
|
||||||
* @param bool $promote
|
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function promoteToAdministrator(bool $promote = true)
|
public function promoteToAdministrator(bool $promote = true)
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
class TestEmailSettingNotification extends Notification
|
class TestEmailSettingNotification extends Notification
|
||||||
{
|
{
|
||||||
|
|
||||||
// /**
|
// /**
|
||||||
// * The callback that should be used to create the reset password URL.
|
// * The callback that should be used to create the reset password URL.
|
||||||
// *
|
// *
|
||||||
|
@ -14,7 +14,7 @@ class UserObserver
|
|||||||
/**
|
/**
|
||||||
* Handle the User "created" event.
|
* Handle the User "created" event.
|
||||||
*/
|
*/
|
||||||
public function created(User $user): void
|
public function created(User $user) : void
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
@ -22,7 +22,7 @@ public function created(User $user): void
|
|||||||
/**
|
/**
|
||||||
* Handle the User "updated" event.
|
* Handle the User "updated" event.
|
||||||
*/
|
*/
|
||||||
public function updated(User $user): void
|
public function updated(User $user) : void
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
@ -30,7 +30,7 @@ public function updated(User $user): void
|
|||||||
/**
|
/**
|
||||||
* Handle the User "deleting" event.
|
* Handle the User "deleting" event.
|
||||||
*/
|
*/
|
||||||
public function deleting(User $user): bool
|
public function deleting(User $user) : bool
|
||||||
{
|
{
|
||||||
Log::info(sprintf('Deletion of User ID #%s requested by User ID #%s', $user->id, Auth::user()->id ?? 'unknown'));
|
Log::info(sprintf('Deletion of User ID #%s requested by User ID #%s', $user->id, Auth::user()->id ?? 'unknown'));
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ public function deleting(User $user): bool
|
|||||||
|
|
||||||
if ($isLastAdmin) {
|
if ($isLastAdmin) {
|
||||||
Log::notice(sprintf('Deletion of user ID #%s refused, cannot delete the only administrator', $user->id));
|
Log::notice(sprintf('Deletion of user ID #%s refused, cannot delete the only administrator', $user->id));
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ public function deleting(User $user): bool
|
|||||||
/**
|
/**
|
||||||
* Handle the User "deleted" event.
|
* Handle the User "deleted" event.
|
||||||
*/
|
*/
|
||||||
public function deleted(User $user): void
|
public function deleted(User $user) : void
|
||||||
{
|
{
|
||||||
// DB has cascade delete enabled to flush 2FA and Groups but,
|
// DB has cascade delete enabled to flush 2FA and Groups but,
|
||||||
// for an unknown reason, SQLite refuses to delete these related.
|
// for an unknown reason, SQLite refuses to delete these related.
|
||||||
@ -82,7 +82,7 @@ public function deleted(User $user): void
|
|||||||
/**
|
/**
|
||||||
* Handle the User "restored" event.
|
* Handle the User "restored" event.
|
||||||
*/
|
*/
|
||||||
public function restored(User $user): void
|
public function restored(User $user) : void
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
@ -90,7 +90,7 @@ public function restored(User $user): void
|
|||||||
/**
|
/**
|
||||||
* Handle the User "force deleted" event.
|
* Handle the User "force deleted" event.
|
||||||
*/
|
*/
|
||||||
public function forceDeleted(User $user): void
|
public function forceDeleted(User $user) : void
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
@ -12,19 +12,19 @@ class UserPolicy
|
|||||||
/**
|
/**
|
||||||
* Perform pre-authorization checks.
|
* Perform pre-authorization checks.
|
||||||
*/
|
*/
|
||||||
public function before(User $user, string $ability): bool|null
|
public function before(User $user, string $ability) : ?bool
|
||||||
{
|
{
|
||||||
if ($user->isAdministrator()) {
|
if ($user->isAdministrator()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine whether the user can view any models.
|
* Determine whether the user can view any models.
|
||||||
*/
|
*/
|
||||||
public function viewAny(User $user): bool
|
public function viewAny(User $user) : bool
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -32,7 +32,7 @@ public function viewAny(User $user): bool
|
|||||||
/**
|
/**
|
||||||
* Determine whether the user can view the model.
|
* Determine whether the user can view the model.
|
||||||
*/
|
*/
|
||||||
public function view(User $user, User $model): bool
|
public function view(User $user, User $model) : bool
|
||||||
{
|
{
|
||||||
$can = $this->isHimself($user, $model);
|
$can = $this->isHimself($user, $model);
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ public function view(User $user, User $model): bool
|
|||||||
/**
|
/**
|
||||||
* Determine whether the user can create models.
|
* Determine whether the user can create models.
|
||||||
*/
|
*/
|
||||||
public function create(?User $user): bool
|
public function create(?User $user) : bool
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -54,7 +54,7 @@ public function create(?User $user): bool
|
|||||||
/**
|
/**
|
||||||
* Determine whether the user can update the model.
|
* Determine whether the user can update the model.
|
||||||
*/
|
*/
|
||||||
public function update(User $user, User $model): bool
|
public function update(User $user, User $model) : bool
|
||||||
{
|
{
|
||||||
$can = $this->isHimself($user, $model);
|
$can = $this->isHimself($user, $model);
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ public function update(User $user, User $model): bool
|
|||||||
/**
|
/**
|
||||||
* Determine whether the user can delete the model.
|
* Determine whether the user can delete the model.
|
||||||
*/
|
*/
|
||||||
public function delete(User $user, User $model): bool
|
public function delete(User $user, User $model) : bool
|
||||||
{
|
{
|
||||||
$can = $this->isHimself($user, $model);
|
$can = $this->isHimself($user, $model);
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
use Illuminate\Support\Facades\Blade;
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
use Laravel\Passport\Console\ClientCommand;
|
use Laravel\Passport\Console\ClientCommand;
|
||||||
|
@ -50,12 +50,12 @@ class EventServiceProvider extends ServiceProvider
|
|||||||
LogNotification::class,
|
LogNotification::class,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The model observers for your application.
|
* The model observers for your application.
|
||||||
*
|
*
|
||||||
* @var array<string, string|object|array<int, string|object>>
|
* @var array<string, string|object|array<int, string|object>>
|
||||||
*/
|
*/
|
||||||
protected $observers = [
|
protected $observers = [
|
||||||
User::class => [UserObserver::class],
|
User::class => [UserObserver::class],
|
||||||
];
|
];
|
||||||
|
@ -11,11 +11,11 @@ class ComplyWithEmailRestrictionPolicy implements ValidationRule
|
|||||||
/**
|
/**
|
||||||
* Run the validation rule.
|
* Run the validation rule.
|
||||||
*/
|
*/
|
||||||
public function validate(string $attribute, mixed $value, Closure $fail): void
|
public function validate(string $attribute, mixed $value, Closure $fail) : void
|
||||||
{
|
{
|
||||||
$list = Settings::get('restrictList');
|
$list = Settings::get('restrictList');
|
||||||
$regex = Settings::get('restrictRule');
|
$regex = Settings::get('restrictRule');
|
||||||
|
|
||||||
$validatesFilter = true;
|
$validatesFilter = true;
|
||||||
$validatesRegex = true;
|
$validatesRegex = true;
|
||||||
|
|
||||||
@ -31,8 +31,7 @@ public function validate(string $attribute, mixed $value, Closure $fail): void
|
|||||||
if (! $validatesFilter && ! $validatesRegex) {
|
if (! $validatesFilter && ! $validatesRegex) {
|
||||||
$fail('validation.custom.email.ComplyWithEmailRestrictionPolicy')->translate();
|
$fail('validation.custom.email.ComplyWithEmailRestrictionPolicy')->translate();
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
if (! $validatesFilter || ! $validatesRegex) {
|
if (! $validatesFilter || ! $validatesRegex) {
|
||||||
$fail('validation.custom.email.ComplyWithEmailRestrictionPolicy')->translate();
|
$fail('validation.custom.email.ComplyWithEmailRestrictionPolicy')->translate();
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ class IsValideEmailList implements ValidationRule
|
|||||||
/**
|
/**
|
||||||
* Run the validation rule.
|
* Run the validation rule.
|
||||||
*/
|
*/
|
||||||
public function validate(string $attribute, mixed $value, Closure $fail): void
|
public function validate(string $attribute, mixed $value, Closure $fail) : void
|
||||||
{
|
{
|
||||||
$emails = explode('|', $value);
|
$emails = explode('|', $value);
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
Route::get('user/preferences/{preferenceName}', [UserController::class, 'showPreference'])->name('user.preferences.show');
|
Route::get('user/preferences/{preferenceName}', [UserController::class, 'showPreference'])->name('user.preferences.show');
|
||||||
Route::get('user/preferences', [UserController::class, 'allPreferences'])->name('user.preferences.all');
|
Route::get('user/preferences', [UserController::class, 'allPreferences'])->name('user.preferences.all');
|
||||||
Route::put('user/preferences/{preferenceName}', [UserController::class, 'setPreference'])->name('user.preferences.set');
|
Route::put('user/preferences/{preferenceName}', [UserController::class, 'setPreference'])->name('user.preferences.set');
|
||||||
|
|
||||||
Route::delete('twofaccounts', [TwoFAccountController::class, 'batchDestroy'])->name('twofaccounts.batchDestroy');
|
Route::delete('twofaccounts', [TwoFAccountController::class, 'batchDestroy'])->name('twofaccounts.batchDestroy');
|
||||||
Route::patch('twofaccounts/withdraw', [TwoFAccountController::class, 'withdraw'])->name('twofaccounts.withdraw');
|
Route::patch('twofaccounts/withdraw', [TwoFAccountController::class, 'withdraw'])->name('twofaccounts.withdraw');
|
||||||
Route::post('twofaccounts/reorder', [TwoFAccountController::class, 'reorder'])->name('twofaccounts.reorder');
|
Route::post('twofaccounts/reorder', [TwoFAccountController::class, 'reorder'])->name('twofaccounts.reorder');
|
||||||
|
@ -76,7 +76,7 @@
|
|||||||
/**
|
/**
|
||||||
* Routes protected by an authentication guard and restricted to administrators
|
* Routes protected by an authentication guard and restricted to administrators
|
||||||
*/
|
*/
|
||||||
Route::group(['middleware' => ['behind-auth', 'admin']], function () {
|
Route::group(['middleware' => ['behind-auth', 'admin']], function () {
|
||||||
Route::get('system/infos', [SystemController::class, 'infos'])->name('system.infos');
|
Route::get('system/infos', [SystemController::class, 'infos'])->name('system.infos');
|
||||||
Route::post('system/test-email', [SystemController::class, 'testEmail'])->name('system.testEmail');
|
Route::post('system/test-email', [SystemController::class, 'testEmail'])->name('system.testEmail');
|
||||||
});
|
});
|
||||||
|
@ -95,11 +95,11 @@ public function test_index_returns_all_users()
|
|||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
*/
|
*/
|
||||||
public function test_index_succeeds_and_returns_UserManagerResource(): void
|
public function test_index_succeeds_and_returns_UserManagerResource() : void
|
||||||
{
|
{
|
||||||
$path = '/api/v1/users';
|
$path = '/api/v1/users';
|
||||||
$resources = UserManagerResource::collection(User::all());
|
$resources = UserManagerResource::collection(User::all());
|
||||||
$request = Request::create($path, 'GET');
|
$request = Request::create($path, 'GET');
|
||||||
|
|
||||||
$this->actingAs($this->admin, 'api-guard')
|
$this->actingAs($this->admin, 'api-guard')
|
||||||
->json('GET', $path)
|
->json('GET', $path)
|
||||||
@ -121,11 +121,11 @@ public function test_show_returns_the_correct_user()
|
|||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
*/
|
*/
|
||||||
public function test_show_returns_UserManagerResource(): void
|
public function test_show_returns_UserManagerResource() : void
|
||||||
{
|
{
|
||||||
$path = '/api/v1/users/' . $this->user->id;
|
$path = '/api/v1/users/' . $this->user->id;
|
||||||
$resources = UserManagerResource::make($this->user);
|
$resources = UserManagerResource::make($this->user);
|
||||||
$request = Request::create($path, 'GET');
|
$request = Request::create($path, 'GET');
|
||||||
|
|
||||||
$this->actingAs($this->admin, 'api-guard')
|
$this->actingAs($this->admin, 'api-guard')
|
||||||
->json('GET', $path)
|
->json('GET', $path)
|
||||||
@ -140,7 +140,7 @@ public function test_resetPassword_resets_password_and_sends_password_reset_to_u
|
|||||||
Notification::fake();
|
Notification::fake();
|
||||||
|
|
||||||
DB::table(config('auth.passwords.users.table'))->delete();
|
DB::table(config('auth.passwords.users.table'))->delete();
|
||||||
$user = User::factory()->create();
|
$user = User::factory()->create();
|
||||||
$oldPassword = $user->password;
|
$oldPassword = $user->password;
|
||||||
|
|
||||||
$this->actingAs($this->admin, 'api-guard')
|
$this->actingAs($this->admin, 'api-guard')
|
||||||
@ -165,9 +165,9 @@ public function test_resetPassword_returns_UserManagerResource()
|
|||||||
{
|
{
|
||||||
Notification::fake();
|
Notification::fake();
|
||||||
|
|
||||||
$user = User::factory()->create();
|
$user = User::factory()->create();
|
||||||
$path = '/api/v1/users/' . $user->id . '/password/reset';
|
$path = '/api/v1/users/' . $user->id . '/password/reset';
|
||||||
$request = Request::create($path, 'PATCH');
|
$request = Request::create($path, 'PATCH');
|
||||||
|
|
||||||
$response = $this->actingAs($this->admin, 'api-guard')
|
$response = $this->actingAs($this->admin, 'api-guard')
|
||||||
->json('PATCH', $path);
|
->json('PATCH', $path);
|
||||||
@ -201,7 +201,7 @@ public function test_resetPassword_does_not_notify_when_reset_failed_and_returns
|
|||||||
'message',
|
'message',
|
||||||
'reason',
|
'reason',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
Notification::assertNothingSent();
|
Notification::assertNothingSent();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,7 +232,7 @@ public function test_resetPassword_returns_error_when_notify_send_failed()
|
|||||||
'message',
|
'message',
|
||||||
'reason',
|
'reason',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
Notification::assertNothingSent();
|
Notification::assertNothingSent();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,10 +247,10 @@ public function test_store_creates_the_user_and_returns_success()
|
|||||||
'email' => self::EMAIL,
|
'email' => self::EMAIL,
|
||||||
'password' => self::PASSWORD,
|
'password' => self::PASSWORD,
|
||||||
'password_confirmation' => self::PASSWORD,
|
'password_confirmation' => self::PASSWORD,
|
||||||
'is_admin' => false
|
'is_admin' => false,
|
||||||
])
|
])
|
||||||
->assertCreated();
|
->assertCreated();
|
||||||
|
|
||||||
$this->assertDatabaseHas('users', [
|
$this->assertDatabaseHas('users', [
|
||||||
'name' => self::USERNAME,
|
'name' => self::USERNAME,
|
||||||
'email' => self::EMAIL,
|
'email' => self::EMAIL,
|
||||||
@ -260,18 +260,18 @@ public function test_store_creates_the_user_and_returns_success()
|
|||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
*/
|
*/
|
||||||
public function test_store_returns_UserManagerResource_of_created_user(): void
|
public function test_store_returns_UserManagerResource_of_created_user() : void
|
||||||
{
|
{
|
||||||
$path = '/api/v1/users';
|
$path = '/api/v1/users';
|
||||||
$userDefinition = (new UserFactory)->definition();
|
$userDefinition = (new UserFactory)->definition();
|
||||||
$userDefinition['password_confirmation'] = $userDefinition['password'];
|
$userDefinition['password_confirmation'] = $userDefinition['password'];
|
||||||
$request = Request::create($path, 'POST');
|
$request = Request::create($path, 'POST');
|
||||||
|
|
||||||
$response = $this->actingAs($this->admin, 'api-guard')
|
$response = $this->actingAs($this->admin, 'api-guard')
|
||||||
->json('POST', $path, $userDefinition)
|
->json('POST', $path, $userDefinition)
|
||||||
->assertCreated();
|
->assertCreated();
|
||||||
|
|
||||||
$user = User::where('email', $userDefinition['email'])->first();
|
$user = User::where('email', $userDefinition['email'])->first();
|
||||||
$resource = UserManagerResource::make($user);
|
$resource = UserManagerResource::make($user);
|
||||||
|
|
||||||
$response->assertExactJson($resource->response($request)->getData(true));
|
$response->assertExactJson($resource->response($request)->getData(true));
|
||||||
@ -280,19 +280,19 @@ public function test_store_returns_UserManagerResource_of_created_user(): void
|
|||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
*/
|
*/
|
||||||
public function test_store_returns_UserManagerResource_of_created_admin(): void
|
public function test_store_returns_UserManagerResource_of_created_admin() : void
|
||||||
{
|
{
|
||||||
$path = '/api/v1/users';
|
$path = '/api/v1/users';
|
||||||
$userDefinition = (new UserFactory)->definition();
|
$userDefinition = (new UserFactory)->definition();
|
||||||
$userDefinition['is_admin'] = true;
|
$userDefinition['is_admin'] = true;
|
||||||
$userDefinition['password_confirmation'] = $userDefinition['password'];
|
$userDefinition['password_confirmation'] = $userDefinition['password'];
|
||||||
$request = Request::create($path, 'POST');
|
$request = Request::create($path, 'POST');
|
||||||
|
|
||||||
$response = $this->actingAs($this->admin, 'api-guard')
|
$response = $this->actingAs($this->admin, 'api-guard')
|
||||||
->json('POST', $path, $userDefinition)
|
->json('POST', $path, $userDefinition)
|
||||||
->assertCreated();
|
->assertCreated();
|
||||||
|
|
||||||
$user = User::where('email', $userDefinition['email'])->first();
|
$user = User::where('email', $userDefinition['email'])->first();
|
||||||
$resource = UserManagerResource::make($user);
|
$resource = UserManagerResource::make($user);
|
||||||
|
|
||||||
$response->assertExactJson($resource->response($request)->getData(true));
|
$response->assertExactJson($resource->response($request)->getData(true));
|
||||||
@ -310,10 +310,10 @@ public function test_revokePATs_flushes_pats()
|
|||||||
'name' => 'RandomTokenName',
|
'name' => 'RandomTokenName',
|
||||||
])
|
])
|
||||||
->assertOk();
|
->assertOk();
|
||||||
|
|
||||||
$this->actingAs($this->admin, 'api-guard')
|
$this->actingAs($this->admin, 'api-guard')
|
||||||
->json('DELETE', '/api/v1/users/' . $this->user->id . '/pats');
|
->json('DELETE', '/api/v1/users/' . $this->user->id . '/pats');
|
||||||
|
|
||||||
$tokens = $tokenRepository->forUser($this->user->getAuthIdentifier());
|
$tokens = $tokenRepository->forUser($this->user->getAuthIdentifier());
|
||||||
$tokens = $tokens->load('client')->filter(function ($token) {
|
$tokens = $tokens->load('client')->filter(function ($token) {
|
||||||
return $token->client->personal_access_client && ! $token->revoked;
|
return $token->client->personal_access_client && ! $token->revoked;
|
||||||
@ -423,7 +423,7 @@ public function test_revokeWebauthnCredentials_resets_useWebauthnOnly_user_prefe
|
|||||||
->assertNoContent();
|
->assertNoContent();
|
||||||
|
|
||||||
$this->user->refresh();
|
$this->user->refresh();
|
||||||
|
|
||||||
$this->assertFalse($this->user->preferences['useWebauthnOnly']);
|
$this->assertFalse($this->user->preferences['useWebauthnOnly']);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -452,30 +452,30 @@ public function test_destroy_the_only_admin_returns_forbidden()
|
|||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
*/
|
*/
|
||||||
public function test_promote_changes_admin_status(): void
|
public function test_promote_changes_admin_status() : void
|
||||||
{
|
{
|
||||||
$this->actingAs($this->admin, 'api-guard')
|
$this->actingAs($this->admin, 'api-guard')
|
||||||
->json('PATCH', '/api/v1/users/' . $this->user->id . '/promote', [
|
->json('PATCH', '/api/v1/users/' . $this->user->id . '/promote', [
|
||||||
'is_admin' => true
|
'is_admin' => true,
|
||||||
])
|
])
|
||||||
->assertOk();
|
->assertOk();
|
||||||
|
|
||||||
$this->user->refresh();
|
$this->user->refresh();
|
||||||
|
|
||||||
$this->assertTrue($this->user->isAdministrator());
|
$this->assertTrue($this->user->isAdministrator());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
*/
|
*/
|
||||||
public function test_promote_returns_UserManagerResource(): void
|
public function test_promote_returns_UserManagerResource() : void
|
||||||
{
|
{
|
||||||
$path = '/api/v1/users/' . $this->user->id . '/promote';
|
$path = '/api/v1/users/' . $this->user->id . '/promote';
|
||||||
$request = Request::create($path, 'PUT');
|
$request = Request::create($path, 'PUT');
|
||||||
|
|
||||||
$response = $this->actingAs($this->admin, 'api-guard')
|
$response = $this->actingAs($this->admin, 'api-guard')
|
||||||
->json('PATCH', $path, [
|
->json('PATCH', $path, [
|
||||||
'is_admin' => true
|
'is_admin' => true,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->user->refresh();
|
$this->user->refresh();
|
||||||
@ -483,6 +483,4 @@ public function test_promote_returns_UserManagerResource(): void
|
|||||||
|
|
||||||
$response->assertExactJson($resources->response($request)->getData(true));
|
$response->assertExactJson($resources->response($request)->getData(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -171,7 +171,7 @@ public function test_register_succeeds_when_email_is_in_restricted_list()
|
|||||||
'password' => self::PASSWORD,
|
'password' => self::PASSWORD,
|
||||||
'password_confirmation' => self::PASSWORD,
|
'password_confirmation' => self::PASSWORD,
|
||||||
])
|
])
|
||||||
->assertStatus(201);
|
->assertStatus(201);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -189,7 +189,7 @@ public function test_register_fails_when_email_is_not_in_restricted_list()
|
|||||||
'password' => self::PASSWORD,
|
'password' => self::PASSWORD,
|
||||||
'password_confirmation' => self::PASSWORD,
|
'password_confirmation' => self::PASSWORD,
|
||||||
])
|
])
|
||||||
->assertStatus(422);
|
->assertStatus(422);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -207,7 +207,7 @@ public function test_register_succeeds_when_email_matchs_filtering_rule()
|
|||||||
'password' => self::PASSWORD,
|
'password' => self::PASSWORD,
|
||||||
'password_confirmation' => self::PASSWORD,
|
'password_confirmation' => self::PASSWORD,
|
||||||
])
|
])
|
||||||
->assertStatus(201);
|
->assertStatus(201);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -225,7 +225,7 @@ public function test_register_fails_when_email_does_not_match_filtering_rule()
|
|||||||
'password' => self::PASSWORD,
|
'password' => self::PASSWORD,
|
||||||
'password_confirmation' => self::PASSWORD,
|
'password_confirmation' => self::PASSWORD,
|
||||||
])
|
])
|
||||||
->assertStatus(422);
|
->assertStatus(422);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -243,7 +243,7 @@ public function test_register_succeeds_when_email_is_allowed_by_list_over_regex(
|
|||||||
'password' => self::PASSWORD,
|
'password' => self::PASSWORD,
|
||||||
'password_confirmation' => self::PASSWORD,
|
'password_confirmation' => self::PASSWORD,
|
||||||
])
|
])
|
||||||
->assertStatus(201);
|
->assertStatus(201);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -261,6 +261,6 @@ public function test_register_succeeds_when_email_is_allowed_by_regex_over_list(
|
|||||||
'password' => self::PASSWORD,
|
'password' => self::PASSWORD,
|
||||||
'password_confirmation' => self::PASSWORD,
|
'password_confirmation' => self::PASSWORD,
|
||||||
])
|
])
|
||||||
->assertStatus(201);
|
->assertStatus(201);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -166,10 +166,10 @@ public function test_recover_resets_useWebauthnOnly_user_preference()
|
|||||||
'email' => $this->user->email,
|
'email' => $this->user->email,
|
||||||
'password' => UserFactory::USER_PASSWORD,
|
'password' => UserFactory::USER_PASSWORD,
|
||||||
])
|
])
|
||||||
->assertStatus(200);
|
->assertStatus(200);
|
||||||
|
|
||||||
$this->user->refresh();
|
$this->user->refresh();
|
||||||
|
|
||||||
$this->assertFalse($this->user->preferences['useWebauthnOnly']);
|
$this->assertFalse($this->user->preferences['useWebauthnOnly']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,9 @@ class SystemControllerTest extends FeatureTestCase
|
|||||||
/**
|
/**
|
||||||
* @var \App\Models\User|\Illuminate\Contracts\Auth\Authenticatable
|
* @var \App\Models\User|\Illuminate\Contracts\Auth\Authenticatable
|
||||||
*/
|
*/
|
||||||
protected $user, $admin;
|
protected $user;
|
||||||
|
|
||||||
|
protected $admin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
@ -28,7 +30,7 @@ public function setUp() : void
|
|||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
$this->user = User::factory()->create();
|
$this->user = User::factory()->create();
|
||||||
$this->admin = User::factory()->administrator()->create();
|
$this->admin = User::factory()->administrator()->create();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,7 +79,7 @@ public function test_infos_returns_only_base_collection()
|
|||||||
'Auth guard',
|
'Auth guard',
|
||||||
'webauthn user verification',
|
'webauthn user verification',
|
||||||
'Trusted proxies',
|
'Trusted proxies',
|
||||||
'lastRadarScan'
|
'lastRadarScan',
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ public function test_model_configuration()
|
|||||||
[
|
[
|
||||||
'id' => 'int',
|
'id' => 'int',
|
||||||
'twofaccounts_count' => 'integer',
|
'twofaccounts_count' => 'integer',
|
||||||
'user_id' => 'integer'
|
'user_id' => 'integer',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'deleting' => GroupDeleting::class,
|
'deleting' => GroupDeleting::class,
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
use App\Listeners\RegisterOpenId;
|
use App\Listeners\RegisterOpenId;
|
||||||
use App\Providers\Socialite\OpenId;
|
use App\Providers\Socialite\OpenId;
|
||||||
use Illuminate\Support\Facades\Event;
|
use Illuminate\Support\Facades\Event;
|
||||||
use Laravel\Socialite\SocialiteManager;
|
|
||||||
use Laravel\Socialite\Contracts\Factory as SocialiteFactory;
|
use Laravel\Socialite\Contracts\Factory as SocialiteFactory;
|
||||||
|
use Laravel\Socialite\SocialiteManager;
|
||||||
use PHPUnit\Framework\Attributes\CoversClass;
|
use PHPUnit\Framework\Attributes\CoversClass;
|
||||||
use SocialiteProviders\Manager\SocialiteWasCalled;
|
use SocialiteProviders\Manager\SocialiteWasCalled;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
@ -34,8 +34,8 @@ public function test_model_configuration()
|
|||||||
['*'],
|
['*'],
|
||||||
[],
|
[],
|
||||||
[
|
[
|
||||||
'id' => 'int',
|
'id' => 'int',
|
||||||
'user_id' => 'integer'
|
'user_id' => 'integer',
|
||||||
],
|
],
|
||||||
['deleted' => TwoFAccountDeleted::class],
|
['deleted' => TwoFAccountDeleted::class],
|
||||||
['created_at', 'updated_at'],
|
['created_at', 'updated_at'],
|
||||||
|
Loading…
Reference in New Issue
Block a user