<?php
namespace api\modules\authserver\controllers;

use api\controllers\Controller;
use api\modules\authserver\models;

class AuthenticationController extends Controller {

    public function behaviors() {
        $behaviors = parent::behaviors();
        unset($behaviors['authenticator']);

        return $behaviors;
    }

    public function verbs() {
        return [
            'authenticate' => ['POST'],
            'refresh'      => ['POST'],
            'validate'     => ['POST'],
            'signout'      => ['POST'],
            'invalidate'   => ['POST'],
        ];
    }

    public function actionAuthenticate() {
        $model = new models\AuthenticationForm();
        $model->loadByPost();

        return $model->authenticate()->getResponseData(true);
    }

    public function actionRefresh() {
        $model = new models\RefreshTokenForm();
        $model->loadByPost();

        return $model->refresh()->getResponseData(false);
    }

    public function actionValidate() {
        $model = new models\ValidateForm();
        $model->loadByPost();
        $model->validateToken();
        // В случае успеха ожидается пустой ответ. В случае ошибки же бросается исключение,
        // которое обработает ErrorHandler
    }

    public function actionSignout() {
        $model = new models\SignoutForm();
        $model->loadByPost();
        $model->signout();
        // В случае успеха ожидается пустой ответ. В случае ошибки же бросается исключение,
        // которое обработает ErrorHandler
    }

    public function actionInvalidate() {
        $model = new models\InvalidateForm();
        $model->loadByPost();
        $model->invalidateToken();
        // В случае успеха ожидается пустой ответ. В случае ошибки же бросается исключение,
        // которое обработает ErrorHandler
    }

}