| <?php |
| |
| namespace Tests\Providers\Qr; |
| |
| use PHPUnit\Framework\TestCase; |
| use RobThree\Auth\TwoFactorAuth; |
| use RobThree\Auth\TwoFactorAuthException; |
| |
| class IQRCodeProviderTest extends TestCase |
| { |
| /** |
| * @param string $datauri |
| * |
| * @return null|array |
| */ |
| private function DecodeDataUri($datauri) |
| { |
| if (preg_match('/data:(?P<mimetype>[\w\.\-\/]+);(?P<encoding>\w+),(?P<data>.*)/', $datauri, $m) === 1) { |
| return array( |
| 'mimetype' => $m['mimetype'], |
| 'encoding' => $m['encoding'], |
| 'data' => base64_decode($m['data']) |
| ); |
| } |
| |
| return null; |
| } |
| |
| /** |
| * @return void |
| */ |
| public function testTotpUriIsCorrect() |
| { |
| $qr = new TestQrProvider(); |
| |
| $tfa = new TwoFactorAuth('Test&Issuer', 6, 30, 'sha1', $qr); |
| $data = $this->DecodeDataUri($tfa->getQRCodeImageAsDataUri('Test&Label', 'VMR466AB62ZBOKHE')); |
| $this->assertEquals('test/test', $data['mimetype']); |
| $this->assertEquals('base64', $data['encoding']); |
| $this->assertEquals('otpauth://totp/Test%26Label?secret=VMR466AB62ZBOKHE&issuer=Test%26Issuer&period=30&algorithm=SHA1&digits=6@200', $data['data']); |
| } |
| |
| /** |
| * @return void |
| */ |
| public function testGetQRCodeImageAsDataUriThrowsOnInvalidSize() |
| { |
| $qr = new TestQrProvider(); |
| |
| $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', $qr); |
| |
| $this->expectException(TwoFactorAuthException::class); |
| |
| $tfa->getQRCodeImageAsDataUri('Test', 'VMR466AB62ZBOKHE', 0); |
| } |
| } |