generated from mirzaev/pot
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | ||
| 
 | ||
| declare(strict_types=1);
 | ||
| 
 | ||
| namespace mirzaev\site\account\controllers;
 | ||
| 
 | ||
| // Файлы проекта
 | ||
| use mirzaev\site\account\controllers\core,
 | ||
|   mirzaev\site\account\controllers\traits\errors,
 | ||
|   mirzaev\site\account\models\generators\password;
 | ||
| 
 | ||
| // Встроенные библиотеки
 | ||
| use exception;
 | ||
| 
 | ||
| /**
 | ||
|  * Контроллер API
 | ||
|  *
 | ||
|  * @package mirzaev\site\account\controllers
 | ||
|  * @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
 | ||
|  */
 | ||
| final class api extends core
 | ||
| {
 | ||
|   use errors;
 | ||
| 
 | ||
|   /**
 | ||
|    * Сгенерировать пароль
 | ||
|    *
 | ||
|    * @param array $parameters Параметры запроса
 | ||
|    * 
 | ||
|    * @return string JSON-документ с запрашиваемыми параметрами
 | ||
|    */
 | ||
|   public function password(array $parameters = []): string
 | ||
|   {
 | ||
|     // Инициализация буфера ответа
 | ||
|     $buffer = [];
 | ||
| 
 | ||
|     // Инициализация реестра возвращаемых параметров
 | ||
|     $return = explode(',', $parameters['return'], 50);
 | ||
| 
 | ||
|     // Инициализация значений по умолчению
 | ||
|     $parameters['length'] ??= 6;
 | ||
|     $parameters['type'] ??= 'classic';
 | ||
| 
 | ||
|     try {
 | ||
|       // Проверка параметров на соответствие требованиям
 | ||
|       if (($parameters['length'] = (int) $parameters['length']) === 0) throw new exception('Минимальная длина генерируемого пароля: 1 символ');
 | ||
|       if ($parameters['type'] !== 'classic' && $parameters['type'] !== 'mnemonic') throw new exception('Допустимые типы пароля: "mnemonic", "classic"');
 | ||
| 
 | ||
|       // Генерация ответа по запрашиваемым параметрам
 | ||
|       foreach ($return as $parameter) match ($parameter) {
 | ||
|         'password' => $buffer['password'] = password::{$parameters['type'] ?? 'classic'}($parameters['length'], $this->errors),
 | ||
|         'errors' => null,
 | ||
|         default => throw new exception("Параметр не найден: $parameter")
 | ||
|       };
 | ||
|     } catch (exception $e) {
 | ||
|       // Запись в журнал ошибок
 | ||
|       $this->errors[] = [
 | ||
|         'text' => $e->getMessage(),
 | ||
|         'file' => $e->getFile(),
 | ||
|         'line' => $e->getLine(),
 | ||
|         'stack' => $e->getTrace()
 | ||
|       ];
 | ||
|     }
 | ||
| 
 | ||
|     // Запись реестра ошибок в буфер ответа
 | ||
|     if (in_array('errors', $return, true)) $buffer['errors'] = self::parse_only_text($this->errors);
 | ||
| 
 | ||
|     // Запись заголовка ответа
 | ||
|     header('Content-Type: application/json');
 | ||
| 
 | ||
|     return json_encode($buffer);
 | ||
|   }
 | ||
| }
 |