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; } } }