diff --git a/app/Access/Controllers/MfaTotpController.php b/app/Access/Controllers/MfaTotpController.php index f60644b84..5202fedc0 100644 --- a/app/Access/Controllers/MfaTotpController.php +++ b/app/Access/Controllers/MfaTotpController.php @@ -19,20 +19,25 @@ class MfaTotpController extends Controller protected const SETUP_SECRET_SESSION_KEY = 'mfa-setup-totp-secret'; + public function __construct( + protected TotpService $totp + ) { + } + /** * Show a view that generates and displays a TOTP QR code. */ - public function generate(TotpService $totp) + public function generate() { if (session()->has(static::SETUP_SECRET_SESSION_KEY)) { $totpSecret = decrypt(session()->get(static::SETUP_SECRET_SESSION_KEY)); } else { - $totpSecret = $totp->generateSecret(); + $totpSecret = $this->totp->generateSecret(); session()->put(static::SETUP_SECRET_SESSION_KEY, encrypt($totpSecret)); } - $qrCodeUrl = $totp->generateUrl($totpSecret, $this->currentOrLastAttemptedUser()); - $svg = $totp->generateQrCodeSvg($qrCodeUrl); + $qrCodeUrl = $this->totp->generateUrl($totpSecret, $this->currentOrLastAttemptedUser()); + $svg = $this->totp->generateQrCodeSvg($qrCodeUrl); $this->setPageTitle(trans('auth.mfa_gen_totp_title')); @@ -56,7 +61,7 @@ class MfaTotpController extends Controller 'code' => [ 'required', 'max:12', 'min:4', - new TotpValidationRule($totpSecret), + new TotpValidationRule($totpSecret, $this->totp), ], ]); @@ -87,7 +92,7 @@ class MfaTotpController extends Controller 'code' => [ 'required', 'max:12', 'min:4', - new TotpValidationRule($totpSecret), + new TotpValidationRule($totpSecret, $this->totp), ], ]); diff --git a/app/Access/Mfa/TotpValidationRule.php b/app/Access/Mfa/TotpValidationRule.php index c38bde90b..63b575f19 100644 --- a/app/Access/Mfa/TotpValidationRule.php +++ b/app/Access/Mfa/TotpValidationRule.php @@ -2,36 +2,26 @@ namespace BookStack\Access\Mfa; -use Illuminate\Contracts\Validation\Rule; +use Closure; +use Illuminate\Contracts\Validation\ValidationRule; -class TotpValidationRule implements Rule +class TotpValidationRule implements ValidationRule { - protected $secret; - protected $totpService; - /** * Create a new rule instance. * Takes the TOTP secret that must be system provided, not user provided. */ - public function __construct(string $secret) - { - $this->secret = $secret; - $this->totpService = app()->make(TotpService::class); + public function __construct( + protected string $secret, + protected TotpService $totpService, + ) { } - /** - * Determine if the validation rule passes. - */ - public function passes($attribute, $value) + public function validate(string $attribute, mixed $value, Closure $fail): void { - return $this->totpService->verifyCode($value, $this->secret); - } - - /** - * Get the validation error message. - */ - public function message() - { - return trans('validation.totp'); + $passes = $this->totpService->verifyCode($value, $this->secret); + if (!$passes) { + $fail(trans('validation.totp')); + } } } diff --git a/database/migrations/2015_08_31_175240_add_search_indexes.php b/database/migrations/2015_08_31_175240_add_search_indexes.php index 4e0421e9e..3382b2d54 100644 --- a/database/migrations/2015_08_31_175240_add_search_indexes.php +++ b/database/migrations/2015_08_31_175240_add_search_indexes.php @@ -26,9 +26,9 @@ return new class extends Migration public function down(): void { $sm = Schema::getConnection()->getDoctrineSchemaManager(); - $pages = $sm->listTableDetails('pages'); - $books = $sm->listTableDetails('books'); - $chapters = $sm->listTableDetails('chapters'); + $pages = $sm->introspectTable('pages'); + $books = $sm->introspectTable('books'); + $chapters = $sm->introspectTable('chapters'); if ($pages->hasIndex('search')) { Schema::table('pages', function (Blueprint $table) { diff --git a/database/migrations/2015_12_05_145049_fulltext_weighting.php b/database/migrations/2015_12_05_145049_fulltext_weighting.php index 7f9d2373c..33163e854 100644 --- a/database/migrations/2015_12_05_145049_fulltext_weighting.php +++ b/database/migrations/2015_12_05_145049_fulltext_weighting.php @@ -26,9 +26,9 @@ return new class extends Migration public function down(): void { $sm = Schema::getConnection()->getDoctrineSchemaManager(); - $pages = $sm->listTableDetails('pages'); - $books = $sm->listTableDetails('books'); - $chapters = $sm->listTableDetails('chapters'); + $pages = $sm->introspectTable('pages'); + $books = $sm->introspectTable('books'); + $chapters = $sm->introspectTable('chapters'); if ($pages->hasIndex('name_search')) { Schema::table('pages', function (Blueprint $table) { diff --git a/database/migrations/2017_03_19_091553_create_search_index_table.php b/database/migrations/2017_03_19_091553_create_search_index_table.php index 72be3ccbe..71f93fa2d 100644 --- a/database/migrations/2017_03_19_091553_create_search_index_table.php +++ b/database/migrations/2017_03_19_091553_create_search_index_table.php @@ -25,9 +25,9 @@ return new class extends Migration }); $sm = Schema::getConnection()->getDoctrineSchemaManager(); - $pages = $sm->listTableDetails('pages'); - $books = $sm->listTableDetails('books'); - $chapters = $sm->listTableDetails('chapters'); + $pages = $sm->introspectTable('pages'); + $books = $sm->introspectTable('books'); + $chapters = $sm->introspectTable('chapters'); if ($pages->hasIndex('search')) { Schema::table('pages', function (Blueprint $table) {