blob: ea46ed4c0c7a8dadec907a842bba3df9dc9b1cd2 [file] [log] [blame]
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +01001<?php
2
3namespace RobThree\Auth\Providers\Qr;
4
5// https://image-charts.com
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +02006class ImageChartsQRCodeProvider extends BaseHTTPQRCodeProvider
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +01007{
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +02008 /** @var string */
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +01009 public $errorcorrectionlevel;
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020010
11 /** @var int */
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010012 public $margin;
13
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020014 /**
15 * @param bool $verifyssl
16 * @param string $errorcorrectionlevel
17 * @param int $margin
18 */
19 public function __construct($verifyssl = false, $errorcorrectionlevel = 'L', $margin = 1)
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010020 {
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020021 if (!is_bool($verifyssl)) {
22 throw new QRException('VerifySSL must be bool');
23 }
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010024
25 $this->verifyssl = $verifyssl;
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020026
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010027 $this->errorcorrectionlevel = $errorcorrectionlevel;
28 $this->margin = $margin;
29 }
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020030
31 /**
32 * {@inheritdoc}
33 */
34 public function getMimeType()
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010035 {
36 return 'image/png';
37 }
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020038
39 /**
40 * {@inheritdoc}
41 */
42 public function getQRCodeImage($qrtext, $size)
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010043 {
44 return $this->getContent($this->getUrl($qrtext, $size));
45 }
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020046
47 /**
48 * @param string $qrtext the value to encode in the QR code
49 * @param int $size the desired size of the QR code
50 *
51 * @return string file contents of the QR code
52 */
53 public function getUrl($qrtext, $size)
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010054 {
55 return 'https://image-charts.com/chart?cht=qr'
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020056 . '&chs=' . ceil($size / 2) . 'x' . ceil($size / 2)
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010057 . '&chld=' . $this->errorcorrectionlevel . '|' . $this->margin
58 . '&chl=' . rawurlencode($qrtext);
59 }
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020060}