portal.mkgtu.ru/api/modules/moderator/Module.php

78 lines
2.3 KiB
PHP
Raw Normal View History

2024-03-28 09:51:45 +03:00
<?php
namespace api\modules\moderator;
use common\modules\abiturient\models\bachelor\AdmissionCampaign;
use Yii;
use yii\web\ForbiddenHttpException;
use yii\web\Request;
use yii\web\Response;
class Module extends \yii\base\Module
{
public $controllerNamespace = 'moderatorApi\modules\v1\controllers';
public function init()
{
Yii::$app->response->format = Response::FORMAT_XML;
$this->modules = [
'v1' => [
'class' => \api\modules\moderator\modules\v1\Module::class,
],
];
parent::init();
}
public function beforeAction($action)
{
$isMasterSystemManagerEnabled = Yii::$app->configurationManager->getMasterSystemManagerSetting('use_master_system_manager_interface');
if (!$isMasterSystemManagerEnabled) {
throw new ForbiddenHttpException('Использование интерфейса модератора запрещено. Обратитесь к администратору системы для уточнения настроек.');
}
$request = Yii::$app->request;
$header = $request->getHeaders()->get('Authorization');
if (empty($header)) {
throw new ForbiddenHttpException('Не передан заголовок авторизации.');
}
if (preg_match("/AdmissionCampaign ([a-zA-Z0-9\-_]+)/", $header, $matches) !== 1) {
throw new ForbiddenHttpException('Аутентификация невозможна. Некорректный хэдер авторизации.');
}
$token = $matches[1] ?? null;
if (is_null($token)) {
$this->throwForbiddenException();
}
$campaign = AdmissionCampaign::findOne([
'api_token' => $token,
'archive' => false
]);
if (is_null($campaign)) {
$this->throwForbiddenException();
}
return parent::beforeAction($action);
}
private function throwForbiddenException()
{
throw new ForbiddenHttpException('Отказано в доступе. Убедитесь, что в панели администратора токены приемных кампаний были обновлены.');
}
}