12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- <?php
- namespace App\Http\Controllers;
- use Validator;
- use Zxing\QrReader;
- use OTPHP\TOTP;
- use OTPHP\Factory;
- use Assert\AssertionFailedException;
- use Illuminate\Http\File;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Storage;
- class QrCodecontroller extends Controller
- {
- /**
- * Handle uploaded qr code image
- *
- * @param \Illuminate\Http\Request $request
- * @return \Illuminate\Http\Response
- */
- public function decode(Request $request)
- {
- // input validation
- $validator = Validator::make($request->all(), [
- 'qrcode' => 'required|image',
- ]);
- if ($validator->fails()) {
- return response()->json(['validation' => $validator->errors()], 400);
- }
- // qrcode analysis
- $path = $request->file('qrcode')->store('qrcodes');
- $qrcode = new QrReader(storage_path('app/' . $path));
- $uri = urldecode($qrcode->text());
- // delete uploaded file
- Storage::delete($path);
- // return the OTP object
- try {
- $otp = Factory::loadFromProvisioningUri($uri);
- if(!$otp->getIssuer()) {
- $otp->setIssuer($otp->getLabel());
- $otp->setLabel('');
- }
- // returned object
- $twofaccount = (object) array(
- 'service' => $otp->getIssuer(),
- 'account' => $otp->getLabel(),
- 'uri' => $uri,
- 'icon' => '',
- 'options' => $otp->getParameters()
- );
- return response()->json($twofaccount, 200);
- }
- catch (AssertionFailedException $exception) {
- return response()->json([
- 'validation' => [
- 'qrcode' => __('errors.response.no_valid_totp')
- ]
- ], 400);
- }
- }
-
- }
|