Просмотр файла delta_framework-main/core/api.php

Размер файла: 2.86Kb
<?php
    /**
     * Copyright (c) 2022 Roman Grinko <[email protected]>
     * Permission is hereby granted, free of charge, to any person obtaining
     * a copy of this software and associated documentation files (the
     * "Software"), to deal in the Software without restriction, including
     * without limitation the rights to use, copy, modify, merge, publish,
     * distribute, sublicense, and/or sell copies of the Software, and to
     * permit persons to whom the Software is furnished to do so, subject to
     * the following conditions:
     * The above copyright notice and this permission notice shall be included
     * in all copies or substantial portions of the Software.
     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
     * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
     * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     */

    use Core\Api\{ApiController, ApiException, ApiView};
    use Core\Models\User;

    require_once __DIR__ . '/bootstrap.php';
    session_write_close();

    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Max-Age: 6000');
    header('Content-type: text/json; charset=UTF-8;');

    /** @var array $noAuthMethods Методы, не требующие авторизации */
    $noAuthMethods = [
        'testNoAuth',
        'test',
        'testNotFound',
        'createUser', // Создание УЗ
        'getToken',   // Авторизация и получение токена
    ];

    $method = $_REQUEST['method'] ?: null;
    $token  = $_REQUEST['token'] ?: null;

    try {
        // Если вызван метод, не требующий авторизации
        if (in_array($method, $noAuthMethods, true)) {
            ApiController::$method();
            die();
        }

        if (empty($token)) {
            throw new ApiException('Не задан токен', ApiException::ERROR_TOKEN_UNDEFINED);
        }

        $userObject = User::getByToken($token);
        if ($userObject === null) {
            throw new ApiException('Токен некорректен', ApiException::ERROR_INCORRECT_TOKEN);
        }

        $apiController = new ApiController($userObject);

        // Проверяем существование метода контроллера
        if (!method_exists($apiController, $method)) {
            throw new ApiException('Метод не существует', ApiException::ERROR_METHOD_NOT_FOUND);
        }

        $apiController->$method();
    } catch (Throwable $e) {
        ApiView::outputError($e);
    }