generated from mirzaev/pot
	
		
			
				
	
	
		
			101 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | ||
| 
 | ||
| declare(strict_types=1);
 | ||
| 
 | ||
| namespace mirzaev\site\account\controllers;
 | ||
| 
 | ||
| // Файлы проекта
 | ||
| use mirzaev\site\account\views\manager;
 | ||
| use mirzaev\site\account\models\core as models;
 | ||
| use mirzaev\site\account\models\account_model as account;
 | ||
| use mirzaev\site\account\models\session_model as session;
 | ||
| 
 | ||
| // Библиотека для ArangoDB
 | ||
| use ArangoDBClient\Document as _document;
 | ||
| 
 | ||
| // Фреймворк PHP
 | ||
| use mirzaev\minimal\controller;
 | ||
| 
 | ||
| // Фреймворк ВКонтакте
 | ||
| use mirzaev\vk\core as vk;
 | ||
| use mirzaev\vk\robots\user as robot;
 | ||
| 
 | ||
| /**
 | ||
|  * Ядро контроллеров
 | ||
|  *
 | ||
|  * @package mirzaev\site\account\controllers
 | ||
|  * @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
 | ||
|  */
 | ||
| class core extends controller
 | ||
| {
 | ||
|     /**
 | ||
|      * Переменные окружения
 | ||
|      */
 | ||
|     protected robot $vk;
 | ||
| 
 | ||
|     /**
 | ||
|      * Переменные окружения
 | ||
|      */
 | ||
|     protected array $variables = [];
 | ||
| 
 | ||
|     /**
 | ||
|      * Конструктор
 | ||
|      *
 | ||
|      * @return void
 | ||
|      */
 | ||
|     public function __construct()
 | ||
|     {
 | ||
|         parent::__construct();
 | ||
| 
 | ||
|         // Инициализация ядра моделей (соединение с базой данных...)
 | ||
|         new models();
 | ||
| 
 | ||
|         // Инициализация журнала ошибок
 | ||
|         $this->variables['errors'] = [
 | ||
|             'session' => [],
 | ||
|             'account' => [],
 | ||
|             'vk' => []
 | ||
|         ];
 | ||
| 
 | ||
|         // Инициализация даты до которой будет активна сессия
 | ||
|         $expires = time() + 604800;
 | ||
| 
 | ||
|         // Инициализация сессии (без журналирования)
 | ||
|         $this->variables['session'] = new session($_COOKIE["session"] ?? null, $expires) ?? header('Location: https://mirzaev.sexy/error?code=500&text=Не+удалось+инициализировать+сессию');
 | ||
| 
 | ||
|         if ($_COOKIE["session"] ?? null !== $this->variables['session']->hash) {
 | ||
|             // Изменился хеш сессии (подразумевается, что сессия устарела)
 | ||
| 
 | ||
|             // Запись хеша новой сессии
 | ||
|             setcookie('session', $this->variables['session']->hash, [
 | ||
|                 'expires' => $expires,
 | ||
|                 'domain' => 'mirzaev.sexy',
 | ||
|                 'path' => '/',
 | ||
|                 'secure' => true,
 | ||
|                 'httponly' => true,
 | ||
|                 'samesite' => 'strict'
 | ||
|             ]);
 | ||
|         }
 | ||
| 
 | ||
|         // Инициализация аккаунта (без журналирования)
 | ||
|         $this->variables['account'] = $this->variables['session']->account();
 | ||
| 
 | ||
|         if ($this->variables['account'] instanceof _document) {
 | ||
|             // Инициализирован аккаунт
 | ||
| 
 | ||
|             // Инициализация аккаунта ВКонтакте (без журналирования)
 | ||
|             $this->variables['vk'] = account::vk($this->variables['account']);
 | ||
| 
 | ||
|             if ($this->variables['vk'] instanceof _document) {
 | ||
|                 // Инициализирован аккаунт ВКонтакте
 | ||
| 
 | ||
|                 // Инициализация робота для аккаунта ВКонтакте
 | ||
|                 $this->vk = vk::init()->user(key: $this->variables['vk']->access['key']);
 | ||
|             } else unset($this->variables['account'], $this->variables['vk']);
 | ||
|         }
 | ||
| 
 | ||
|         // Инициализация препроцессора представления
 | ||
|         $this->view = new manager;
 | ||
|     }
 | ||
| }
 |