*/ class core extends controller { /** * Session * * @var session|null $session Instance of the session */ protected readonly session $session; /** * Language * * @var language $language Language */ protected language $language = language::en; /** * Response * * @see https://wiki.php.net/rfc/property-hooks (find a table about backed and virtual hooks) * * @var response $response Response */ protected response $response { // Read get => $this->response ??= $this->request->response(); } /** * Errors * * @var array $errors Registry of errors */ protected array $errors = [ 'session' => [], 'account' => [] ]; /** * Constructor * * @param minimal $core Instance of the MINIMAL * @param bool $initialize Initialize a controller? * * @return void */ public function __construct(minimal $core, bool $initialize = true) { // Blocking requests from CloudFlare (better to write this blocking into nginx config file) if (isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT'] === 'nginx-ssl early hints') return status::bruh->label; // For the extends system parent::__construct(core: $core); if ($initialize) { // Requestet initializing // Initializing core of the models new models(); // Initializing of the date until which the session will be active $expires = strtotime('+1 week'); // Initializing of default value of hash of the session $_COOKIE["session"] ??= null; // Initializing of session $this->session = new session($_COOKIE["session"], $expires, $this->errors['session']); // Handle a problems with initializing a session if (!empty($this->errors['session'])) die; else if ($_COOKIE["session"] !== $this->session->hash) { // Hash of the session is changed (implies that the session has expired and recreated) // Write a new hash of the session to cookies setcookie( 'session', $this->session->hash, [ 'expires' => $expires, 'path' => '/', 'secure' => true, 'httponly' => true, 'samesite' => 'strict' ] ); } // Initializing of preprocessor of views $this->view = new templater($this->session); } } }