From 4be0a800dda19f1ddabfd5daefa49f686bae5aeb Mon Sep 17 00:00:00 2001 From: smiley Date: Sun, 9 Jul 2023 15:53:25 +0200 Subject: [PATCH] :octocat: authenticator example --- composer.json | 1 + examples/Readme.md | 1 + examples/authenticator.php | 125 +++++++++++++++++++++++++++++++++++++ 3 files changed, 127 insertions(+) create mode 100644 examples/authenticator.php diff --git a/composer.json b/composer.json index 303bf8411..48838e8f1 100644 --- a/composer.json +++ b/composer.json @@ -46,6 +46,7 @@ "chillerlan/php-settings-container": "^2.1.4 || ^3.0" }, "require-dev": { + "chillerlan/php-authenticator": "^4.0 || ^5.0", "phan/phan": "^5.4", "phpunit/phpunit": "^9.6", "phpmd/phpmd": "^2.13", diff --git a/examples/Readme.md b/examples/Readme.md index 7b1370adc..c5e027cd3 100644 --- a/examples/Readme.md +++ b/examples/Readme.md @@ -27,5 +27,6 @@ ## Other examples +- [Authenticator](./authenticator.php): create a QR Code that displays an URI for a mobile authenticator (featuring [`chillerlan/php-authenticator`](https://github.com/chillerlan/php-authenticator)) - [Interactive output](./qrcode-interactive.php): interactive demo (via [index.html](./index.html)) - [Custom module shapes](./shapes.svg): SVG paths to customize the module shapes ([#150](https://github.com/chillerlan/php-qrcode/discussions/150)) diff --git a/examples/authenticator.php b/examples/authenticator.php new file mode 100644 index 000000000..e9ee7ed50 --- /dev/null +++ b/examples/authenticator.php @@ -0,0 +1,125 @@ + + * @copyright 2023 smiley + * @license MIT + */ + +use chillerlan\Authenticator\{Authenticator, AuthenticatorOptionsTrait}; +use chillerlan\Authenticator\Authenticators\AuthenticatorInterface; +use chillerlan\Settings\SettingsContainerAbstract; +use chillerlan\QRCode\{QRCode, QROptionsTrait}; +use chillerlan\QRCode\Data\QRMatrix; + +require_once __DIR__.'/../vendor/autoload.php'; + +// the options array +$optionsArray = [ + /* + * AuthenticatorOptionsTrait + * + * @see https://github.com/chillerlan/php-authenticator + */ + 'mode' => AuthenticatorInterface::TOTP, + 'digits' => 8, + 'algorithm' => AuthenticatorInterface::ALGO_SHA512, + + /* + * QROptionsTrait + */ + 'version' => 7, + 'addQuietzone' => false, + 'imageBase64' => false, + 'svgAddXmlHeader' => false, + 'cssClass' => 'my-qrcode', + 'drawLightModules' => false, + 'markupDark' => '', + 'markupLight' => '', + 'drawCircularModules' => true, + 'circleRadius' => 0.4, + 'connectPaths' => true, + 'keepAsSquare' => [ + QRMatrix::M_FINDER_DARK, + QRMatrix::M_FINDER_DOT, + QRMatrix::M_ALIGNMENT_DARK, + ], + 'svgDefs' => ' + + + + + ', +]; + +// create a new options container on the fly that hosts both, authenticator and qrcode +$options = new class($optionsArray) extends SettingsContainerAbstract{ + use AuthenticatorOptionsTrait, QROptionsTrait; +}; + +// invoke the worker instances +$authenticator = new Authenticator($options); +$qrcode = new QRCode($options); + +// create a secret and URI, generate the QR Code +$secret = $authenticator->createSecret(24); +$uri = $authenticator->getUri('your authenticator', 'this website'); +$svg = $qrcode->render($uri); + +// dump the output +header('Content-type: text/html'); + +?> + + + + + + QRCode Authenticator Example + + + +
+ + + + + +
+ + +