From 5480e3c8ef310ae560dbf5a64e65a09b6cc42f55 Mon Sep 17 00:00:00 2001 From: ErickSkrauch Date: Tue, 8 Aug 2017 02:08:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=80=D0=B5=D0=BD=D0=B4=D0=B5=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D0=B3=20QR=20=D0=BA=D0=BE=D0=B4=D0=B0=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=B9=20=D1=81=20=D0=BA=D0=BE=D1=80=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B8=D0=BC=D0=B8=20username=20=D0=B8=D0=BB=D0=B8=20emai?= =?UTF-8?q?l?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/models/profile/TwoFactorAuthForm.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/api/models/profile/TwoFactorAuthForm.php b/api/models/profile/TwoFactorAuthForm.php index e734bb6..df3dcc6 100644 --- a/api/models/profile/TwoFactorAuthForm.php +++ b/api/models/profile/TwoFactorAuthForm.php @@ -131,6 +131,8 @@ class TwoFactorAuthForm extends ApiForm { } public function drawQrCode(string $content): string { + $content = $this->forceMinimalQrContentLength($content); + $renderer = new Svg(); $renderer->setMargin(0); $renderer->setForegroundColor(new Rgb(32, 126, 92)); @@ -158,4 +160,20 @@ class TwoFactorAuthForm extends ApiForm { } } + /** + * В используемой либе для рендеринга QR кода нет возможности указать QR code version. + * http://www.qrcode.com/en/about/version.html + * По какой-то причине 7 и 8 версии не читаются вовсе, с логотипом или без. + * Поэтому нужно иначально привести строку к длинне 9 версии (91), добавляя к концу + * строки необходимое количество символов "#". Этот символ используется, т.к. нашим + * контентом является ссылка и чтобы не вводить лишние параметры мы помечаем добавочную + * часть как хеш часть и все программы для чтения QR кодов продолжают свою работу. + * + * @param string $content + * @return string + */ + private function forceMinimalQrContentLength(string $content): string { + return str_pad($content, 91, '#'); + } + }