Bug 32011: 2FA - Prevent qr_code to not be generated
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 27 Oct 2022 08:53:06 +0000 (10:53 +0200)
committerTomas Cohen Arazi <tomascohen@theke.io>
Thu, 27 Oct 2022 21:14:58 +0000 (18:14 -0300)
Caught by selenium/authentication_2fa.t

 #   Failed test 'Enforce 2FA setup on first login'
 #   at t/db_dependent/selenium/authentication_2fa.t line 291.Error while executing command: unexpected alert open: Dismissed user prompt dialog: [object Object] at /usr/share/perl5/Selenium/Remote/Driver.pm line 411.
 at /usr/share/perl5/Selenium/Remote/Driver.pm line 356.

There is a 500 in the logs:
 "POST /api/v1/app.pl/api/v1/auth/two-factor/registration HTTP/1.1" 500

That is caused by
[ERROR] POST /api/v1/auth/two-factor/registration: unhandled exception (Mojo::Exception)<<Overflow error. version 8
total bits: 1268  max bits: 1232>>

It's coming from GD::Barcode, in my understanding we should increase 'Version'.

Test plan:
Remove all other subtests from the selenium to speed up its exec, then
run it in a loop. Without this patch the tests fail quite often (1/10),
now it should not fail with this error (maybe another one, see bug
32010)

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Koha/Auth/TwoFactorAuth.pm

index b9c785f..5cd6d13 100644 (file)
@@ -101,7 +101,7 @@ sub qr_code {
 
     my $otpauth = $self->SUPER::qr_code( undef, undef, undef, 1);
         # no need to pass secret, key and issuer again
-    my $qrcode = GD::Barcode->new( 'QRcode', $otpauth, { Ecc => 'M', Version => 8, ModuleSize => 4 } );
+    my $qrcode = GD::Barcode->new( 'QRcode', $otpauth, { Ecc => 'M', Version => 10, ModuleSize => 4 } );
     my $data = $qrcode->plot->png;
     return "data:image/png;base64,". encode_base64( $data, q{} ); # does not contain newlines
 }