SystemController.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Facades\Settings;
  4. use App\Notifications\TestEmailSettingNotification;
  5. use App\Services\ReleaseRadarService;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Carbon;
  8. use Illuminate\Support\Facades\Artisan;
  9. use Illuminate\Support\Facades\DB;
  10. use Illuminate\Support\Facades\Log;
  11. class SystemController extends Controller
  12. {
  13. /**
  14. * Get detailed information about the current installation
  15. *
  16. * @return \Illuminate\Http\JsonResponse
  17. */
  18. public function infos(Request $request)
  19. {
  20. $infos = [];
  21. $infos['common']['Date'] = date(DATE_RFC2822);
  22. $infos['common']['userAgent'] = $request->header('user-agent');
  23. // App info
  24. $infos['common']['Version'] = config('2fauth.version');
  25. $infos['common']['Environment'] = config('app.env');
  26. $infos['common']['Install path'] = '/' . config('2fauth.config.appSubdirectory');
  27. $infos['common']['Debug'] = var_export(config('app.debug'), true);
  28. $infos['common']['Cache driver'] = config('cache.default');
  29. $infos['common']['Log channel'] = config('logging.default');
  30. $infos['common']['Log level'] = env('LOG_LEVEL');
  31. $infos['common']['DB driver'] = DB::getDriverName();
  32. // PHP info
  33. $infos['common']['PHP version'] = PHP_VERSION;
  34. $infos['common']['Operating system'] = PHP_OS;
  35. $infos['common']['interface'] = PHP_SAPI;
  36. // Auth & Security infos
  37. $infos['common']['Auth guard'] = config('auth.defaults.guard');
  38. if ($infos['common']['Auth guard'] === 'reverse-proxy-guard') {
  39. $infos['common']['Auth proxy logout url'] = config('2fauth.config.proxyLogoutUrl');
  40. $infos['common']['Auth proxy header for user'] = config('auth.auth_proxy_headers.user');
  41. $infos['common']['Auth proxy header for email'] = config('auth.auth_proxy_headers.email');
  42. }
  43. $infos['common']['webauthn user verification'] = config('webauthn.user_verification');
  44. $infos['common']['Trusted proxies'] = config('2fauth.config.trustedProxies') ?: 'none';
  45. $infos['common']['lastRadarScan'] = Carbon::parse(Settings::get('lastRadarScan'))->format('Y-m-d H:i:s');
  46. return response()->json($infos);
  47. }
  48. /**
  49. * Get latest release
  50. *
  51. * @return \Illuminate\Http\JsonResponse
  52. */
  53. public function latestRelease(Request $request, ReleaseRadarService $releaseRadar)
  54. {
  55. $release = $releaseRadar->manualScan();
  56. return response()->json(['newRelease' => $release]);
  57. }
  58. /**
  59. * Send a test email
  60. *
  61. * @return \Illuminate\Http\JsonResponse
  62. */
  63. public function testEmail(Request $request)
  64. {
  65. try {
  66. $request->user()->notify(new TestEmailSettingNotification());
  67. } catch (\Throwable $th) {
  68. Log::error($th->getMessage());
  69. }
  70. return response()->json(['message' => 'Ok']);
  71. }
  72. /**
  73. * Clears all app caches and rebuild them
  74. *
  75. * @return \Illuminate\Http\JsonResponse
  76. */
  77. public function optimize(Request $request)
  78. {
  79. $configCode = Artisan::call('config:cache');
  80. $routeCode = Artisan::call('route:cache');
  81. $eventCode = Artisan::call('event:cache');
  82. $viewCode = Artisan::call('view:cache');
  83. return response()->json([
  84. 'config-exit-code' => $configCode,
  85. 'route-exit-code' => $routeCode,
  86. 'event-exit-code' => $eventCode,
  87. 'view-exit-code' => $viewCode,
  88. ], 200);
  89. }
  90. /**
  91. * Clears application cache
  92. *
  93. * @return \Illuminate\Http\JsonResponse
  94. */
  95. public function clear(Request $request)
  96. {
  97. $exitCode = Artisan::call('optimize:clear');
  98. return response()->json(['exit-code' => $exitCode], 200);
  99. }
  100. }