QrCodeController.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Zxing\QrReader;
  4. use App\TwoFAccount;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\Storage;
  7. use chillerlan\QRCode\{QRCode, QROptions};
  8. class QrCodeController extends Controller
  9. {
  10. /**
  11. * Return a QR code image
  12. *
  13. * @param App\TwoFAccount $twofaccount
  14. * @return \Illuminate\Http\Response
  15. */
  16. public function show(TwoFAccount $twofaccount)
  17. {
  18. $options = new QROptions([
  19. 'quietzoneSize' => 2,
  20. 'scale' => 8,
  21. ]);
  22. $qrcode = new QRCode($options);
  23. return response()->json(['qrcode' => $qrcode->render($twofaccount->uri)], 200);
  24. }
  25. /**
  26. * Decode an uploaded QR Code image
  27. *
  28. * @param \Illuminate\Http\Request $request
  29. * @return \Illuminate\Http\Response
  30. */
  31. public function decode(Request $request)
  32. {
  33. // input validation
  34. $this->validate($request, [
  35. 'qrcode' => 'required|image',
  36. ]);
  37. // qrcode analysis
  38. $path = $request->file('qrcode')->store('qrcodes');
  39. $qrcode = new QrReader(storage_path('app/' . $path));
  40. $uri = urldecode($qrcode->text());
  41. // delete uploaded file
  42. Storage::delete($path);
  43. return response()->json(['uri' => $uri], 200);
  44. }
  45. }