/** * @param $actionId int El id de la acción * @param $authToken string El token de seguridad * @param null $userPass string La clave del usuario * @throws SPException */ public function __construct($actionId, $authToken, $userPass = null) { if (!Auth::checkAuthToken($actionId, $authToken)) { throw new SPException(SPException::SP_CRITICAL, _('Acceso no permitido')); } $this->_userId = ApiTokens::getUserIdForToken($authToken); $this->_actionId = $actionId; $this->_auth = true; if (!is_null($userPass)) { $userLogin = UserUtil::getUserLoginById($this->_userId); $User = new User(); $User->setUserId($this->_userId); $User->setUserLogin($userLogin); $User->setUserPass($userPass); if (Auth::authUserMySQL($userLogin, $userPass) && !UserUtil::checkUserIsDisabled($userLogin) && UserPass::checkUserMPass($User) && UserPass::checkUserUpdateMPass($userLogin) && !$User->isUserChangePass()) { $this->_mPass = $User->getUserMPass(true); } else { throw new SPException(SPException::SP_CRITICAL, _('Acceso no permitido')); } } Session::setUserId($this->_userId); }
// Autentificamos con la BBDD if (!SP\Auth::authUserMySQL($userLogin, $userPass)) { $Log->addDescription(_('Login incorrecto')); $Log->addDescription(sprintf('%s: %s', _('Usuario'), $userLogin)); $Log->writeLog(); SP\Response::printJSON(_('Usuario/Clave incorrectos')); } } } } } // Comprobar si concide el login con la autentificación del servidor web if (!Auth::checkServerAuthUser($userLogin)) { $Log->addDescription(_('Login incorrecto')); $Log->addDescription(sprintf('%s: %s', _('Usuario'), $userLogin)); $Log->addDescription(sprintf('%s: %s (%s)', _('Autentificación'), Auth::getServerAuthType(), Auth::getServerAuthUser())); $Log->writeLog(); SP\Response::printJSON(_('Usuario/Clave incorrectos')); } // Comprobar si el usuario está deshabilitado if (UserUtil::checkUserIsDisabled($userLogin)) { $Log->addDescription(_('Usuario deshabilitado')); $Log->addDescription(sprintf('%s: %s', _('Usuario'), $userLogin)); $Log->writeLog(); SP\Response::printJSON(_('Usuario deshabilitado')); } // Obtenemos los datos del usuario if (!$User->getUserInfo()) { $Log->addDescription(_('Error al obtener los datos del usuario de la BBDD')); $Log->writeLog(); SP\Response::printJSON(_('Error interno'));
/** * Inicializar la aplicación. * Esta función inicializa las variables de la aplicación y muestra la página * según el estado en el que se encuentre. */ public static function start() { self::setIncludes(); if (version_compare(PHP_VERSION, '5.1.2', '>=')) { // Registro del cargador de clases (PHP >= 5.1.2) if (version_compare(PHP_VERSION, '5.3.0', '>=')) { spl_autoload_register('SP\\Init::loadClass', true); } else { spl_autoload_register(array('SP\\Init', 'loadClass')); } } else { /** * Fall back to traditional autoload for old PHP versions * * @param string $classname The name of the class to load */ function __autoload($classname) { \SP\Init::loadClass($classname); } } date_default_timezone_set('UTC'); // Intentar desactivar magic quotes. if (get_magic_quotes_gpc() == 1) { ini_set('magic_quotes_runtime', 0); } // Variables de autentificación self::setAuth(); // Establecer el nivel de logging self::setLogging(); // Cargar las extensiones self::loadExtensions(); // Iniciar la sesión de PHP self::startSession(); // Establecer las rutas de la aplicación self::setPaths(); // Cargar el lenguaje Language::setLanguage(); // Establecer el tema de sysPass Themes::setTheme(); // Comprobar si es necesario cambiar a HTTPS self::checkHttps(); // Comprobar si es necesario inicialización if (self::checkInitSourceInclude()) { return; } // Comprobar la configuración self::checkConfig(); // Comprobar si está instalado self::checkInstalled(); // Comprobar si el modo mantenimiento está activado self::checkMaintenanceMode(); // Comprobar si la Base de datos existe if (!DB::checkDatabaseExist()) { self::initError(_('Error en la verificación de la base de datos')); } // Comprobar si es cierre de sesión self::checkLogout(); // Comprobar la versión y actualizarla self::checkVersion(); // Inicializar la sesión self::initSession(); // Comprobar acciones en URL self::checkPreLoginActions(); // Intentar establecer el tiempo de vida de la sesión en PHP @ini_set('gc_maxlifetime', (string) self::getSessionLifeTime()); if (!Config::getValue("installed", false)) { Session::setUserId(''); } // Comprobar si se ha identificado mediante el servidor web y el usuario coincide if (self::isLoggedIn() && !Auth::checkServerAuthUser(Session::getUserLogin())) { self::logout(); } // Manejar la redirección para usuarios logeados if (Request::analyze('redirect_url', '', true) && self::isLoggedIn()) { $location = 'index.php'; // Denegar la redirección si la URL contiene una @ // Esto previene redirecciones como ?redirect_url=:user@domain.com if (strpos($location, '@') === false) { header('Location: ' . $location); return; } } // Volver a cargar la configuración si se recarga la página if (Request::checkReload()) { Config::readConfig(); // Restablecer el idioma y el tema visual Language::setLanguage(); Themes::setTheme(); } if (self::isLoggedIn() || Request::analyze('isAjax', false, true)) { return; } // El usuario no está logado y no es una petición, redirigir al login self::goLogin(); }