1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <?php
- namespace App\Http\Controllers;
- use Zxing\QrReader;
- use OTPHP\TOTP;
- use OTPHP\Factory;
- use App\Classes\Options;
- 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)
- {
- if(Options::get('useBasicQrcodeReader')) {
- // input validation
- $this->validate($request, [
- 'qrcode' => 'required|image',
- ]);
- // 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);
- }
- else {
- $this->validate($request, [
- 'uri' => 'required|string',
- ]);
- $uri = $request->uri;
- }
- // 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) {
- $error = \Illuminate\Validation\ValidationException::withMessages([
- 'qrcode' => __('errors.response.no_valid_otp')
- ]);
- throw $error;
-
- }
- }
-
- }
|