generated from mirzaev/pot
большая разработка аутентификации
This commit is contained in:
73
mirzaev/site/account/system/controllers/api.php
Normal file
73
mirzaev/site/account/system/controllers/api.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user