From a24540ede3b6f87892360c8f68f216268fb6f465 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Thu, 13 Jan 2022 14:27:36 +0000 Subject: [PATCH] Bug 29873: Create QR code Content-Type: text/plain; charset=utf-8 --- Koha/Auth/TwoFactorAuth.pm | 25 +++++++++++++++++++ .../en/modules/members/two_factor_auth.tt | 2 +- members/two_factor_auth.pl | 4 +-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/Koha/Auth/TwoFactorAuth.pm b/Koha/Auth/TwoFactorAuth.pm index 8932006763..9f6cd99653 100644 --- a/Koha/Auth/TwoFactorAuth.pm +++ b/Koha/Auth/TwoFactorAuth.pm @@ -17,6 +17,8 @@ package Koha::Auth::TwoFactorAuth; use Modern::Perl; use Auth::GoogleAuth; +use Imager::QRCode; +use MIME::Base64 qw( encode_base64 ); use base qw( Auth::GoogleAuth ); @@ -68,4 +70,27 @@ sub new { ); } +=head3 qr_dataurl + +=cut + +sub qr_dataurl { + my ( $self ) = @_; + + my $otpauth = $self->qr_code( $self->secret32, $self->key_id, $self->issuer, 1); + my $qrcode = Imager::QRCode->new({ + size => 8, # 200 x 200 + margin => 2, + version => 1, + level => 'M', + casesensitive => 1, + lightcolor => Imager::Color->new(255, 255, 255), + darkcolor => Imager::Color->new(0, 0, 0), + }); + my $img = $qrcode->plot( $otpauth ); + my $data; + $img->write( data => \$data, type => 'png' ); + return "data:image/png;base64,". encode_base64( $data ); +} + 1; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/two_factor_auth.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/two_factor_auth.tt index 0598fe836d..a9a09b41d2 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/two_factor_auth.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/two_factor_auth.tt @@ -55,7 +55,7 @@
  1. - +
  2. diff --git a/members/two_factor_auth.pl b/members/two_factor_auth.pl index 2a5a996c56..da81b781ae 100755 --- a/members/two_factor_auth.pl +++ b/members/two_factor_auth.pl @@ -79,14 +79,12 @@ if ( $op eq 'enable-2FA' ) { { patron => $logged_in_user, secret => $secret } ); my $secret32 = $auth->generate_secret32; - my $qr_code_url = - $auth->qr_code( $secret32, $auth->key_id, $auth->issuer, ); $template->param( issuer => $auth->issuer, key_id => $auth->key_id, secret32 => $secret32, - qr_code_url => $qr_code_url, + qr_dataurl => $auth->qr_dataurl, ); $auth->clear; $op = 'register'; -- 2.20.1