Skip to content
Snippets Groups Projects
AuthenticationController.php 3.16 KiB
Newer Older
  • Learn to ignore specific revisions
  • Florian Azizian's avatar
    Florian Azizian committed
    <?php
    
    /**
     * Copyright Maarch since 2008 under licence GPLv3.
     * See LICENCE.txt file at the root folder for more details.
     * This file is part of Maarch software.
     */
    
    /**
     * @brief Authentication Controller
     *
     * @author dev@maarch.org
     */
    
    namespace SrcCore\controllers;
    
    
    Damien's avatar
    Damien committed
    use History\controllers\HistoryController;
    
    Damien's avatar
    Damien committed
    use Respect\Validation\Validator;
    use Slim\Http\Request;
    use Slim\Http\Response;
    
    Florian Azizian's avatar
    Florian Azizian committed
    use SrcCore\models\AuthenticationModel;
    
    Damien's avatar
    Damien committed
    use SrcCore\models\CoreConfigModel;
    use SrcCore\models\LangModel;
    
    Damien's avatar
    Damien committed
    use User\controllers\UserController;
    
    use User\models\UserModel;
    
    Florian Azizian's avatar
    Florian Azizian committed
    
    class AuthenticationController
    {
        public static function authentication()
        {
    
            $id = null;
    
    Florian Azizian's avatar
    Florian Azizian committed
            if (!empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_PW'])) {
    
    Damien's avatar
    Damien committed
                if (AuthenticationModel::authentication(['email' => $_SERVER['PHP_AUTH_USER'], 'password' => $_SERVER['PHP_AUTH_PW']])) {
    
                    $user = UserModel::getByEmail(['select' => ['id'], 'email' => $_SERVER['PHP_AUTH_USER']]);
                    $id = $user['id'];
    
    Damien's avatar
    Damien committed
                    new LangModel(['language' => CoreConfigModel::getLanguage()]);
    
    Florian Azizian's avatar
    Florian Azizian committed
                }
            } else {
                $cookie = AuthenticationModel::getCookieAuth();
                if (!empty($cookie) && AuthenticationModel::cookieAuthentication($cookie)) {
    
                    AuthenticationModel::setCookieAuth(['id' => $cookie['id']]);
                    $id = $cookie['id'];
    
    Damien's avatar
    Damien committed
                    new LangModel(['language' => $cookie['lang']]);
    
            return $id;
    
    Florian Azizian's avatar
    Florian Azizian committed
        }
    
    Damien's avatar
    Damien committed
    
        public static function log(Request $request, Response $response)
        {
            $data = $request->getParams();
    
    
    Damien's avatar
    Damien committed
            $check = Validator::stringType()->notEmpty()->validate($data['email']);
    
    Damien's avatar
    Damien committed
            $check = $check && Validator::stringType()->notEmpty()->validate($data['password']);
            if (!$check) {
                return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
            }
    
    
    Damien's avatar
    Damien committed
            if (!AuthenticationModel::authentication(['email' => $data['email'], 'password' => $data['password']])) {
    
    Damien's avatar
    Damien committed
                return $response->withStatus(401)->withJson(['errors' => 'Authentication Failed']);
            }
    
    
    Damien's avatar
    Damien committed
            $user = UserModel::getByEmail(['email' => $data['email'], 'select' => ['id', 'mode']]);
    
            if ($user['mode'] != 'standard') {
                return $response->withStatus(403)->withJson(['errors' => 'Login unauthorized']);
            }
    
            AuthenticationModel::setCookieAuth(['id' => $user['id']]);
    
            $GLOBALS['id'] = $user['id'];
    
    Damien's avatar
    Damien committed
            HistoryController::add([
                'tableName' => 'users',
    
                'recordId'  => $user['id'],
    
    Damien's avatar
    Damien committed
                'eventType' => 'AUTHENTICATION',
                'info'      => "userLogin"
            ]);
    
    
    Damien's avatar
    Damien committed
            return $response->withJson(['user' => UserController::getUserInformationsById(['id' => $user['id']])]);
    
    Damien's avatar
    Damien committed
        }
    
    
        public static function logout(Request $request, Response $response)
        {
            AuthenticationModel::deleteCookieAuth();
    
    
    Damien's avatar
    Damien committed
            HistoryController::add([
                'tableName' => 'users',
    
                'recordId'  => $GLOBALS['id'],
    
    Damien's avatar
    Damien committed
                'eventType' => 'AUTHENTICATION',
                'info'      => "userLogout"
            ]);
    
    
            return $response->withJson(['success' => 'success']);
        }
    
    Florian Azizian's avatar
    Florian Azizian committed
    }