mirror of
https://github.com/Bubka/2FAuth.git
synced 2024-11-24 17:23:54 +01:00
Apply Pint fixes
This commit is contained in:
parent
18fe45778a
commit
c00b04e192
@ -6,7 +6,6 @@
|
||||
use App\Api\v1\Requests\SettingUpdateRequest;
|
||||
use App\Facades\Settings;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class SettingController extends Controller
|
||||
{
|
||||
@ -100,7 +99,7 @@ public function destroy(string $settingName)
|
||||
|
||||
// When deleting a setting, it may be an original or an additional one:
|
||||
// - Additional settings are created by administrators to extend 2FAuth, they are not registered in the laravel config object.
|
||||
// They are not nullable so empty string is not allowed.They only exist in the Options table, so it is possible to delete them.
|
||||
// They are not nullable so empty string is not allowed.They only exist in the Options table, so it is possible to delete them.
|
||||
// - Original settings are part of 2FAuth, they are registered in the laravel config object with their default value.
|
||||
// When set by an admin, their custom value is stored in the Options table too. Deleting a custom value in the Options table from here
|
||||
// won't delete the setting at all, so we reject all requests that ask for.
|
||||
|
@ -111,8 +111,9 @@ public function update(TwoFAccountUpdateRequest $request, TwoFAccount $twofaccou
|
||||
if ($twofaccount->group_id != $groupId) {
|
||||
if ((int) $groupId === 0) {
|
||||
TwoFAccounts::withdraw($twofaccount->id);
|
||||
} else {
|
||||
Groups::assign($twofaccount->id, $request->user(), $groupId);
|
||||
}
|
||||
else Groups::assign($twofaccount->id, $request->user(), $groupId);
|
||||
$twofaccount->refresh();
|
||||
}
|
||||
|
||||
@ -151,7 +152,7 @@ public function reorder(TwoFAccountReorderRequest $request)
|
||||
$validated = $request->validated();
|
||||
|
||||
$twofaccounts = TwoFAccount::whereIn('id', $validated['orderedIds'])->get();
|
||||
$this->authorize('updateEach', [new TwoFAccount(), $twofaccounts]);
|
||||
$this->authorize('updateEach', [new TwoFAccount, $twofaccounts]);
|
||||
|
||||
TwoFAccount::setNewOrder($validated['orderedIds']);
|
||||
$orderedIds = $request->user()->twofaccounts->sortBy('order_column')->pluck('id');
|
||||
@ -192,7 +193,7 @@ public function export(TwoFAccountBatchRequest $request)
|
||||
}
|
||||
|
||||
$twofaccounts = TwoFAccounts::export($validated['ids']);
|
||||
$this->authorize('viewEach', [new TwoFAccount(), $twofaccounts]);
|
||||
$this->authorize('viewEach', [new TwoFAccount, $twofaccounts]);
|
||||
|
||||
return new TwoFAccountExportCollection($twofaccounts);
|
||||
}
|
||||
@ -231,7 +232,7 @@ public function otp(Request $request, $id = null)
|
||||
// The request inputs should define an account
|
||||
else {
|
||||
$validatedData = $request->validate((new TwoFAccountStoreRequest)->rules());
|
||||
$twofaccount = new TwoFAccount();
|
||||
$twofaccount = new TwoFAccount;
|
||||
$twofaccount->fillWithOtpParameters($validatedData, true);
|
||||
}
|
||||
|
||||
@ -267,7 +268,7 @@ public function withdraw(TwoFAccountBatchRequest $request)
|
||||
$ids = Helpers::commaSeparatedToArray($validated['ids']);
|
||||
$twofaccounts = TwoFAccount::whereIn('id', $ids)->get();
|
||||
|
||||
$this->authorize('updateEach', [new TwoFAccount(), $twofaccounts]);
|
||||
$this->authorize('updateEach', [new TwoFAccount, $twofaccounts]);
|
||||
|
||||
TwoFAccounts::withdraw($ids);
|
||||
|
||||
@ -307,7 +308,7 @@ public function batchDestroy(TwoFAccountBatchRequest $request)
|
||||
$ids = Helpers::commaSeparatedToArray($validated['ids']);
|
||||
$twofaccounts = TwoFAccount::whereIn('id', $ids)->get();
|
||||
|
||||
$this->authorize('deleteEach', [new TwoFAccount(), $twofaccounts]);
|
||||
$this->authorize('deleteEach', [new TwoFAccount, $twofaccounts]);
|
||||
|
||||
TwoFAccounts::delete($validated['ids']);
|
||||
|
||||
|
@ -34,15 +34,13 @@ public function rules()
|
||||
new IsValidEmailList,
|
||||
],
|
||||
];
|
||||
}
|
||||
else if ($routeParam == 'restrictRule') {
|
||||
} elseif ($routeParam == 'restrictRule') {
|
||||
$rule = [
|
||||
'value' => [
|
||||
new IsValidRegex,
|
||||
],
|
||||
];
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$rule = [
|
||||
'value' => [
|
||||
'required',
|
||||
|
@ -37,7 +37,7 @@ class UserAuthenticationResource extends JsonResource
|
||||
*/
|
||||
public function __construct($resource)
|
||||
{
|
||||
$this->agent = new Agent();
|
||||
$this->agent = new Agent;
|
||||
$this->agent->setUserAgent($resource->user_agent);
|
||||
|
||||
parent::__construct($resource);
|
||||
|
@ -4,12 +4,8 @@
|
||||
|
||||
use App\Facades\Settings;
|
||||
use App\Models\TwoFAccount;
|
||||
use Exception;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\Crypt;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Throwable;
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
@ -75,16 +71,15 @@ public function handle()
|
||||
*/
|
||||
protected function encryptServiceField() : void
|
||||
{
|
||||
$twofaccounts = TwoFAccount::all();
|
||||
$fullyEncryptedTwofaccounts = $twofaccounts->whereNotIn('service', [__('errors.indecipherable')]);
|
||||
$twofaccounts = TwoFAccount::all();
|
||||
$fullyEncryptedTwofaccounts = $twofaccounts->whereNotIn('service', [__('errors.indecipherable')]);
|
||||
$partiallyEncryptedTwofaccounts = $twofaccounts->where('service', __('errors.indecipherable'));
|
||||
|
||||
if ($fullyEncryptedTwofaccounts->count() === $twofaccounts->count()) {
|
||||
$this->components->info('The Service field is fully encrypted');
|
||||
|
||||
return;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$this->newLine();
|
||||
$this->components->warn('The Service field is not fully encrypted, although it should be.');
|
||||
$this->line('ID of corresponding records in the twofaccounts table:');
|
||||
@ -95,16 +90,17 @@ protected function encryptServiceField() : void
|
||||
$partiallyEncryptedTwofaccounts->each(function (TwoFAccount $twofaccount, int $key) use (&$error) {
|
||||
// We don't want to encrypt the Service field with a different APP_KEY
|
||||
// than the one used to encrypt the legacy_uri, account and secret fields, the
|
||||
// model would be inconsistent.
|
||||
// model would be inconsistent.
|
||||
if (str_starts_with($twofaccount->legacy_uri, 'otpauth://')) {
|
||||
$rawServiceValue = $twofaccount->getRawOriginal('service');
|
||||
$rawServiceValue = $twofaccount->getRawOriginal('service');
|
||||
$twofaccount->service = $rawServiceValue;
|
||||
$twofaccount->save();
|
||||
$this->components->task(sprintf('Fixing twofaccount record with ID #%s', $twofaccount->id));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$error += 1;
|
||||
$this->components->task(sprintf('Fixing twofaccount record with ID #%s', $twofaccount->id), function() { return false; });
|
||||
$this->components->task(sprintf('Fixing twofaccount record with ID #%s', $twofaccount->id), function () {
|
||||
return false;
|
||||
});
|
||||
$this->components->error('Wrong encryption key: The current APP_KEY cannot decipher already encrypted fields, encrypting the Service field with this key would lead to inconsistent data encryption');
|
||||
}
|
||||
});
|
||||
@ -116,8 +112,7 @@ protected function encryptServiceField() : void
|
||||
}
|
||||
|
||||
//$this->line('Task completed');
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$this->components->warn('No fix applied.');
|
||||
$this->line('You can re-run this command at any time to fix inconsistent records.');
|
||||
}
|
||||
|
@ -81,8 +81,8 @@ protected function flushDB() : void
|
||||
protected function seedDB(string $seeder) : void
|
||||
{
|
||||
$this->callSilent('db:seed', [
|
||||
'--class' => $seeder,
|
||||
'--no-interaction' => 1
|
||||
'--class' => $seeder,
|
||||
'--no-interaction' => 1,
|
||||
]);
|
||||
|
||||
$this->line('Database seeded');
|
||||
|
@ -9,6 +9,4 @@
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class DbEncryptionException extends Exception
|
||||
{
|
||||
}
|
||||
class DbEncryptionException extends Exception {}
|
||||
|
@ -9,6 +9,4 @@
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class EncryptedMigrationException extends Exception
|
||||
{
|
||||
}
|
||||
class EncryptedMigrationException extends Exception {}
|
||||
|
@ -9,6 +9,4 @@
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class InvalidMigrationDataException extends Exception
|
||||
{
|
||||
}
|
||||
class InvalidMigrationDataException extends Exception {}
|
||||
|
@ -9,6 +9,4 @@
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class InvalidOtpParameterException extends Exception
|
||||
{
|
||||
}
|
||||
class InvalidOtpParameterException extends Exception {}
|
||||
|
@ -9,6 +9,4 @@
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class InvalidQrCodeException extends Exception
|
||||
{
|
||||
}
|
||||
class InvalidQrCodeException extends Exception {}
|
||||
|
@ -9,6 +9,4 @@
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class InvalidSecretException extends Exception
|
||||
{
|
||||
}
|
||||
class InvalidSecretException extends Exception {}
|
||||
|
@ -9,6 +9,4 @@
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class UndecipherableException extends Exception
|
||||
{
|
||||
}
|
||||
class UndecipherableException extends Exception {}
|
||||
|
@ -9,6 +9,4 @@
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class UnsupportedMigrationException extends Exception
|
||||
{
|
||||
}
|
||||
class UnsupportedMigrationException extends Exception {}
|
||||
|
@ -9,6 +9,4 @@
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class UnsupportedOtpTypeException extends Exception
|
||||
{
|
||||
}
|
||||
class UnsupportedOtpTypeException extends Exception {}
|
||||
|
@ -34,7 +34,7 @@ public function create(string $migrationPayload) : Migrator
|
||||
} elseif ($this->isPlainText($migrationPayload)) {
|
||||
return App::make(PlainTextMigrator::class);
|
||||
} else {
|
||||
throw new UnsupportedMigrationException();
|
||||
throw new UnsupportedMigrationException;
|
||||
}
|
||||
}
|
||||
|
||||
@ -130,7 +130,7 @@ private function isAegisJSON(string $migrationPayload) : mixed
|
||||
|
||||
if (Arr::has($json, 'db')) {
|
||||
if (is_string($json['db']) && is_array(Arr::get($json, 'header.slots'))) {
|
||||
throw new EncryptedMigrationException();
|
||||
throw new EncryptedMigrationException;
|
||||
} else {
|
||||
return count(Validator::validate(
|
||||
$json,
|
||||
@ -180,7 +180,7 @@ private function is2FASv2(string $migrationPayload) : mixed
|
||||
|
||||
if (Arr::has($json, 'schemaVersion') && (Arr::has($json, 'services') || Arr::has($json, 'servicesEncrypted'))) {
|
||||
if (Arr::has($json, 'servicesEncrypted')) {
|
||||
throw new EncryptedMigrationException();
|
||||
throw new EncryptedMigrationException;
|
||||
} else {
|
||||
return count(Validator::validate(
|
||||
$json,
|
||||
|
@ -54,7 +54,7 @@ function ($user) use ($request) {
|
||||
$user->save();
|
||||
Log::notice(sprintf('Legacy login restored for user ID #%s', $user->id));
|
||||
} else {
|
||||
throw new AuthenticationException();
|
||||
throw new AuthenticationException;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -16,7 +16,7 @@ class SinglePageController extends Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
event(new ScanForNewReleaseCalled());
|
||||
event(new ScanForNewReleaseCalled);
|
||||
|
||||
$settings = Settings::all()->toJson();
|
||||
$proxyAuth = config('auth.defaults.guard') === 'reverse-proxy-guard' ? true : false;
|
||||
@ -45,9 +45,9 @@ public function index()
|
||||
],
|
||||
'subdirectory' => $subdir,
|
||||
])->toJson(),
|
||||
'urls' => collect([
|
||||
'urls' => collect([
|
||||
'installDocUrl' => $installDocUrl,
|
||||
'ssoDocUrl' => $ssoDocUrl
|
||||
'ssoDocUrl' => $ssoDocUrl,
|
||||
]),
|
||||
'defaultPreferences' => $defaultPreferences,
|
||||
'subdirectory' => $subdir,
|
||||
|
@ -70,7 +70,7 @@ public function latestRelease(Request $request, ReleaseRadarService $releaseRada
|
||||
public function testEmail(Request $request)
|
||||
{
|
||||
try {
|
||||
$request->user()->notify(new TestEmailSettingNotification());
|
||||
$request->user()->notify(new TestEmailSettingNotification);
|
||||
} catch (\Throwable $th) {
|
||||
Log::error($th->getMessage());
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ class CustomCreateFreshApiToken extends CreateFreshApiToken
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return bool
|
||||
*
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
protected function requestShouldReceiveFreshToken($request)
|
||||
|
@ -11,7 +11,7 @@ class ForceJsonResponse
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return mixed
|
||||
*
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
|
@ -24,15 +24,16 @@ public function handle($request, Closure $next)
|
||||
if (Settings::get('useSsoOnly')) {
|
||||
if ($email = $request->input('email', null)) {
|
||||
$user = User::whereEmail($email)->first();
|
||||
} else {
|
||||
$user = Auth::user();
|
||||
}
|
||||
else $user = Auth::user();
|
||||
|
||||
|
||||
if ($user?->isAdministrator()) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
|
||||
Log::notice(sprintf('Request to %s rejected, only Admins can request it while authentication is restricted to SSO only', $request->getPathInfo()));
|
||||
|
||||
|
||||
return response()->json(['message' => __('errors.unsupported_with_sso_only')], Response::HTTP_METHOD_NOT_ALLOWED);
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@ class TrustProxies extends Middleware
|
||||
{
|
||||
/**
|
||||
* TrustProxies constructor.
|
||||
*
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function __construct()
|
||||
|
@ -59,7 +59,8 @@ public function handle(mixed $event) : void
|
||||
if ($user->preferences['notifyOnFailedLogin'] == true) {
|
||||
$user->notify(new FailedLoginNotification($log));
|
||||
}
|
||||
} else {
|
||||
Log::info(sprintf('%s received an event with a null $user member. Nothing has been written to the auth log', self::class));
|
||||
}
|
||||
else Log::info(sprintf('%s received an event with a null $user member. Nothing has been written to the auth log', self::class));
|
||||
}
|
||||
}
|
||||
|
@ -47,12 +47,12 @@ public function handle(mixed $event) : void
|
||||
$ip = config('2fauth.proxy_headers.forIp') ?? $this->request->ip();
|
||||
$userAgent = $this->request->userAgent();
|
||||
$known = $user->authentications()
|
||||
->whereIpAddress($ip)
|
||||
->whereUserAgent($userAgent)
|
||||
->whereLoginSuccessful(true)
|
||||
->whereGuard($event->guard)
|
||||
->first();
|
||||
$newUser = Carbon::parse($user->{$user->getCreatedAtColumn()})->diffInMinutes(Carbon::now(), true) < 1;
|
||||
->whereIpAddress($ip)
|
||||
->whereUserAgent($userAgent)
|
||||
->whereLoginSuccessful(true)
|
||||
->whereGuard($event->guard)
|
||||
->first();
|
||||
$newUser = Carbon::parse($user->{$user->getCreatedAtColumn()})->diffInMinutes(Carbon::now(), true) < 1;
|
||||
|
||||
$log = $user->authentications()->create([
|
||||
'ip_address' => $ip,
|
||||
|
@ -46,11 +46,11 @@ public function handle(mixed $event) : void
|
||||
$ip = config('2fauth.proxy_headers.forIp') ?? $this->request->ip();
|
||||
$userAgent = $this->request->userAgent();
|
||||
$log = $user->authentications()
|
||||
->whereIpAddress($ip)
|
||||
->whereUserAgent($userAgent)
|
||||
->whereGuard($event->guard)
|
||||
->orderByDesc('login_at')
|
||||
->first();
|
||||
->whereIpAddress($ip)
|
||||
->whereUserAgent($userAgent)
|
||||
->whereGuard($event->guard)
|
||||
->orderByDesc('login_at')
|
||||
->first();
|
||||
|
||||
if (! $log) {
|
||||
$log = new AuthLog([
|
||||
|
@ -30,7 +30,7 @@
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
*
|
||||
* Excluded from test coverage as long as 2FAuth does not offer a logout Other Devices feature
|
||||
* See \Illuminate\Auth\SessionGuard::logoutOtherDevices when the time comes
|
||||
*/
|
||||
@ -52,10 +52,10 @@ public function handle(mixed $event) : void
|
||||
$ip = config('2fauth.proxy_headers.forIp') ?? $this->request->ip();
|
||||
$userAgent = $this->request->userAgent();
|
||||
$authLog = $user->authentications()
|
||||
->whereIpAddress($ip)
|
||||
->whereUserAgent($userAgent)
|
||||
->first();
|
||||
$guard = $event->guard;
|
||||
->whereIpAddress($ip)
|
||||
->whereUserAgent($userAgent)
|
||||
->first();
|
||||
$guard = $event->guard;
|
||||
|
||||
if (! $authLog) {
|
||||
$authLog = new AuthLog([
|
||||
|
@ -28,12 +28,12 @@ public function handle(mixed $event) : void
|
||||
$userAgent = $this->request->userAgent();
|
||||
$guard = config('auth.defaults.guard');
|
||||
$known = $user->authentications()
|
||||
->whereIpAddress($ip)
|
||||
->whereUserAgent($userAgent)
|
||||
->whereLoginSuccessful(true)
|
||||
->whereGuard($guard)
|
||||
->first();
|
||||
$newUser = Carbon::parse($user->{$user->getCreatedAtColumn()})->diffInMinutes(Carbon::now(), true) < 1;
|
||||
->whereIpAddress($ip)
|
||||
->whereUserAgent($userAgent)
|
||||
->whereLoginSuccessful(true)
|
||||
->whereGuard($guard)
|
||||
->first();
|
||||
$newUser = Carbon::parse($user->{$user->getCreatedAtColumn()})->diffInMinutes(Carbon::now(), true) < 1;
|
||||
|
||||
$log = $user->authentications()->create([
|
||||
'ip_address' => $ip,
|
||||
|
@ -10,14 +10,14 @@
|
||||
* @property int $id
|
||||
* @property string $key
|
||||
* @property string $value
|
||||
*
|
||||
*
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Option newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Option newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Option query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Option whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Option whereKey($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Option whereValue($value)
|
||||
*
|
||||
*
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Option extends Model
|
||||
|
@ -70,12 +70,13 @@
|
||||
class User extends Authenticatable implements HasLocalePreference, WebAuthnAuthenticatable
|
||||
{
|
||||
use HasApiTokens, Notifiable;
|
||||
|
||||
use HasAuthenticationLog;
|
||||
|
||||
/**
|
||||
* @use HasFactory<UserFactory>
|
||||
*/
|
||||
use HasFactory;
|
||||
|
||||
use WebAuthnAuthentication, WebAuthnManageCredentials;
|
||||
|
||||
/**
|
||||
|
@ -31,7 +31,7 @@ class FailedLoginNotification extends Notification implements ShouldQueue
|
||||
public function __construct(AuthLog $authLog)
|
||||
{
|
||||
$this->authLog = $authLog;
|
||||
$this->agent = new Agent();
|
||||
$this->agent = new Agent;
|
||||
$this->agent->setUserAgent($authLog->user_agent);
|
||||
}
|
||||
|
||||
@ -48,7 +48,7 @@ public function via(mixed $notifiable) : array|string
|
||||
*/
|
||||
public function toMail(mixed $notifiable) : MailMessage
|
||||
{
|
||||
return (new MailMessage())
|
||||
return (new MailMessage)
|
||||
->subject(__('notifications.failed_login.subject'))
|
||||
->markdown('emails.failedLogin', [
|
||||
'account' => $notifiable,
|
||||
|
@ -31,7 +31,7 @@ class SignedInWithNewDeviceNotification extends Notification implements ShouldQu
|
||||
public function __construct(AuthLog $authLog)
|
||||
{
|
||||
$this->authLog = $authLog;
|
||||
$this->agent = new Agent();
|
||||
$this->agent = new Agent;
|
||||
$this->agent->setUserAgent($authLog->user_agent);
|
||||
}
|
||||
|
||||
@ -45,7 +45,7 @@ public function via(mixed $notifiable) : array|string
|
||||
*/
|
||||
public function toMail(mixed $notifiable) : MailMessage
|
||||
{
|
||||
return (new MailMessage())
|
||||
return (new MailMessage)
|
||||
->subject(__('notifications.new_device.subject'))
|
||||
->markdown('emails.signedInWithNewDevice', [
|
||||
'account' => $notifiable,
|
||||
|
@ -26,10 +26,7 @@ class TestEmailSettingNotification extends Notification
|
||||
/**
|
||||
* TestEmailSettingNotification constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
|
||||
}
|
||||
public function __construct() {}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
|
@ -31,7 +31,7 @@ public function before(User $user, string $ability) : ?bool
|
||||
|
||||
/**
|
||||
* Determine whether the user can view the model.
|
||||
*
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* Ignored as long as the before() method restrict the access to admins only
|
||||
*/
|
||||
@ -48,7 +48,7 @@ public function view(User $user, User $model) : bool
|
||||
|
||||
/**
|
||||
* Determine whether the user can create models.
|
||||
*
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* Ignored as long as the before() method restrict the access to admins only
|
||||
*/
|
||||
@ -59,7 +59,7 @@ public function create(?User $user) : bool
|
||||
|
||||
/**
|
||||
* Determine whether the user can update the model.
|
||||
*
|
||||
*
|
||||
* Not ignored because the user can update itself
|
||||
*/
|
||||
public function update(User $user, User $model) : bool
|
||||
@ -75,7 +75,7 @@ public function update(User $user, User $model) : bool
|
||||
|
||||
/**
|
||||
* Determine whether the user can delete the model.
|
||||
*
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* Ignored as long as the before() method restrict the access to admins only
|
||||
*/
|
||||
@ -92,7 +92,7 @@ public function delete(User $user, User $model) : bool
|
||||
|
||||
/**
|
||||
* Determine whether the user can promote the model.
|
||||
*
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* Ignored as long as the before() method restrict the access to admins only
|
||||
*/
|
||||
|
@ -20,19 +20,19 @@ public function register() : void
|
||||
$this->app->bind(MigratorFactoryInterface::class, MigratorFactory::class);
|
||||
|
||||
$this->app->singleton(GoogleAuthMigrator::class, function () {
|
||||
return new GoogleAuthMigrator();
|
||||
return new GoogleAuthMigrator;
|
||||
});
|
||||
|
||||
$this->app->singleton(AegisMigrator::class, function () {
|
||||
return new AegisMigrator();
|
||||
return new AegisMigrator;
|
||||
});
|
||||
|
||||
$this->app->singleton(TwoFASMigrator::class, function () {
|
||||
return new TwoFASMigrator();
|
||||
return new TwoFASMigrator;
|
||||
});
|
||||
|
||||
$this->app->singleton(PlainTextMigrator::class, function () {
|
||||
return new PlainTextMigrator();
|
||||
return new PlainTextMigrator;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,7 @@ class OpenId extends AbstractProvider implements ProviderInterface
|
||||
public function __construct(Request $request, $clientId, $clientSecret, $redirectUrl, $guzzle = [])
|
||||
{
|
||||
$guzzle = array_merge([
|
||||
'proxy' => config('2fauth.config.outgoingProxy')
|
||||
'proxy' => config('2fauth.config.outgoingProxy'),
|
||||
], $guzzle);
|
||||
|
||||
parent::__construct($request, $clientId, $clientSecret, $redirectUrl, $guzzle);
|
||||
@ -72,7 +72,7 @@ protected function getUserByToken($token)
|
||||
*/
|
||||
protected function mapUserToObject(array $user)
|
||||
{
|
||||
return (new User())->setRaw($user)->map([
|
||||
return (new User)->setRaw($user)->map([
|
||||
'email' => $user['email'] ?? null,
|
||||
'email_verified' => $user['email_verified'] ?? null,
|
||||
'name' => $user['name'] ?? null,
|
||||
|
@ -25,15 +25,15 @@ public function register()
|
||||
});
|
||||
|
||||
$this->app->singleton(SettingService::class, function () {
|
||||
return new SettingService();
|
||||
return new SettingService;
|
||||
});
|
||||
|
||||
$this->app->singleton(LogoService::class, function () {
|
||||
return new LogoService();
|
||||
return new LogoService;
|
||||
});
|
||||
|
||||
$this->app->singleton(ReleaseRadarService::class, function () {
|
||||
return new ReleaseRadarService();
|
||||
return new ReleaseRadarService;
|
||||
});
|
||||
|
||||
$this->app->bind(QrReader::class, function ($app, $parameters) {
|
||||
|
@ -14,12 +14,11 @@ public function validate(string $attribute, mixed $value, Closure $fail) : void
|
||||
{
|
||||
try {
|
||||
preg_match('/' . $value . '/', '');
|
||||
|
||||
|
||||
if (preg_last_error() !== PREG_NO_ERROR) {
|
||||
$fail('validation.IsValidRegex')->translate();
|
||||
}
|
||||
}
|
||||
catch (\Throwable $ex) {
|
||||
} catch (\Throwable $ex) {
|
||||
$fail('validation.IsValidRegex')->translate();
|
||||
}
|
||||
}
|
||||
|
@ -5,11 +5,9 @@
|
||||
|
||||
namespace App\Services\Auth;
|
||||
|
||||
use App\Events\VisitedByProxyUser;
|
||||
use Illuminate\Auth\GuardHelpers;
|
||||
use Illuminate\Contracts\Auth\Guard;
|
||||
use Illuminate\Contracts\Auth\UserProvider;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class ReverseProxyGuard implements Guard
|
||||
|
@ -29,7 +29,7 @@ public static function assign($ids, User $user, mixed $targetGroup = null) : voi
|
||||
// TwoFAccountService::withdraw() method.
|
||||
if ($targetGroup === 0 || $targetGroup === '0') {
|
||||
Log::info('Group assignment skipped, no group explicitly requested');
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -38,11 +38,10 @@ public static function assign($ids, User $user, mixed $targetGroup = null) : voi
|
||||
// - No group is passed => We try to identify a destination group through user preferences
|
||||
$group = null;
|
||||
|
||||
if(! is_null($targetGroup)) {
|
||||
if (! is_null($targetGroup)) {
|
||||
if ($targetGroup instanceof Group && $targetGroup->exists && $targetGroup->user_id == $user->id) {
|
||||
$group = $targetGroup;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$group = Group::where('id', (int) $targetGroup)
|
||||
->where('user_id', $user->id)
|
||||
->first();
|
||||
@ -58,7 +57,7 @@ public static function assign($ids, User $user, mixed $targetGroup = null) : voi
|
||||
$twofaccounts = TwoFAccount::find($ids);
|
||||
|
||||
if ($user->cannot('updateEach', [(new TwoFAccount), $twofaccounts])) {
|
||||
throw new AuthorizationException();
|
||||
throw new AuthorizationException;
|
||||
}
|
||||
|
||||
$group->twofaccounts()->saveMany($twofaccounts);
|
||||
|
@ -76,7 +76,7 @@ public function migrate(mixed $migrationPayload) : Collection
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new \Exception();
|
||||
throw new \Exception;
|
||||
}
|
||||
$parameters['iconData'] = base64_decode($otp_parameters['icon']);
|
||||
}
|
||||
@ -95,7 +95,7 @@ public function migrate(mixed $migrationPayload) : Collection
|
||||
Log::debug($exception->getMessage());
|
||||
|
||||
// The token failed to generate a valid account so we create a fake account to be returned.
|
||||
$fakeAccount = new TwoFAccount();
|
||||
$fakeAccount = new TwoFAccount;
|
||||
$fakeAccount->id = TwoFAccount::FAKE_ID;
|
||||
$fakeAccount->otp_type = $otp_parameters['type'] ?? TwoFAccount::TOTP;
|
||||
// Only basic fields are filled to limit the risk of another exception.
|
||||
|
@ -28,7 +28,7 @@ public function migrate(mixed $migrationPayload) : Collection
|
||||
{
|
||||
try {
|
||||
$migrationData = base64_decode(urldecode(Str::replace('otpauth-migration://offline?data=', '', strval($migrationPayload))));
|
||||
$protobuf = new Payload();
|
||||
$protobuf = new Payload;
|
||||
$protobuf->mergeFromString($migrationData);
|
||||
$otpParameters = $protobuf->getOtpParameters();
|
||||
} catch (Exception $ex) {
|
||||
@ -59,7 +59,7 @@ public function migrate(mixed $migrationPayload) : Collection
|
||||
Log::debug($exception->getMessage());
|
||||
|
||||
// The token failed to generate a valid account so we create a fake account to be returned.
|
||||
$fakeAccount = new TwoFAccount();
|
||||
$fakeAccount = new TwoFAccount;
|
||||
$fakeAccount->id = TwoFAccount::FAKE_ID;
|
||||
$fakeAccount->otp_type = $fakeAccount::TOTP;
|
||||
// Only basic fields are filled to limit the risk of another exception.
|
||||
@ -77,7 +77,7 @@ public function migrate(mixed $migrationPayload) : Collection
|
||||
|
||||
/**
|
||||
* Encode into uppercase Base32
|
||||
*
|
||||
*
|
||||
* @throws TypeError
|
||||
*/
|
||||
protected function toBase32(string $str) : string
|
||||
|
@ -37,7 +37,7 @@ public function migrate(mixed $migrationPayload) : Collection
|
||||
Log::debug($exception->getMessage());
|
||||
|
||||
// The token failed to generate a valid account so we create a fake account to be returned.
|
||||
$fakeAccount = new TwoFAccount();
|
||||
$fakeAccount = new TwoFAccount;
|
||||
$fakeAccount->id = TwoFAccount::FAKE_ID;
|
||||
$fakeAccount->otp_type = substr($uri, 10, 4);
|
||||
// Only basic fields are filled to limit the risk of another exception.
|
||||
|
@ -103,7 +103,7 @@ public function migrate(mixed $migrationPayload) : Collection
|
||||
Log::debug($exception->getMessage());
|
||||
|
||||
// The token failed to generate a valid account so we create a fake account to be returned.
|
||||
$fakeAccount = new TwoFAccount();
|
||||
$fakeAccount = new TwoFAccount;
|
||||
$fakeAccount->id = TwoFAccount::FAKE_ID;
|
||||
$fakeAccount->otp_type = $otp_parameters['otp']['tokenType'] ?? TwoFAccount::TOTP;
|
||||
// Only basic fields are filled to limit the risk of another exception.
|
||||
|
@ -93,7 +93,7 @@ public function migrate(mixed $migrationPayload) : Collection
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new \Exception();
|
||||
throw new \Exception;
|
||||
}
|
||||
$parameters['icon_file'] = base64_decode($otp_parameters['icon_file']);
|
||||
}
|
||||
@ -112,7 +112,7 @@ public function migrate(mixed $migrationPayload) : Collection
|
||||
Log::debug($exception->getMessage());
|
||||
|
||||
// The token failed to generate a valid account so we create a fake account to be returned.
|
||||
$fakeAccount = new TwoFAccount();
|
||||
$fakeAccount = new TwoFAccount;
|
||||
$fakeAccount->id = TwoFAccount::FAKE_ID;
|
||||
$fakeAccount->otp_type = $otp_parameters['otp']['tokenType'] ?? TwoFAccount::TOTP;
|
||||
// Only basic fields are filled to limit the risk of another exception.
|
||||
|
@ -40,11 +40,11 @@ public static function encode(string $data)
|
||||
public static function decode(\Illuminate\Http\UploadedFile $file)
|
||||
{
|
||||
$qrcode = app()->make(QrReader::class, [
|
||||
'imgSource' => $file->get(),
|
||||
'sourceType' => QrReader::SOURCE_TYPE_BLOB
|
||||
'imgSource' => $file->get(),
|
||||
'sourceType' => QrReader::SOURCE_TYPE_BLOB,
|
||||
]);
|
||||
|
||||
$text = $qrcode->text();
|
||||
$text = $qrcode->text();
|
||||
|
||||
if (! $text) {
|
||||
$text = $qrcode->text([
|
||||
|
@ -46,8 +46,9 @@ public static function withdraw($ids) : void
|
||||
|
||||
if ($affectedCount) {
|
||||
Log::info(sprintf('TwoFAccounts with IDs #%s withdrawn', implode(',', $ids)));
|
||||
} else {
|
||||
Log::info(sprintf('Cannot find TwoFAccounts to withdraw using ids #%s', implode(',', $ids)));
|
||||
}
|
||||
else Log::info(sprintf('Cannot find TwoFAccounts to withdraw using ids #%s', implode(',', $ids)));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -55,7 +55,7 @@
|
||||
* that can be requested max 10 times per minute by the same IP
|
||||
*/
|
||||
Route::group(['middleware' => ['guest', 'throttle:10,1']], function () {
|
||||
Route::post('user/login', [LoginController::class, 'login'])->name('user.login')->middleware('RejectIfSsoOnlyAndNotForAdmin');;
|
||||
Route::post('user/login', [LoginController::class, 'login'])->name('user.login')->middleware('RejectIfSsoOnlyAndNotForAdmin');
|
||||
Route::post('webauthn/login', [WebAuthnLoginController::class, 'login'])->name('webauthn.login')->middleware('RejectIfSsoOnlyAndNotForAdmin');
|
||||
|
||||
Route::get('/socialite/redirect/{driver}', [SocialiteController::class, 'redirect'])->name('socialite.redirect');
|
||||
@ -100,10 +100,10 @@
|
||||
});
|
||||
|
||||
Route::withoutMiddleware([
|
||||
SubstituteBindings::class,
|
||||
SetLanguage::class,
|
||||
CustomCreateFreshApiToken::class
|
||||
])->get('/up', function () {
|
||||
SubstituteBindings::class,
|
||||
SetLanguage::class,
|
||||
CustomCreateFreshApiToken::class,
|
||||
])->get('/up', function () {
|
||||
//Event::dispatch(new DiagnosingHealth);
|
||||
return view('health');
|
||||
});
|
||||
|
@ -127,7 +127,7 @@ class TwoFAccountControllerTest extends FeatureTestCase
|
||||
'algorithm',
|
||||
'period',
|
||||
'counter',
|
||||
'otp' => self::VALID_EMBEDDED_OTP_RESOURCE_STRUCTURE_FOR_TOTP
|
||||
'otp' => self::VALID_EMBEDDED_OTP_RESOURCE_STRUCTURE_FOR_TOTP,
|
||||
];
|
||||
|
||||
private const VALID_COLLECTION_RESOURCE_STRUCTURE_WITH_OTP = [
|
||||
@ -141,7 +141,7 @@ class TwoFAccountControllerTest extends FeatureTestCase
|
||||
'algorithm',
|
||||
'period',
|
||||
'counter',
|
||||
'otp' => self::VALID_EMBEDDED_OTP_RESOURCE_STRUCTURE_FOR_TOTP
|
||||
'otp' => self::VALID_EMBEDDED_OTP_RESOURCE_STRUCTURE_FOR_TOTP,
|
||||
];
|
||||
|
||||
private const VALID_EXPORT_STRUTURE = [
|
||||
@ -527,7 +527,7 @@ public function test_store_assigns_created_account_to_provided_groupid()
|
||||
$response = $this->actingAs($this->user, 'api-guard')
|
||||
->json('POST', '/api/v1/twofaccounts', array_merge(
|
||||
OtpTestData::ARRAY_OF_FULL_VALID_PARAMETERS_FOR_CUSTOM_TOTP,
|
||||
['group_id' => $this->userGroupA->id]
|
||||
['group_id' => $this->userGroupA->id]
|
||||
))
|
||||
->assertJsonFragment([
|
||||
'group_id' => $this->userGroupA->id,
|
||||
@ -540,7 +540,7 @@ public function test_store_with_assignement_to_missing_groupid_returns_validatio
|
||||
$response = $this->actingAs($this->user, 'api-guard')
|
||||
->json('POST', '/api/v1/twofaccounts', array_merge(
|
||||
OtpTestData::ARRAY_OF_FULL_VALID_PARAMETERS_FOR_CUSTOM_TOTP,
|
||||
['group_id' => 9999999]
|
||||
['group_id' => 9999999]
|
||||
))
|
||||
->assertJsonValidationErrorFor('group_id');
|
||||
}
|
||||
@ -555,7 +555,7 @@ public function test_store_with_assignement_to_null_groupid_does_not_assign_acco
|
||||
$response = $this->actingAs($this->user, 'api-guard')
|
||||
->json('POST', '/api/v1/twofaccounts', array_merge(
|
||||
OtpTestData::ARRAY_OF_FULL_VALID_PARAMETERS_FOR_CUSTOM_TOTP,
|
||||
['group_id' => null]
|
||||
['group_id' => null]
|
||||
))
|
||||
->assertJsonFragment([
|
||||
'group_id' => null,
|
||||
@ -572,7 +572,7 @@ public function test_store_with_assignement_to_null_groupid_is_overriden_by_spec
|
||||
$response = $this->actingAs($this->user, 'api-guard')
|
||||
->json('POST', '/api/v1/twofaccounts', array_merge(
|
||||
OtpTestData::ARRAY_OF_FULL_VALID_PARAMETERS_FOR_CUSTOM_TOTP,
|
||||
['group_id' => null]
|
||||
['group_id' => null]
|
||||
))
|
||||
->assertJsonFragment([
|
||||
'group_id' => $this->user->preferences['defaultGroup'],
|
||||
@ -589,7 +589,7 @@ public function test_store_with_assignement_to_zero_groupid_overrides_specific_d
|
||||
$response = $this->actingAs($this->user, 'api-guard')
|
||||
->json('POST', '/api/v1/twofaccounts', array_merge(
|
||||
OtpTestData::ARRAY_OF_FULL_VALID_PARAMETERS_FOR_CUSTOM_TOTP,
|
||||
['group_id' => 0]
|
||||
['group_id' => 0]
|
||||
))
|
||||
->assertJsonFragment([
|
||||
'group_id' => null,
|
||||
@ -606,7 +606,7 @@ public function test_store_with_assignement_to_provided_groupid_overrides_specif
|
||||
$response = $this->actingAs($this->user, 'api-guard')
|
||||
->json('POST', '/api/v1/twofaccounts', array_merge(
|
||||
OtpTestData::ARRAY_OF_FULL_VALID_PARAMETERS_FOR_CUSTOM_TOTP,
|
||||
['group_id' => $this->userGroupB->id]
|
||||
['group_id' => $this->userGroupB->id]
|
||||
))
|
||||
->assertJsonFragment([
|
||||
'group_id' => $this->userGroupB->id,
|
||||
@ -709,15 +709,15 @@ public function test_update_missing_twofaccount_returns_not_found()
|
||||
public function test_update_with_assignement_to_null_group_returns_success_with_updated_resource()
|
||||
{
|
||||
$this->assertNotEquals(null, $this->twofaccountA->group_id);
|
||||
|
||||
|
||||
$response = $this->actingAs($this->user, 'api-guard')
|
||||
->json('PUT', '/api/v1/twofaccounts/' . $this->twofaccountA->id, array_merge(
|
||||
OtpTestData::ARRAY_OF_FULL_VALID_PARAMETERS_FOR_CUSTOM_TOTP,
|
||||
['group_id' => null]
|
||||
['group_id' => null]
|
||||
))
|
||||
->assertOk()
|
||||
->assertJsonFragment([
|
||||
'group_id' => null
|
||||
'group_id' => null,
|
||||
])
|
||||
->assertJsonFragment(self::JSON_FRAGMENTS_FOR_CUSTOM_TOTP);
|
||||
}
|
||||
@ -726,15 +726,15 @@ public function test_update_with_assignement_to_null_group_returns_success_with_
|
||||
public function test_update_with_assignement_to_zero_group_returns_success_with_updated_resource()
|
||||
{
|
||||
$this->assertNotEquals(null, $this->twofaccountA->group_id);
|
||||
|
||||
|
||||
$response = $this->actingAs($this->user, 'api-guard')
|
||||
->json('PUT', '/api/v1/twofaccounts/' . $this->twofaccountA->id, array_merge(
|
||||
OtpTestData::ARRAY_OF_FULL_VALID_PARAMETERS_FOR_CUSTOM_TOTP,
|
||||
['group_id' => 0]
|
||||
['group_id' => 0]
|
||||
))
|
||||
->assertOk()
|
||||
->assertJsonFragment([
|
||||
'group_id' => null
|
||||
'group_id' => null,
|
||||
])
|
||||
->assertJsonFragment(self::JSON_FRAGMENTS_FOR_CUSTOM_TOTP);
|
||||
}
|
||||
@ -743,15 +743,15 @@ public function test_update_with_assignement_to_zero_group_returns_success_with_
|
||||
public function test_update_with_assignement_to_new_groupid_returns_success_with_updated_resource()
|
||||
{
|
||||
$this->assertEquals($this->userGroupA->id, $this->twofaccountA->group_id);
|
||||
|
||||
|
||||
$response = $this->actingAs($this->user, 'api-guard')
|
||||
->json('PUT', '/api/v1/twofaccounts/' . $this->twofaccountA->id, array_merge(
|
||||
OtpTestData::ARRAY_OF_FULL_VALID_PARAMETERS_FOR_CUSTOM_TOTP,
|
||||
['group_id' => $this->userGroupB->id]
|
||||
['group_id' => $this->userGroupB->id]
|
||||
))
|
||||
->assertOk()
|
||||
->assertJsonFragment([
|
||||
'group_id' => $this->userGroupB->id
|
||||
'group_id' => $this->userGroupB->id,
|
||||
])
|
||||
->assertJsonFragment(self::JSON_FRAGMENTS_FOR_CUSTOM_TOTP);
|
||||
}
|
||||
@ -762,7 +762,7 @@ public function test_update_with_assignement_to_missing_groupid_returns_validati
|
||||
$response = $this->actingAs($this->user, 'api-guard')
|
||||
->json('PUT', '/api/v1/twofaccounts/' . $this->twofaccountA->id, array_merge(
|
||||
OtpTestData::ARRAY_OF_FULL_VALID_PARAMETERS_FOR_CUSTOM_TOTP,
|
||||
['group_id' => 9999999]
|
||||
['group_id' => 9999999]
|
||||
))
|
||||
->assertJsonValidationErrorFor('group_id');
|
||||
}
|
||||
|
@ -335,10 +335,10 @@ public function test_store_another_user_returns_forbidden() : void
|
||||
public function test_revokePATs_flushes_pats()
|
||||
{
|
||||
Artisan::call('passport:install', [
|
||||
'--verbose' => 2,
|
||||
'--no-interaction' => 1
|
||||
'--verbose' => 2,
|
||||
'--no-interaction' => 1,
|
||||
]);
|
||||
|
||||
|
||||
$tokenRepository = app(TokenRepository::class);
|
||||
|
||||
$this->actingAs($this->user, 'api-guard')
|
||||
|
@ -1,13 +1,12 @@
|
||||
<?php declare(strict_types=1);
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Tests\Api\v1\Requests\DataProviders;
|
||||
|
||||
final class TwoFAccountDataProvider
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static function validIdsProvider(): array
|
||||
public static function validIdsProvider() : array
|
||||
{
|
||||
return [
|
||||
[[
|
||||
@ -19,10 +18,7 @@ public static function validIdsProvider(): array
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static function invalidIdsProvider(): array
|
||||
public static function invalidIdsProvider() : array
|
||||
{
|
||||
return [
|
||||
[[
|
||||
@ -64,10 +60,7 @@ public static function invalidIdsProvider(): array
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static function validIsAdminProvider(): array
|
||||
public static function validIsAdminProvider() : array
|
||||
{
|
||||
return [
|
||||
[[
|
||||
@ -85,10 +78,7 @@ public static function validIsAdminProvider(): array
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static function invalidIsAdminProvider(): array
|
||||
public static function invalidIsAdminProvider() : array
|
||||
{
|
||||
return [
|
||||
[[
|
||||
@ -108,4 +98,4 @@ public static function invalidIsAdminProvider(): array
|
||||
]],
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new GroupAssignRequest();
|
||||
$request = new GroupAssignRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -35,7 +35,7 @@ public function test_user_is_authorized()
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new GroupAssignRequest();
|
||||
$request = new GroupAssignRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -59,7 +59,7 @@ public static function provideValidData() : array
|
||||
#[DataProvider('provideInvalidData')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new GroupAssignRequest();
|
||||
$request = new GroupAssignRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -43,7 +43,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new GroupStoreRequest();
|
||||
$request = new GroupStoreRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
namespace Tests\Api\v1\Requests;
|
||||
|
||||
use App\Api\v1\Requests\GroupAssignRequest;
|
||||
use App\Api\v1\Requests\IconFetchRequest;
|
||||
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
@ -27,7 +26,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new IconFetchRequest();
|
||||
$request = new IconFetchRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -36,7 +35,7 @@ public function test_user_is_authorized()
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new IconFetchRequest();
|
||||
$request = new IconFetchRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -64,7 +63,7 @@ public static function provideValidData() : array
|
||||
#[DataProvider('provideInvalidData')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new IconFetchRequest();
|
||||
$request = new IconFetchRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -27,7 +27,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new QrCodeDecodeRequest();
|
||||
$request = new QrCodeDecodeRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -36,7 +36,7 @@ public function test_user_is_authorized()
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new QrCodeDecodeRequest();
|
||||
$request = new QrCodeDecodeRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -60,7 +60,7 @@ public static function provideValidData() : array
|
||||
#[DataProvider('provideInvalidData')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new QrCodeDecodeRequest();
|
||||
$request = new QrCodeDecodeRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -29,7 +29,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new SettingStoreRequest();
|
||||
$request = new SettingStoreRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -38,7 +38,7 @@ public function test_user_is_authorized()
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new SettingStoreRequest();
|
||||
$request = new SettingStoreRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -71,7 +71,7 @@ public function test_invalid_data(array $data) : void
|
||||
{
|
||||
Settings::set(self::UNIQUE_KEY, 'uniqueValue');
|
||||
|
||||
$request = new SettingStoreRequest();
|
||||
$request = new SettingStoreRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -26,7 +26,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new SettingUpdateRequest();
|
||||
$request = new SettingUpdateRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -35,7 +35,7 @@ public function test_user_is_authorized()
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new SettingUpdateRequest();
|
||||
$request = new SettingUpdateRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -63,7 +63,7 @@ public static function provideValidData() : array
|
||||
#[DataProvider('provideInvalidData')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new SettingUpdateRequest();
|
||||
$request = new SettingUpdateRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -27,7 +27,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new TwoFAccountBatchRequest();
|
||||
$request = new TwoFAccountBatchRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -36,7 +36,7 @@ public function test_user_is_authorized()
|
||||
#[DataProviderExternal(TwoFAccountDataProvider::class, 'validIdsProvider')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new TwoFAccountBatchRequest();
|
||||
$request = new TwoFAccountBatchRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -46,7 +46,7 @@ public function test_valid_data(array $data) : void
|
||||
#[DataProviderExternal(TwoFAccountDataProvider::class, 'invalidIdsProvider')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new TwoFAccountBatchRequest();
|
||||
$request = new TwoFAccountBatchRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -26,7 +26,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new TwoFAccountDynamicRequest();
|
||||
$request = new TwoFAccountDynamicRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -34,8 +34,8 @@ public function test_user_is_authorized()
|
||||
#[Test]
|
||||
public function test_returns_TwoFAccountUriRequest_rules_when_has_uri_input()
|
||||
{
|
||||
$twofaccountUriRequest = new TwoFAccountUriRequest();
|
||||
$request = new TwoFAccountDynamicRequest();
|
||||
$twofaccountUriRequest = new TwoFAccountUriRequest;
|
||||
$request = new TwoFAccountDynamicRequest;
|
||||
$request->merge(['uri' => 'uristring']);
|
||||
|
||||
$this->assertEquals($twofaccountUriRequest->rules(), $request->rules());
|
||||
@ -44,8 +44,8 @@ public function test_returns_TwoFAccountUriRequest_rules_when_has_uri_input()
|
||||
#[Test]
|
||||
public function test_returns_TwoFAccountStoreRequest_rules_otherwise()
|
||||
{
|
||||
$twofaccountStoreRequest = new TwoFAccountStoreRequest();
|
||||
$request = new TwoFAccountDynamicRequest();
|
||||
$twofaccountStoreRequest = new TwoFAccountStoreRequest;
|
||||
$request = new TwoFAccountDynamicRequest;
|
||||
|
||||
$this->assertEquals($twofaccountStoreRequest->rules(), $request->rules());
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new TwoFAccountImportRequest();
|
||||
$request = new TwoFAccountImportRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -35,7 +35,7 @@ public function test_user_is_authorized()
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new TwoFAccountImportRequest();
|
||||
$request = new TwoFAccountImportRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -57,7 +57,7 @@ public static function provideValidData() : array
|
||||
#[DataProvider('provideInvalidData')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new TwoFAccountImportRequest();
|
||||
$request = new TwoFAccountImportRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -27,16 +27,16 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new TwoFAccountIndexRequest();
|
||||
$request = new TwoFAccountIndexRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
|
||||
|
||||
#[Test]
|
||||
#[DataProviderExternal(TwoFAccountDataProvider::class, 'validIdsProvider')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new TwoFAccountIndexRequest();
|
||||
$request = new TwoFAccountIndexRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -46,7 +46,7 @@ public function test_valid_data(array $data) : void
|
||||
#[DataProviderExternal(TwoFAccountDataProvider::class, 'invalidIdsProvider')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new TwoFAccountIndexRequest();
|
||||
$request = new TwoFAccountIndexRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -26,7 +26,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new TwoFAccountReorderRequest();
|
||||
$request = new TwoFAccountReorderRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -35,7 +35,7 @@ public function test_user_is_authorized()
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new TwoFAccountReorderRequest();
|
||||
$request = new TwoFAccountReorderRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -60,7 +60,7 @@ public static function provideValidData() : array
|
||||
#[DataProvider('provideInvalidData')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new TwoFAccountReorderRequest();
|
||||
$request = new TwoFAccountReorderRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -28,7 +28,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new TwoFAccountStoreRequest();
|
||||
$request = new TwoFAccountStoreRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -37,7 +37,7 @@ public function test_user_is_authorized()
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new TwoFAccountStoreRequest();
|
||||
$request = new TwoFAccountStoreRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -111,7 +111,7 @@ public static function provideValidData() : array
|
||||
#[DataProvider('provideInvalidData')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new TwoFAccountStoreRequest();
|
||||
$request = new TwoFAccountStoreRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -28,7 +28,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new TwoFAccountUpdateRequest();
|
||||
$request = new TwoFAccountUpdateRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -37,7 +37,7 @@ public function test_user_is_authorized()
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new TwoFAccountUpdateRequest();
|
||||
$request = new TwoFAccountUpdateRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -87,7 +87,7 @@ public static function provideValidData() : array
|
||||
#[DataProvider('provideInvalidData')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new TwoFAccountUpdateRequest();
|
||||
$request = new TwoFAccountUpdateRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -26,7 +26,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new TwoFAccountUriRequest();
|
||||
$request = new TwoFAccountUriRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -35,7 +35,7 @@ public function test_user_is_authorized()
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new TwoFAccountUriRequest();
|
||||
$request = new TwoFAccountUriRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -64,7 +64,7 @@ public static function provideValidData() : array
|
||||
#[DataProvider('provideInvalidData')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new TwoFAccountUriRequest();
|
||||
$request = new TwoFAccountUriRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -26,7 +26,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new UserManagerPromoteRequest();
|
||||
$request = new UserManagerPromoteRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -35,7 +35,7 @@ public function test_user_is_authorized()
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new UserManagerPromoteRequest();
|
||||
$request = new UserManagerPromoteRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -66,7 +66,7 @@ public static function provideValidData() : array
|
||||
#[DataProvider('provideInvalidData')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new UserManagerPromoteRequest();
|
||||
$request = new UserManagerPromoteRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -9,7 +9,6 @@
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\DataProvider;
|
||||
use PHPUnit\Framework\Attributes\DataProviderExternal;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use Tests\FeatureTestCase;
|
||||
|
||||
@ -28,7 +27,7 @@ public function test_admin_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new UserManagerStoreRequest();
|
||||
$request = new UserManagerStoreRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -41,8 +40,8 @@ public function test_valid_data(array $data) : void
|
||||
'name' => 'Jane',
|
||||
'email' => 'jane@example.com',
|
||||
]);
|
||||
|
||||
$request = new UserManagerStoreRequest();
|
||||
|
||||
$request = new UserManagerStoreRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -80,7 +79,7 @@ public function test_invalid_data(array $data) : void
|
||||
'email' => 'john@example.com',
|
||||
]);
|
||||
|
||||
$request = new UserManagerStoreRequest();
|
||||
$request = new UserManagerStoreRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -21,7 +21,7 @@ class FixServiceFieldEncryptionTest extends FeatureTestCase
|
||||
* The name of the migration that changed the data this command will try to fix
|
||||
*/
|
||||
protected string $relatedMigration = '2024_08_08_133136_encrypt_twofaccount_service_field';
|
||||
|
||||
|
||||
/**
|
||||
* @var \App\Models\User|\Illuminate\Contracts\Auth\Authenticatable
|
||||
*/
|
||||
@ -123,10 +123,10 @@ public function test_it_encrypts_the_field_of_invalid_records_only()
|
||||
Settings::set('useEncryption', true);
|
||||
|
||||
$expectedServiceName = 'myService';
|
||||
$twofaccounts = TwoFAccount::factory()->for($this->user)->count(3)->create([
|
||||
'service' => $expectedServiceName
|
||||
$twofaccounts = TwoFAccount::factory()->for($this->user)->count(3)->create([
|
||||
'service' => $expectedServiceName,
|
||||
]);
|
||||
|
||||
|
||||
$testedAccount = $twofaccounts[2];
|
||||
DB::table('twofaccounts')->where('id', $testedAccount->id)->update(['service' => $expectedServiceName]);
|
||||
|
||||
@ -141,7 +141,7 @@ public function test_it_encrypts_the_field_of_invalid_records_only()
|
||||
->assertSuccessful();
|
||||
|
||||
$testedAccount->refresh();
|
||||
|
||||
|
||||
$this->assertEquals($expectedServiceName, $twofaccounts[0]->service);
|
||||
$this->assertEquals($expectedServiceName, $twofaccounts[1]->service);
|
||||
$this->assertEquals($expectedServiceName, $testedAccount->service);
|
||||
@ -153,10 +153,10 @@ public function test_it_does_not_encrypt_the_record_if_encryption_is_not_consist
|
||||
Settings::set('useEncryption', true);
|
||||
|
||||
$expectedServiceName = 'myService';
|
||||
$twofaccounts = TwoFAccount::factory()->for($this->user)->count(3)->create([
|
||||
'service' => $expectedServiceName
|
||||
$twofaccounts = TwoFAccount::factory()->for($this->user)->count(3)->create([
|
||||
'service' => $expectedServiceName,
|
||||
]);
|
||||
|
||||
|
||||
$testedAccount = $twofaccounts[2];
|
||||
|
||||
DB::table('twofaccounts')->where('id', $testedAccount->id)->update(['legacy_uri' => 'indecipherable_payload']);
|
||||
@ -173,7 +173,7 @@ public function test_it_does_not_encrypt_the_record_if_encryption_is_not_consist
|
||||
->expectsOutput('1 record could not be fixed, see log above for details.');
|
||||
|
||||
$testedAccount->refresh();
|
||||
|
||||
|
||||
$this->assertEquals($expectedServiceName, $twofaccounts[0]->service);
|
||||
$this->assertEquals($expectedServiceName, $twofaccounts[1]->service);
|
||||
$this->assertEquals(__('errors.indecipherable'), $testedAccount->service);
|
||||
|
@ -3,7 +3,6 @@
|
||||
namespace Tests\Feature\Console;
|
||||
|
||||
use App\Console\Commands\Install;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Jackiedo\DotenvEditor\DotenvEditor;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
@ -20,7 +19,7 @@ class InstallTest extends FeatureTestCase
|
||||
const PASSPORT_CREATE_CLIENTS_CONFIRMATION = 'Would you like to create the "personal access" and "password grant" clients?';
|
||||
|
||||
const TWOFAUTH_REVIEW_ENV_VAR_CONFIRMATION = 'Existing .env file found. Do you wish to review its vars?';
|
||||
|
||||
|
||||
#[Test]
|
||||
public function test_install_completes()
|
||||
{
|
||||
@ -101,7 +100,7 @@ public function test_install_fails_with_link_to_online_help()
|
||||
{
|
||||
$mock = $this->mock(DotenvEditor::class);
|
||||
$mock->shouldReceive('load')
|
||||
->andThrow(new \Exception());
|
||||
->andThrow(new \Exception);
|
||||
|
||||
$this->artisan('2fauth:install')
|
||||
->expectsOutputToContain(config('2fauth.installDocUrl'))
|
||||
|
@ -21,10 +21,10 @@ public function test_reset_demo_without_demo_mode_succeeded()
|
||||
public function test_reset_demo_succeeded()
|
||||
{
|
||||
Artisan::call('passport:install', [
|
||||
'--verbose' => 2,
|
||||
'--no-interaction' => 1
|
||||
'--verbose' => 2,
|
||||
'--no-interaction' => 1,
|
||||
]);
|
||||
|
||||
|
||||
Config::set('2fauth.config.isDemoApp', true);
|
||||
|
||||
$this->artisan('2fauth:reset-demo')
|
||||
|
@ -64,7 +64,7 @@ class LoginTest extends FeatureTestCase
|
||||
private const PASSWORD = 'password';
|
||||
|
||||
private const WRONG_PASSWORD = 'wrong_password';
|
||||
|
||||
|
||||
private const USER_NAME = 'John';
|
||||
|
||||
private const USER_EMAIL = 'john@example.com';
|
||||
@ -383,11 +383,11 @@ public function test_successful_web_logout_is_logged()
|
||||
'email' => $this->user->email,
|
||||
'password' => self::PASSWORD,
|
||||
])->assertOk();
|
||||
|
||||
|
||||
$this->actingAs($this->user, self::WEB_GUARD)
|
||||
->json('GET', '/user/logout')
|
||||
->assertOk();
|
||||
|
||||
|
||||
$authlog = $this->user->latestAuthentication()->first();
|
||||
|
||||
$this->assertEquals($this->user->id, $authlog->authenticatable_id);
|
||||
@ -426,7 +426,7 @@ public function test_reverse_proxy_access_is_logged()
|
||||
$this->app['auth']->shouldUse(self::REVERSE_PROXY_GUARD);
|
||||
|
||||
$this->json('GET', '/api/v1/groups', [], [
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('auth_logs', [
|
||||
@ -451,11 +451,11 @@ public function test_reverse_proxy_access_is_logged_only_once_during_a_quarter()
|
||||
$this->app['auth']->shouldUse(self::REVERSE_PROXY_GUARD);
|
||||
|
||||
$this->json('GET', '/api/v1/groups', [], [
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
]);
|
||||
|
||||
$this->json('GET', '/api/v1/groups', [], [
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
]);
|
||||
|
||||
$this->assertDatabaseCount('auth_logs', 1);
|
||||
@ -463,7 +463,7 @@ public function test_reverse_proxy_access_is_logged_only_once_during_a_quarter()
|
||||
$this->travel(16)->minutes();
|
||||
|
||||
$this->json('GET', '/api/v1/groups', [], [
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
]);
|
||||
|
||||
$this->assertDatabaseCount('auth_logs', 2);
|
||||
@ -473,7 +473,7 @@ public function test_reverse_proxy_access_is_logged_only_once_during_a_quarter()
|
||||
public function test_reverse_proxy_access_sends_new_device_notification()
|
||||
{
|
||||
Notification::fake();
|
||||
|
||||
|
||||
Config::set('auth.auth_proxy_headers.user', 'HTTP_REMOTE_USER');
|
||||
|
||||
$user = User::factory()->create([
|
||||
@ -490,7 +490,7 @@ public function test_reverse_proxy_access_sends_new_device_notification()
|
||||
$this->travelTo(Carbon::now()->subMinutes(2));
|
||||
|
||||
$this->json('GET', '/api/v1/groups', [], [
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
]);
|
||||
|
||||
Notification::assertSentTo($user, SignedInWithNewDeviceNotification::class);
|
||||
@ -500,7 +500,7 @@ public function test_reverse_proxy_access_sends_new_device_notification()
|
||||
public function test_reverse_proxy_access_does_not_send_new_device_notification_if_user_disabled_it()
|
||||
{
|
||||
Notification::fake();
|
||||
|
||||
|
||||
Config::set('auth.auth_proxy_headers.user', 'HTTP_REMOTE_USER');
|
||||
|
||||
$user = User::factory()->create([
|
||||
@ -517,7 +517,7 @@ public function test_reverse_proxy_access_does_not_send_new_device_notification_
|
||||
$this->travelTo(Carbon::now()->subMinutes(2));
|
||||
|
||||
$this->json('GET', '/api/v1/groups', [], [
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
]);
|
||||
|
||||
Notification::assertNothingSentTo($user);
|
||||
@ -527,7 +527,7 @@ public function test_reverse_proxy_access_does_not_send_new_device_notification_
|
||||
public function test_reverse_proxy_does_not_send_new_device_notification_if_user_is_considered_new()
|
||||
{
|
||||
Notification::fake();
|
||||
|
||||
|
||||
Config::set('auth.auth_proxy_headers.user', 'HTTP_REMOTE_USER');
|
||||
|
||||
$user = User::factory()->create([
|
||||
@ -541,7 +541,7 @@ public function test_reverse_proxy_does_not_send_new_device_notification_if_user
|
||||
$this->app['auth']->shouldUse(self::REVERSE_PROXY_GUARD);
|
||||
|
||||
$this->json('GET', '/api/v1/groups', [], [
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
]);
|
||||
|
||||
Notification::assertNothingSentTo($user);
|
||||
|
@ -23,7 +23,7 @@ class PasswordControllerTest extends FeatureTestCase
|
||||
private const PASSWORD = 'password';
|
||||
|
||||
private const NEW_PASSWORD = 'newPassword';
|
||||
|
||||
|
||||
private const USER_NAME = 'John';
|
||||
|
||||
private const USER_EMAIL = 'john@example.com';
|
||||
@ -90,14 +90,14 @@ public function test_update_pwd_of_reverse_proxy_user_return_bad_request()
|
||||
]);
|
||||
|
||||
$this->app['auth']->shouldUse(self::REVERSE_PROXY_GUARD);
|
||||
|
||||
|
||||
$response = $this->json('PATCH', '/user/password', [
|
||||
'currentPassword' => self::NEW_PASSWORD,
|
||||
'password' => self::NEW_PASSWORD,
|
||||
'password_confirmation' => self::NEW_PASSWORD,
|
||||
], [
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
])
|
||||
'currentPassword' => self::NEW_PASSWORD,
|
||||
'password' => self::NEW_PASSWORD,
|
||||
'password_confirmation' => self::NEW_PASSWORD,
|
||||
], [
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
])
|
||||
->assertStatus(405)
|
||||
->assertJsonStructure([
|
||||
'message',
|
||||
|
@ -116,13 +116,13 @@ public static function ssoConfigVarProvider()
|
||||
{
|
||||
return [
|
||||
'TOKEN_URL' => [
|
||||
'token_url'
|
||||
'token_url',
|
||||
],
|
||||
'AUTHORIZE_URL' => [
|
||||
'authorize_url'
|
||||
'authorize_url',
|
||||
],
|
||||
'USERINFO_URL' => [
|
||||
'userinfo_url'
|
||||
'userinfo_url',
|
||||
],
|
||||
];
|
||||
}
|
||||
@ -286,7 +286,7 @@ public function test_callback_redirects_to_error_when_sso_provider_reject_auth()
|
||||
$newSocialiteUser->email = 'jane@provider.com';
|
||||
|
||||
Socialite::shouldReceive('driver->user')
|
||||
->andThrow(new Exception());
|
||||
->andThrow(new Exception);
|
||||
|
||||
$response = $this->get('/socialite/callback/github', ['driver' => 'github']);
|
||||
|
||||
|
@ -107,7 +107,7 @@ public function test_sendRecoveryEmail_does_not_send_anything_to_not_WebAuthnAut
|
||||
{
|
||||
$mock = $this->mock(\App\Extensions\WebauthnCredentialBroker::class)->makePartial();
|
||||
$mock->shouldReceive('getUser')
|
||||
->andReturn(new \Illuminate\Foundation\Auth\User());
|
||||
->andReturn(new \Illuminate\Foundation\Auth\User);
|
||||
|
||||
Notification::fake();
|
||||
|
||||
|
@ -132,7 +132,7 @@ public function test_webauthn_login_returns_success()
|
||||
public function test_webauthn_login_of_admin_returns_success_even_with_sso_only_enabled()
|
||||
{
|
||||
Settings::set('useSsoOnly', true);
|
||||
|
||||
|
||||
$this->user->promoteToAdministrator(true);
|
||||
$this->user->save();
|
||||
|
||||
@ -151,7 +151,7 @@ public function test_webauthn_login_of_admin_returns_success_even_with_sso_only_
|
||||
->assertJsonStructure([
|
||||
'preferences',
|
||||
]);
|
||||
|
||||
|
||||
$this->user->promoteToAdministrator(false);
|
||||
$this->user->save();
|
||||
}
|
||||
@ -160,7 +160,7 @@ public function test_webauthn_login_of_admin_returns_success_even_with_sso_only_
|
||||
public function test_webauthn_login_sends_new_device_notification_to_existing_user()
|
||||
{
|
||||
Notification::fake();
|
||||
|
||||
|
||||
$this->user['preferences->notifyOnNewAuthDevice'] = 1;
|
||||
$this->user->save();
|
||||
|
||||
@ -186,7 +186,7 @@ public function test_webauthn_login_sends_new_device_notification_to_existing_us
|
||||
public function test_webauthn_login_does_not_send_new_device_notification_to_new_user()
|
||||
{
|
||||
Notification::fake();
|
||||
|
||||
|
||||
$this->user['preferences->notifyOnNewAuthDevice'] = 1;
|
||||
$this->user->save();
|
||||
|
||||
@ -203,8 +203,8 @@ public function test_webauthn_login_does_not_send_new_device_notification_to_new
|
||||
public function test_webauthn_login_does_not_send_new_device_notification_if_user_disabled_it()
|
||||
{
|
||||
Notification::fake();
|
||||
|
||||
$this->user['preferences->notifyOnNewAuthDevice'] =01;
|
||||
|
||||
$this->user['preferences->notifyOnNewAuthDevice'] = 0;
|
||||
$this->user->save();
|
||||
|
||||
$this->createWebauthnCredential(self::CREDENTIAL_ID_ALT, $this->user->id, self::USER_ID_ALT);
|
||||
|
@ -39,7 +39,7 @@ public function test_uses_attestation_with_fastRegistration_request() : void
|
||||
$request = $this->mock(AttestationRequest::class);
|
||||
|
||||
$request->expects('fastRegistration')->andReturnSelf();
|
||||
$request->expects('toCreate')->andReturn(new JsonTransport());
|
||||
$request->expects('toCreate')->andReturn(new JsonTransport);
|
||||
|
||||
$this->actingAs($this->user, 'web-guard')
|
||||
->json('POST', '/webauthn/register/options')
|
||||
@ -54,7 +54,7 @@ public function test_uses_attestation_with_secureRegistration_request() : void
|
||||
$request = $this->mock(AttestationRequest::class);
|
||||
|
||||
$request->expects('secureRegistration')->andReturnSelf();
|
||||
$request->expects('toCreate')->andReturn(new JsonTransport());
|
||||
$request->expects('toCreate')->andReturn(new JsonTransport);
|
||||
|
||||
$this->actingAs($this->user, 'web-guard')
|
||||
->json('POST', '/webauthn/register/options')
|
||||
|
@ -28,8 +28,7 @@ public function test_users_are_rejected()
|
||||
$request = Request::create('/admin', 'GET');
|
||||
$middleware = new AdminOnly;
|
||||
|
||||
$response = $middleware->handle($request, function () {
|
||||
});
|
||||
$response = $middleware->handle($request, function () {});
|
||||
}
|
||||
|
||||
#[Test]
|
||||
@ -45,8 +44,7 @@ public function test_admins_pass()
|
||||
$request = Request::create('/admin', 'GET');
|
||||
$middleware = new AdminOnly;
|
||||
|
||||
$response = $middleware->handle($request, function () {
|
||||
});
|
||||
$response = $middleware->handle($request, function () {});
|
||||
|
||||
$this->assertNull($response);
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ public function test_it_overrides_locale_when_auth_is_successful()
|
||||
{
|
||||
Config::set('auth.auth_proxy_headers.user', 'HTTP_REMOTE_USER');
|
||||
Config::set('auth.auth_proxy_headers.email', 'HTTP_REMOTE_EMAIL');
|
||||
|
||||
|
||||
$this->app['auth']->shouldUse('reverse-proxy-guard');
|
||||
|
||||
$lang = 'fr';
|
||||
@ -71,7 +71,7 @@ public function test_it_overrides_locale_when_auth_is_successful()
|
||||
$user->save();
|
||||
|
||||
$this->json('GET', '/api/v1/groups', [], [
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
'HTTP_REMOTE_USER' => self::USER_NAME,
|
||||
]);
|
||||
|
||||
$this->assertEquals($lang, App::getLocale());
|
||||
|
@ -36,7 +36,7 @@ public function setUp() : void
|
||||
|
||||
$this->user = User::factory()->create();
|
||||
$this->admin = User::factory()->administrator()->create([
|
||||
'password' => self::PASSWORD
|
||||
'password' => self::PASSWORD,
|
||||
]);
|
||||
|
||||
Settings::set('useSsoOnly', true);
|
||||
|
@ -67,7 +67,7 @@ public function test_it_applies_fallback_locale_if_header_ask_for_several_unsupp
|
||||
|
||||
$this->assertEquals(self::IS_FR, App::getLocale());
|
||||
}
|
||||
|
||||
|
||||
#[Test]
|
||||
public function test_it_applies_fallback_locale_if_header_ask_for_wildcard()
|
||||
{
|
||||
@ -121,9 +121,9 @@ public function test_it_ignores_unsupported_language_from_header()
|
||||
#[Test]
|
||||
public function test_user_preference_overrides_header()
|
||||
{
|
||||
$this->user = new User;
|
||||
$this->user = new User;
|
||||
$this->user['preferences->lang'] = self::IS_FR;
|
||||
|
||||
|
||||
$this->actingAs($this->user)->json('GET', '/', [], ['Accept-Language' => self::IS_DE]);
|
||||
|
||||
$this->assertEquals(self::IS_FR, App::getLocale());
|
||||
@ -132,9 +132,9 @@ public function test_user_preference_overrides_header()
|
||||
#[Test]
|
||||
public function test_user_preference_applies_header()
|
||||
{
|
||||
$this->user = new User;
|
||||
$this->user = new User;
|
||||
$this->user['preferences->lang'] = 'browser';
|
||||
|
||||
|
||||
$this->actingAs($this->user)->json('GET', '/', [], ['Accept-Language' => self::IS_DE]);
|
||||
|
||||
$this->assertEquals(self::IS_DE, App::getLocale());
|
||||
@ -145,9 +145,9 @@ public function test_user_preference_overrides_fallback()
|
||||
{
|
||||
Config::set('app.fallback_locale', self::IS_DE);
|
||||
|
||||
$this->user = new User;
|
||||
$this->user = new User;
|
||||
$this->user['preferences->lang'] = self::IS_FR;
|
||||
|
||||
|
||||
$this->actingAs($this->user)->json('GET', '/', [], ['Accept-Language' => null]);
|
||||
|
||||
$this->assertEquals(self::IS_FR, App::getLocale());
|
||||
|
@ -22,7 +22,7 @@ class LoginRequestTest extends FeatureTestCase
|
||||
#[Test]
|
||||
public function test_user_is_authorized()
|
||||
{
|
||||
$request = new LoginRequest();
|
||||
$request = new LoginRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -35,7 +35,7 @@ public function test_valid_data(array $data) : void
|
||||
'email' => 'JOHN.DOE@example.com',
|
||||
]);
|
||||
|
||||
$request = new LoginRequest();
|
||||
$request = new LoginRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -66,7 +66,7 @@ public function test_invalid_data(array $data) : void
|
||||
'email' => 'JOHN.DOE@example.com',
|
||||
]);
|
||||
|
||||
$request = new LoginRequest();
|
||||
$request = new LoginRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -26,7 +26,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new UserDeleteRequest();
|
||||
$request = new UserDeleteRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -35,7 +35,7 @@ public function test_user_is_authorized()
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new UserDeleteRequest();
|
||||
$request = new UserDeleteRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -57,7 +57,7 @@ public static function provideValidData() : array
|
||||
#[DataProvider('provideInvalidData')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new UserDeleteRequest();
|
||||
$request = new UserDeleteRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -26,7 +26,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new UserPatchPwdRequest();
|
||||
$request = new UserPatchPwdRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -35,7 +35,7 @@ public function test_user_is_authorized()
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new UserPatchPwdRequest();
|
||||
$request = new UserPatchPwdRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -59,7 +59,7 @@ public static function provideValidData() : array
|
||||
#[DataProvider('provideInvalidData')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new UserPatchPwdRequest();
|
||||
$request = new UserPatchPwdRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -22,7 +22,7 @@ class UserStoreRequestTest extends FeatureTestCase
|
||||
#[Test]
|
||||
public function test_user_is_authorized()
|
||||
{
|
||||
$request = new UserStoreRequest();
|
||||
$request = new UserStoreRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -36,7 +36,7 @@ public function test_valid_data(array $data) : void
|
||||
'email' => 'jane@example.com',
|
||||
]);
|
||||
|
||||
$request = new UserStoreRequest();
|
||||
$request = new UserStoreRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -72,7 +72,7 @@ public function test_invalid_data(array $data) : void
|
||||
'email' => 'john@example.com',
|
||||
]);
|
||||
|
||||
$request = new UserStoreRequest();
|
||||
$request = new UserStoreRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -28,7 +28,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new UserUpdateRequest();
|
||||
$request = new UserUpdateRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ class WebauthnAssertedRequestTest extends TestCase
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new WebauthnAssertedRequest();
|
||||
$request = new WebauthnAssertedRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -53,7 +53,7 @@ public static function provideValidData() : array
|
||||
#[DataProvider('provideInvalidData')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new WebauthnAssertedRequest();
|
||||
$request = new WebauthnAssertedRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -26,7 +26,7 @@ public function test_user_is_authorized()
|
||||
->once()
|
||||
->andReturn(true);
|
||||
|
||||
$request = new WebauthnRenameRequest();
|
||||
$request = new WebauthnRenameRequest;
|
||||
|
||||
$this->assertTrue($request->authorize());
|
||||
}
|
||||
@ -35,7 +35,7 @@ public function test_user_is_authorized()
|
||||
#[DataProvider('provideValidData')]
|
||||
public function test_valid_data(array $data) : void
|
||||
{
|
||||
$request = new WebauthnRenameRequest();
|
||||
$request = new WebauthnRenameRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertFalse($validator->fails());
|
||||
@ -57,7 +57,7 @@ public static function provideValidData() : array
|
||||
#[DataProvider('provideInvalidData')]
|
||||
public function test_invalid_data(array $data) : void
|
||||
{
|
||||
$request = new WebauthnRenameRequest();
|
||||
$request = new WebauthnRenameRequest;
|
||||
$validator = Validator::make($data, $request->rules());
|
||||
|
||||
$this->assertTrue($validator->fails());
|
||||
|
@ -143,7 +143,7 @@ public function test_testEmail_returns_success_even_if_sending_fails()
|
||||
{
|
||||
Notification::fake();
|
||||
|
||||
$this->mock(Dispatcher::class)->shouldReceive('send')->andThrow(new Exception());
|
||||
$this->mock(Dispatcher::class)->shouldReceive('send')->andThrow(new Exception);
|
||||
|
||||
$response = $this->actingAs($this->admin, 'web-guard')
|
||||
->json('POST', '/system/test-email', []);
|
||||
|
@ -17,7 +17,7 @@ class AuthLogModelTest extends FeatureTestCase
|
||||
#[Test]
|
||||
public function test_equals_returns_true()
|
||||
{
|
||||
$user = User::factory()->create();
|
||||
$user = User::factory()->create();
|
||||
$lastAuthLog = AuthLog::factory()->for($user, 'authenticatable')->create();
|
||||
|
||||
$this->assertTrue($lastAuthLog->equals($lastAuthLog));
|
||||
|
@ -108,10 +108,10 @@ public function test_resetPassword_dispatch_event()
|
||||
public function test_delete_removes_user_data()
|
||||
{
|
||||
Artisan::call('passport:install', [
|
||||
'--verbose' => 2,
|
||||
'--no-interaction' => 1
|
||||
'--verbose' => 2,
|
||||
'--no-interaction' => 1,
|
||||
]);
|
||||
|
||||
|
||||
$user = User::factory()->create();
|
||||
TwoFAccount::factory()->for($user)->create();
|
||||
AuthLog::factory()->for($user, 'authenticatable')->create();
|
||||
@ -234,10 +234,10 @@ public function test_authentications_returns_user_auth_logs_sorted_by_latest_id(
|
||||
#[Test]
|
||||
public function test_authentications_returns_user_auth_logs_only()
|
||||
{
|
||||
$user = User::factory()->create();
|
||||
$user = User::factory()->create();
|
||||
$anotherUser = User::factory()->create();
|
||||
|
||||
$userAuthLog = AuthLog::factory()->daysAgo(10)->for($user, 'authenticatable')->create();
|
||||
$userAuthLog = AuthLog::factory()->daysAgo(10)->for($user, 'authenticatable')->create();
|
||||
AuthLog::factory()->daysAgo(5)->for($anotherUser, 'authenticatable')->create();
|
||||
|
||||
$authentications = $user->authentications()->get();
|
||||
@ -268,7 +268,7 @@ public function test_authenticationsByPeriod_returns_last_three_months_auth_logs
|
||||
$sixMonthsAgoAuthLog = AuthLog::factory()->duringLastSixMonth()->for($user, 'authenticatable')->create();
|
||||
$threeMonthsAgoAuthLog = AuthLog::factory()->duringLastThreeMonth()->for($user, 'authenticatable')->create();
|
||||
$duringLastMonthAuthLog = AuthLog::factory()->duringLastMonth()->for($user, 'authenticatable')->create();
|
||||
|
||||
|
||||
$authentications = $user->authenticationsByPeriod(3);
|
||||
|
||||
$this->assertCount(2, $authentications);
|
||||
@ -293,7 +293,7 @@ public function test_latestAuthentication_returns_user_latest_auth_logs()
|
||||
#[Test]
|
||||
public function test_latestAuthentication_returns_user_latest_auth_logs_only()
|
||||
{
|
||||
$user = User::factory()->create();
|
||||
$user = User::factory()->create();
|
||||
$anotherUser = User::factory()->create();
|
||||
|
||||
$userAuthLog = AuthLog::factory()->duringLastThreeMonth()->for($user, 'authenticatable')->create();
|
||||
@ -309,7 +309,7 @@ public function test_latestAuthentication_returns_user_latest_auth_logs_only()
|
||||
public function test_lastLoginAt_returns_user_last_auth_date()
|
||||
{
|
||||
$user = User::factory()->create();
|
||||
$now = now();
|
||||
$now = now();
|
||||
|
||||
$tenDaysAgoAuthLog = AuthLog::factory()->daysAgo(10)->for($user, 'authenticatable')->create();
|
||||
$fiveDaysAgoAuthLog = AuthLog::factory()->daysAgo(5)->for($user, 'authenticatable')->create();
|
||||
@ -335,7 +335,7 @@ public function test_lastLoginAt_returns_null_if_user_has_no_login()
|
||||
public function test_lastSuccessfulLoginAt_returns_user_last_successful_login_date()
|
||||
{
|
||||
$user = User::factory()->create();
|
||||
$now = now();
|
||||
$now = now();
|
||||
AuthLog::factory()->at($now)->for($user, 'authenticatable')->create();
|
||||
|
||||
$lastSuccessfulLoginAt = $user->lastSuccessfulLoginAt();
|
||||
@ -347,7 +347,7 @@ public function test_lastSuccessfulLoginAt_returns_user_last_successful_login_da
|
||||
public function test_lastSuccessfulLoginAt_returns_null_if_user_has_no_successful_login()
|
||||
{
|
||||
$user = User::factory()->create();
|
||||
$now = now();
|
||||
$now = now();
|
||||
AuthLog::factory()->at($now)->failedLogin()->for($user, 'authenticatable')->create();
|
||||
|
||||
$lastSuccessfulLoginAt = $user->lastSuccessfulLoginAt();
|
||||
@ -401,12 +401,12 @@ public function test_lastSuccessfulLoginIp_returns_null_if_user_has_no_successfu
|
||||
#[Test]
|
||||
public function test_previousLoginAt_returns_user_last_auth_date()
|
||||
{
|
||||
$user = User::factory()->create();
|
||||
$now = now();
|
||||
$user = User::factory()->create();
|
||||
$now = now();
|
||||
$yesterday = now()->subDay();
|
||||
|
||||
$yesterdayAuthLog = AuthLog::factory()->at($yesterday)->for($user, 'authenticatable')->create();
|
||||
$lastAuthLog = AuthLog::factory()->at($now)->for($user, 'authenticatable')->create();
|
||||
$yesterdayAuthLog = AuthLog::factory()->at($yesterday)->for($user, 'authenticatable')->create();
|
||||
$lastAuthLog = AuthLog::factory()->at($now)->for($user, 'authenticatable')->create();
|
||||
|
||||
$previousLoginAt = $user->previousLoginAt();
|
||||
|
||||
@ -426,7 +426,7 @@ public function test_previousLoginAt_returns_null_if_user_has_no_auth_log()
|
||||
#[Test]
|
||||
public function test_previousLoginIp_returns_user_last_auth_ip()
|
||||
{
|
||||
$user = User::factory()->create();
|
||||
$user = User::factory()->create();
|
||||
$yesterday = now()->subDay();
|
||||
|
||||
AuthLog::factory()->for($user, 'authenticatable')->create();
|
||||
@ -446,6 +446,4 @@ public function test_previousLoginIp_returns_null_if_user_has_no_auth_log()
|
||||
|
||||
$this->assertNull($previousLoginIp);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -31,7 +31,6 @@ class FailedLoginNotificationTest extends FeatureTestCase
|
||||
*/
|
||||
protected $failedLogin;
|
||||
|
||||
|
||||
public function setUp() : void
|
||||
{
|
||||
parent::setUp();
|
||||
@ -39,15 +38,15 @@ public function setUp() : void
|
||||
$this->user = User::factory()->create();
|
||||
|
||||
AuthLog::factory()->for($this->user, 'authenticatable')->failedLogin()->create();
|
||||
|
||||
$this->authLog = AuthLog::first();
|
||||
|
||||
$this->authLog = AuthLog::first();
|
||||
$this->failedLogin = new FailedLoginNotification($this->authLog);
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function test_it_renders_to_email()
|
||||
{
|
||||
|
||||
|
||||
$mail = $this->failedLogin->toMail($this->user);
|
||||
|
||||
$this->assertInstanceOf(MailMessage::class, $mail);
|
||||
@ -78,5 +77,4 @@ public function test_rendered_email_contains_expected_data()
|
||||
$mail
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -31,7 +31,6 @@ class SignedInWithNewDeviceNotificationTest extends FeatureTestCase
|
||||
*/
|
||||
protected $signedInWithNewDevice;
|
||||
|
||||
|
||||
public function setUp() : void
|
||||
{
|
||||
parent::setUp();
|
||||
@ -39,14 +38,14 @@ public function setUp() : void
|
||||
$this->user = User::factory()->create();
|
||||
|
||||
AuthLog::factory()->for($this->user, 'authenticatable')->failedLogin()->create();
|
||||
|
||||
$this->authLog = AuthLog::first();
|
||||
|
||||
$this->authLog = AuthLog::first();
|
||||
$this->signedInWithNewDevice = new SignedInWithNewDeviceNotification($this->authLog);
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function test_it_renders_to_email()
|
||||
{
|
||||
{
|
||||
$mail = $this->signedInWithNewDevice->toMail($this->user);
|
||||
|
||||
$this->assertInstanceOf(MailMessage::class, $mail);
|
||||
@ -77,5 +76,4 @@ public function test_rendered_email_contains_expected_data()
|
||||
$mail
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -25,12 +25,11 @@ class TestEmailSettingNotificationTest extends FeatureTestCase
|
||||
*/
|
||||
protected $testEmailSettingNotification;
|
||||
|
||||
|
||||
public function setUp() : void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->user = User::factory()->create();
|
||||
$this->user = User::factory()->create();
|
||||
$this->testEmailSettingNotification = new TestEmailSettingNotification('test_token');
|
||||
}
|
||||
|
||||
|
@ -30,13 +30,13 @@ public function setUp() : void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->user = User::factory()->create();
|
||||
$this->user = User::factory()->create();
|
||||
$this->webauthnRecoveryNotification = new WebauthnRecoveryNotification('test_token');
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function test_it_renders_to_email()
|
||||
{
|
||||
{
|
||||
$mail = $this->webauthnRecoveryNotification->toMail($this->user);
|
||||
|
||||
$this->assertInstanceOf(MailMessage::class, $mail);
|
||||
@ -77,5 +77,4 @@ public function test_rendered_email_contains_expected_data()
|
||||
$mail
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -4,8 +4,8 @@
|
||||
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Illuminate\Support\Str;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\DataProvider;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
@ -15,6 +15,7 @@
|
||||
class RouteTest extends FeatureTestCase
|
||||
{
|
||||
const API_ROUTE_PREFIX = 'api/v1';
|
||||
|
||||
const API_MIDDLEWARE = 'api.v1';
|
||||
|
||||
#[Test]
|
||||
@ -61,9 +62,7 @@ public function test_router_has_expected_global_where_patterns($pattern)
|
||||
public static function wherePatternProvider()
|
||||
{
|
||||
return [
|
||||
'SETTING_NAME' => ['settingName']
|
||||
'SETTING_NAME' => ['settingName'],
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -165,8 +165,8 @@ public function test_user_can_assign_multiple_accounts()
|
||||
#[Test]
|
||||
public function test_setUser_sets_groups_user()
|
||||
{
|
||||
$this->groupOne = Group::factory()->create();
|
||||
$this->groupTwo = Group::factory()->create();
|
||||
$this->groupOne = Group::factory()->create();
|
||||
$this->groupTwo = Group::factory()->create();
|
||||
|
||||
$this->assertEquals(null, $this->groupOne->user_id);
|
||||
$this->assertEquals(null, $this->groupTwo->user_id);
|
||||
|
@ -39,7 +39,7 @@ public function test_getIcon_returns_stored_icon_file_when_logo_exists()
|
||||
Storage::fake('icons');
|
||||
Storage::fake('logos');
|
||||
|
||||
$logoService = new LogoService();
|
||||
$logoService = new LogoService;
|
||||
$icon = $logoService->getIcon('twitter');
|
||||
|
||||
$this->assertNotNull($icon);
|
||||
@ -56,7 +56,7 @@ public function test_getIcon_returns_null_when_github_request_fails()
|
||||
|
||||
Storage::fake('icons');
|
||||
Storage::fake('logos');
|
||||
$logoService = new LogoService();
|
||||
$logoService = new LogoService;
|
||||
|
||||
$icon = $logoService->getIcon('twitter');
|
||||
|
||||
@ -75,7 +75,7 @@ public function test_getIcon_returns_null_when_logo_fetching_fails()
|
||||
|
||||
Storage::fake('icons');
|
||||
Storage::fake('logos');
|
||||
$logoService = new LogoService();
|
||||
$logoService = new LogoService;
|
||||
|
||||
$icon = $logoService->getIcon('twitter');
|
||||
|
||||
@ -85,7 +85,7 @@ public function test_getIcon_returns_null_when_logo_fetching_fails()
|
||||
#[Test]
|
||||
public function test_getIcon_returns_null_when_no_logo_exists()
|
||||
{
|
||||
$logoService = new LogoService();
|
||||
$logoService = new LogoService;
|
||||
|
||||
$icon = $logoService->getIcon('no_logo_should_exists_with_this_name');
|
||||
|
||||
@ -105,7 +105,7 @@ public function test_logoService_loads_empty_collection_when_tfajson_fetching_fa
|
||||
Storage::fake('icons');
|
||||
Storage::fake('logos');
|
||||
|
||||
$logoService = new LogoService();
|
||||
$logoService = new LogoService;
|
||||
$icon = $logoService->getIcon('twitter');
|
||||
|
||||
$this->assertNull($icon);
|
||||
|
@ -66,27 +66,24 @@ public function test_decodee_throws_an_exception($exception)
|
||||
// QrReader is a final class, so we need to mock it here with a new object instance
|
||||
// to then bind it to the container
|
||||
$fileContent = LocalFile::fake()->validQrcode()->get();
|
||||
$qrReader = \Mockery::mock(new QrReader($fileContent, QrReader::SOURCE_TYPE_BLOB))->makePartial();
|
||||
$qrReader = \Mockery::mock(new QrReader($fileContent, QrReader::SOURCE_TYPE_BLOB))->makePartial();
|
||||
$qrReader->shouldReceive('text')->andReturn('');
|
||||
$qrReader->shouldReceive('getError')->andReturn($exception);
|
||||
|
||||
$this->app->bind(QrReader::class, function() use($qrReader) {
|
||||
|
||||
$this->app->bind(QrReader::class, function () use ($qrReader) {
|
||||
return $qrReader;
|
||||
});
|
||||
|
||||
QrCode::decode(LocalFile::fake()->validQrcode());
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static function QrReaderExceptionProvider()
|
||||
{
|
||||
return [
|
||||
'NotFoundException' => [new NotFoundException()],
|
||||
'FormatException' => [new FormatException()],
|
||||
'ChecksumException' => [new ChecksumException()],
|
||||
'default' => [new Exception()],
|
||||
'NotFoundException' => [new NotFoundException],
|
||||
'FormatException' => [new FormatException],
|
||||
'ChecksumException' => [new ChecksumException],
|
||||
'default' => [new Exception],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -337,7 +337,7 @@ public function test_cache_is_requested_at_instanciation()
|
||||
Cache::shouldReceive('remember')
|
||||
->andReturn(collect([]));
|
||||
|
||||
$settingService = new SettingService();
|
||||
$settingService = new SettingService;
|
||||
|
||||
Cache::shouldHaveReceived('remember');
|
||||
}
|
||||
@ -348,7 +348,7 @@ public function test_cache_is_updated_when_setting_is_set()
|
||||
Cache::shouldReceive('remember', 'put')
|
||||
->andReturn(collect([]), true);
|
||||
|
||||
$settingService = new SettingService();
|
||||
$settingService = new SettingService;
|
||||
$settingService->set(self::SETTING_NAME, self::SETTING_VALUE_STRING);
|
||||
|
||||
Cache::shouldHaveReceived('put');
|
||||
@ -360,7 +360,7 @@ public function test_cache_is_updated_when_setting_is_deleted()
|
||||
Cache::shouldReceive('remember', 'put')
|
||||
->andReturn(collect([]), true);
|
||||
|
||||
$settingService = new SettingService();
|
||||
$settingService = new SettingService;
|
||||
$settingService->delete(self::SETTING_NAME);
|
||||
|
||||
Cache::shouldHaveReceived('put');
|
||||
|
@ -325,8 +325,8 @@ public function test_delete_single_id()
|
||||
#[Test]
|
||||
public function test_setUser_sets_twofaccounts_user()
|
||||
{
|
||||
$twofaccountA = TwoFAccount::factory()->create();
|
||||
$twofaccountB = TwoFAccount::factory()->create();
|
||||
$twofaccountA = TwoFAccount::factory()->create();
|
||||
$twofaccountB = TwoFAccount::factory()->create();
|
||||
|
||||
$this->assertEquals(null, $twofaccountA->user_id);
|
||||
$this->assertEquals(null, $twofaccountB->user_id);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user