Просмотр файла app/Http/Controllers/HomeController.php

Размер файла: 3.19Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Http\Controllers;
  6.  
  7. use App\Models\Ban;
  8. use Gregwar\Captcha\PhraseBuilder;
  9. use Gregwar\Captcha\CaptchaBuilder;
  10. use Illuminate\Http\RedirectResponse;
  11. use Illuminate\Http\Request;
  12. use Illuminate\View\View;
  13. use Symfony\Component\HttpFoundation\Response;
  14.  
  15. class HomeController extends Controller
  16. {
  17. /**
  18. * Главная страница
  19. *
  20. * @return View
  21. */
  22. public function index(): View
  23. {
  24. return view('index');
  25. }
  26.  
  27. /**
  28. * Закрытие сайта
  29. *
  30. * @return Response
  31. */
  32. public function closed()
  33. {
  34. if (setting('closedsite') !== 2) {
  35. return redirect('/');
  36. }
  37.  
  38. return response()->view('pages/closed', [], 503);
  39. }
  40.  
  41. /**
  42. * Поиск по сайту
  43. *
  44. * @return View
  45. */
  46. public function search(): View
  47. {
  48. return view('search/index');
  49. }
  50.  
  51. /**
  52. * Бан по IP
  53. *
  54. * @param Request $request
  55. *
  56. * @return Response
  57. */
  58. public function ipban(Request $request): Response
  59. {
  60. $ban = Ban::query()
  61. ->where('ip', getIp())
  62. ->first();
  63.  
  64. if (! $ban) {
  65. ipBan(true);
  66.  
  67. return redirect('/');
  68. }
  69.  
  70. if (
  71. ! $ban->user_id &&
  72. $ban->created_at < strtotime('-1 minute', SITETIME) &&
  73. $request->isMethod('post') &&
  74. captchaVerify()
  75. ) {
  76. $ban->delete();
  77. ipBan(true);
  78.  
  79. setFlash('success', __('pages.ip_success_unbanned'));
  80.  
  81. return redirect('/');
  82. }
  83.  
  84. return response()->view('pages/ipban', compact('ban'), 429);
  85. }
  86.  
  87. /**
  88. * Защитная картинка
  89. *
  90. * @param Request $request
  91. *
  92. * @return Response
  93. */
  94. public function captcha(Request $request): Response
  95. {
  96. $phrase = new PhraseBuilder();
  97. $phrase = $phrase->build(setting('captcha_maxlength'), setting('captcha_symbols'));
  98.  
  99. $builder = new CaptchaBuilder($phrase);
  100. $builder->setMaxOffset(setting('captcha_offset'));
  101. $builder->setMaxAngle(setting('captcha_angle'));
  102. $builder->setDistortion(setting('captcha_distortion'));
  103. $builder->setInterpolation(setting('captcha_interpolation'));
  104.  
  105. $request->session()->put('protect', $builder->getPhrase());
  106.  
  107. return response($builder->build()->get())->header('Content-Type', 'image/jpeg');
  108. }
  109.  
  110. /**
  111. * Быстрое изменение языка
  112. *
  113. * @param string $lang
  114. * @param Request $request
  115. *
  116. * @return RedirectResponse
  117. */
  118. public function language(string $lang, Request $request): RedirectResponse
  119. {
  120. $return = $request->input('return');
  121. $languages = array_map('basename', glob(resource_path('lang/*'), GLOB_ONLYDIR));
  122.  
  123. if (preg_match('/^[a-z]+$/', $lang) && in_array($lang, $languages, true)) {
  124. if ($user = getUser()) {
  125. $user->update([
  126. 'language' => $lang,
  127. ]);
  128. } else {
  129. $request->session()->put('language', $lang);
  130. }
  131. }
  132.  
  133. return redirect($return ?? '/');
  134. }
  135. }