Просмотр файла app/Classes/Application.php

Размер файла: 3.66Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Classes;
  6.  
  7. use App\Models\Login;
  8. use App\Models\Setting;
  9. use DI\Container;
  10. use FastRoute\Dispatcher;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Str;
  13.  
  14. class Application
  15. {
  16. /**
  17. * Application constructor
  18. */
  19. public function __construct()
  20. {
  21. if (empty(defaultSetting('app_installed')) && file_exists(HOME . '/install/')) {
  22. redirect('/install/index.php');
  23. }
  24.  
  25. session_start();
  26.  
  27. $this->cookieAuth();
  28. $this->setSetting();
  29. }
  30.  
  31. /**
  32. * Запускает приложение
  33. */
  34. public function run(): void
  35. {
  36. $router = $this->getRouter();
  37.  
  38. switch ($router[0]) {
  39. case Dispatcher::FOUND:
  40. echo $this->call($router);
  41. break;
  42. case Dispatcher::METHOD_NOT_ALLOWED:
  43. abort(405);
  44. break;
  45. default:
  46. abort(404);
  47. }
  48. }
  49.  
  50. /**
  51. * Вызывает контроллер
  52. *
  53. * @param array $router
  54. * @return mixed
  55. */
  56. private function call(array $router)
  57. {
  58. [, $controller, $params] = $router;
  59.  
  60. if (isset($params['action'])) {
  61. $controller[1] = $params['action'];
  62. }
  63.  
  64. $container = new Container();
  65. $container->set(Request::class, request());
  66.  
  67. return $container->call($controller, $params);
  68. }
  69.  
  70. /**
  71. * Возвращает роутеры
  72. *
  73. * @return array
  74. */
  75. private function getRouter(): array
  76. {
  77. $dispatcher = require APP . '/routes.php';
  78.  
  79. return $dispatcher->dispatch(request()->getMethod(), request()->getPathInfo());
  80. }
  81.  
  82. /**
  83. * Авторизует по кукам
  84. *
  85. * @return void
  86. */
  87. private function cookieAuth(): void
  88. {
  89. if (empty($_SESSION['id']) && isset($_COOKIE['login'], $_COOKIE['password'])) {
  90. $login = $_COOKIE['login'];
  91. $password = $_COOKIE['password'];
  92.  
  93. $user = getUserByLogin($login);
  94.  
  95. if ($user && $login === $user->login && $password === md5($user->password . config('app.key'))) {
  96. $_SESSION['id'] = $user->id;
  97. $_SESSION['password'] = md5(config('app.key') . $user->password);
  98. $_SESSION['online'] = null;
  99.  
  100. $user->saveVisit(Login::COOKIE);
  101. }
  102. }
  103. }
  104.  
  105. /**
  106. * Устанавливает настройки
  107. *
  108. * @return void
  109. */
  110. private function setSetting(): void
  111. {
  112. $user = getUser();
  113.  
  114. $userSets['language'] = $user->language ?? defaultSetting('language');
  115. $userSets['themes'] = $user->themes ?? defaultSetting('themes');
  116.  
  117. if (isset($_SESSION['language'])) {
  118. $userSets['language'] = $_SESSION['language'];
  119. }
  120.  
  121. if (! file_exists(RESOURCES . '/lang/' . $userSets['language'])) {
  122. $userSets['language'] = defaultSetting('language');
  123. }
  124.  
  125. if (! file_exists(HOME . '/themes/' . $userSets['themes'])) {
  126. $userSets['themes'] = defaultSetting('themes');
  127. }
  128.  
  129. Setting::setUserSettings($userSets);
  130.  
  131. if ($user) {
  132. $user->checkAccess();
  133. $user->updatePrivate();
  134. $user->gettingBonus();
  135. }
  136.  
  137. /* Установка сессионных переменных */
  138. if (empty($_SESSION['token'])) {
  139. $_SESSION['token'] = Str::random(8);
  140. }
  141.  
  142. if (empty($_SESSION['protect'])) {
  143. $_SESSION['protect'] = mt_rand(10000, 99999);
  144. }
  145.  
  146. if (empty($_SESSION['hits'])) {
  147. $_SESSION['hits'] = 0;
  148. }
  149. }
  150. }