Exemplo n.º 1
0
 /**
  * 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);
         }
     }
     error_reporting(E_ALL | E_STRICT);
     if (defined('DEBUG') && DEBUG) {
         ini_set('display_errors', 1);
     }
     date_default_timezone_set('UTC');
     // Intentar desactivar magic quotes.
     if (get_magic_quotes_gpc() == 1) {
         ini_set('magic_quotes_runtime', 0);
     }
     // Copiar la cabecera http de autentificación para apache+php-fcgid
     if (isset($_SERVER['HTTP_XAUTHORIZATION']) && !isset($_SERVER['HTTP_AUTHORIZATION'])) {
         $_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['HTTP_XAUTHORIZATION'];
     }
     // Establecer las cabeceras de autentificación para apache+php-cgi
     if (isset($_SERVER['HTTP_AUTHORIZATION']) && preg_match('/Basic\\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $matches)) {
         list($name, $password) = explode(':', base64_decode($matches[1]), 2);
         $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
         $_SERVER['PHP_AUTH_PW'] = strip_tags($password);
     }
     // Establecer las cabeceras de autentificación para que apache+php-cgi funcione si la variable es renombrada por apache
     if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION']) && preg_match('/Basic\\s+(.*)$/i', $_SERVER['REDIRECT_HTTP_AUTHORIZATION'], $matches)) {
         list($name, $password) = explode(':', base64_decode($matches[1]), 2);
         $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
         $_SERVER['PHP_AUTH_PW'] = strip_tags($password);
     }
     // Establecer el modo debug si una sesión de xdebug está activa
     if (isset($_COOKIE['XDEBUG_SESSION']) && !defined('DEBUG')) {
         define('DEBUG', true);
     }
     // Establecer el nivel de logging
     if (defined('DEBUG') && DEBUG) {
         //            error_log('sysPass DEBUG');
         error_reporting(E_ALL);
         ini_set('display_errors', 'On');
     } else {
         error_reporting(E_ALL & ~(E_DEPRECATED | E_STRICT | E_NOTICE));
         ini_set('display_errors', 'Off');
     }
     // 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
     $sessionLifeTime = self::getSessionLifeTime();
     @ini_set('gc_maxlifetime', (string) $sessionLifeTime);
     if (!Config::getValue("installed", false)) {
         Session::setUserId('');
     }
     if (isset($_SERVER['PHP_AUTH_USER']) && Session::getUserId() && $_SERVER['PHP_AUTH_USER'] != Session::getUserId()) {
         self::logout();
     }
     // Manejar la redirección para usuarios logeados
     if (Request::analyze('redirect_url', '', true) && self::isLoggedIn()) {
         $location = 'index.php';
         // Denegar la regirecció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();
 }
Exemplo n.º 2
0
 /**
  * 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();
 }