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