From 70280253809b1515ed9669bfa8aaec1c5a68d20f Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Wed, 1 Sep 2021 20:58:19 +0100 Subject: [PATCH] Made the TOTP URL visible during setup Useful for some non-scanner type apps. Closes #2908 --- app/Http/Controllers/Auth/MfaTotpController.php | 4 ++-- resources/sass/_layout.scss | 1 + resources/views/mfa/totp-generate.blade.php | 3 +++ tests/Auth/MfaConfigurationTest.php | 4 +++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Auth/MfaTotpController.php b/app/Http/Controllers/Auth/MfaTotpController.php index 5a932d6e9..694d69d76 100644 --- a/app/Http/Controllers/Auth/MfaTotpController.php +++ b/app/Http/Controllers/Auth/MfaTotpController.php @@ -35,8 +35,8 @@ class MfaTotpController extends Controller $svg = $totp->generateQrCodeSvg($qrCodeUrl); return view('mfa.totp-generate', [ - 'secret' => $totpSecret, - 'svg' => $svg, + 'url' => $qrCodeUrl, + 'svg' => $svg, ]); } diff --git a/resources/sass/_layout.scss b/resources/sass/_layout.scss index e26948301..362bab7d3 100644 --- a/resources/sass/_layout.scss +++ b/resources/sass/_layout.scss @@ -145,6 +145,7 @@ body.flexbox { .flex { min-height: 0; flex: 1; + max-width: 100%; &.fit-content { flex-basis: auto; flex-grow: 0; diff --git a/resources/views/mfa/totp-generate.blade.php b/resources/views/mfa/totp-generate.blade.php index f9a7c46ac..e99861a8d 100644 --- a/resources/views/mfa/totp-generate.blade.php +++ b/resources/views/mfa/totp-generate.blade.php @@ -12,6 +12,9 @@
{!! $svg !!}
+
+ {{ $url }} +

{{ trans('auth.mfa_gen_totp_verify_setup') }}

diff --git a/tests/Auth/MfaConfigurationTest.php b/tests/Auth/MfaConfigurationTest.php index eb0e2faf0..685aad83a 100644 --- a/tests/Auth/MfaConfigurationTest.php +++ b/tests/Auth/MfaConfigurationTest.php @@ -36,10 +36,12 @@ class MfaConfigurationTest extends TestCase $resp->assertSee('The provided code is not valid or has expired.'); $revisitSvg = $resp->getElementHtml('#main-content .card svg'); $this->assertTrue($svg === $revisitSvg); + $secret = decrypt(session()->get('mfa-setup-totp-secret')); + + $resp->assertSee(htmlentities("?secret={$secret}&issuer=BookStack&algorithm=SHA1&digits=6&period=30")); // Successful confirmation $google2fa = new Google2FA(); - $secret = decrypt(session()->get('mfa-setup-totp-secret')); $otp = $google2fa->getCurrentOtp($secret); $resp = $this->post('/mfa/totp/confirm', [ 'code' => $otp,