Skip to content

Commit c4f222a

Browse files
cursoragentanwarx4u
andcommitted
Implement QR code generation using bacon/bacon-qr-code library
Co-authored-by: anwarx4u <anwarx4u@gmail.com>
1 parent 80ec6ca commit c4f222a

File tree

3 files changed

+22
-20
lines changed

3 files changed

+22
-20
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ $setup = MFA::setupTotp(auth()->user());
2525
// $setup['otpauth_url'] -> QR code; then verify
2626
$ok = MFA::verifyTotp(auth()->user(), '123456');
2727

28-
// Generate QR code (base64 PNG) from existing TOTP
28+
// Generate QR code (base64 PNG) from existing TOTP (uses bacon/bacon-qr-code)
2929
$base64 = MFA::generateTotpQrCodeBase64(auth()->user(), issuer: 'MyApp');
3030
// <img src="$base64" />
3131
```

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"illuminate/database": "^12.0",
1616
"illuminate/mail": "^12.0",
1717
"illuminate/config": "^12.0",
18-
"illuminate/console": "^12.0"
18+
"illuminate/console": "^12.0",
19+
"bacon/bacon-qr-code": "^2.0"
1920
},
2021
"autoload": {
2122
"psr-4": {

src/Support/QrCodeGenerator.php

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,30 @@
22

33
namespace CodingLibs\MFA\Support;
44

5+
use BaconQrCode\Renderer\Color\Rgb;
6+
use BaconQrCode\Renderer\Image\Png;
7+
use BaconQrCode\Renderer\Module\SquareModule;
8+
use BaconQrCode\Renderer\RendererStyle\Fill;
9+
use BaconQrCode\Renderer\RendererStyle\RendererStyle;
10+
use BaconQrCode\Writer;
11+
512
class QrCodeGenerator
613
{
714
public static function generateBase64Png(string $text, int $size = 200): string
815
{
9-
// Lightweight inline QR encoder using endroid/qr-code if available, else fallback to Google Charts
10-
if (class_exists('Endroid\\QrCode\\QrCode')) {
11-
return self::generateWithEndroid($text, $size);
12-
}
13-
return self::generateWithGoogleCharts($text, $size);
14-
}
16+
$renderer = new Png(
17+
new RendererStyle(
18+
$size,
19+
0,
20+
null,
21+
null,
22+
Fill::uniformColor(new Rgb(255, 255, 255), new Rgb(0, 0, 0)),
23+
new SquareModule()
24+
)
25+
);
1526

16-
protected static function generateWithEndroid(string $text, int $size): string
17-
{
18-
$qrCode = new \Endroid\QrCode\QrCode($text);
19-
$qrCode->setSize($size);
20-
$pngData = $qrCode->writeString();
21-
return 'data:image/png;base64,' . base64_encode($pngData);
22-
}
23-
24-
protected static function generateWithGoogleCharts(string $text, int $size): string
25-
{
26-
$url = 'https://chart.googleapis.com/chart?cht=qr&chs=' . $size . 'x' . $size . '&chl=' . rawurlencode($text);
27-
$pngData = @file_get_contents($url) ?: '';
27+
$writer = new Writer($renderer);
28+
$pngData = $writer->writeString($text);
2829
return 'data:image/png;base64,' . base64_encode($pngData);
2930
}
3031
}

0 commit comments

Comments
 (0)