Просмотр файла app/Controllers/Admin/IpBanController.php

Размер файла: 3.25Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Controllers\Admin;
  6.  
  7. use App\Classes\Validator;
  8. use App\Models\Ban;
  9. use App\Models\User;
  10. use Illuminate\Http\Request;
  11.  
  12. class IpBanController extends AdminController
  13. {
  14. /**
  15. * Конструктор
  16. */
  17. public function __construct()
  18. {
  19. parent::__construct();
  20.  
  21. if (! isAdmin(User::ADMIN)) {
  22. abort(403, __('errors.forbidden'));
  23. }
  24. }
  25.  
  26. /**
  27. * Главная страница
  28. *
  29. * @param Request $request
  30. * @param Validator $validator
  31. *
  32. * @return string
  33. */
  34. public function index(Request $request, Validator $validator): string
  35. {
  36. if ($request->isMethod('post')) {
  37. $ip = $request->input('ip');
  38.  
  39. $validator->equal($request->input('token'), $_SESSION['token'], __('validator.token'))
  40. ->ip($ip, ['ip' => __('admin.ipbans.ip_invalid')]);
  41.  
  42. $duplicate = Ban::query()->where('ip', $ip)->first();
  43. $validator->empty($duplicate, ['ip' => __('admin.ipbans.ip_exists')]);
  44.  
  45. if ($validator->isValid()) {
  46. Ban::query()->create([
  47. 'ip' => $ip,
  48. 'user_id' => getUser('id'),
  49. 'created_at' => SITETIME,
  50. ]);
  51.  
  52. ipBan(true);
  53.  
  54. setFlash('success', __('admin.ipbans.ip_success_added'));
  55. redirect('/admin/ipbans');
  56. } else {
  57. setInput($request->all());
  58. setFlash('danger', $validator->getErrors());
  59. }
  60. }
  61.  
  62. $logs = Ban::query()
  63. ->orderByDesc('created_at')
  64. ->with('user')
  65. ->paginate(setting('ipbanlist'));
  66.  
  67. return view('admin/ipbans/index', compact('logs'));
  68. }
  69.  
  70. /**
  71. * Удаление ip
  72. *
  73. * @param Request $request
  74. * @param Validator $validator
  75. *
  76. * @return void
  77. */
  78. public function delete(Request $request, Validator $validator): void
  79. {
  80. $page = int($request->input('page', 1));
  81. $del = intar($request->input('del'));
  82.  
  83. $validator->equal($request->input('token'), $_SESSION['token'], __('validator.token'))
  84. ->true($del, __('validator.deletion'));
  85.  
  86. if ($validator->isValid()) {
  87. Ban::query()->whereIn('id', $del)->delete();
  88. ipBan(true);
  89.  
  90. setFlash('success', __('admin.ipbans.ip_selected_deleted'));
  91. } else {
  92. setFlash('danger', $validator->getErrors());
  93. }
  94.  
  95. redirect('/admin/ipbans?page=' . $page);
  96. }
  97.  
  98. /**
  99. * Очистка ip
  100. *
  101. * @param Request $request
  102. * @param Validator $validator
  103. *
  104. * @return void
  105. */
  106. public function clear(Request $request, Validator $validator): void
  107. {
  108. $validator
  109. ->equal($request->input('token'), $_SESSION['token'], __('validator.token'))
  110. ->true(isAdmin(User::BOSS), __('main.page_only_owner'));
  111.  
  112. if ($validator->isValid()) {
  113. Ban::query()->truncate();
  114. ipBan(true);
  115.  
  116. setFlash('success', __('admin.ipbans.ip_success_cleared'));
  117. } else {
  118. setFlash('danger', $validator->getErrors());
  119. }
  120.  
  121. redirect('/admin/ipbans');
  122. }
  123. }