Просмотр файла isp_api/index.php

Размер файла: 8.21Kb
<?php

$microtime = microtime(1);
$server = 'localhost';
$session_lifetime = 1800;

// ----------------------------------- Отладка -------------------------------- //
error_reporting(32767);
ini_set('display_errors', 1);
// ----------------------------------- Отладка -------------------------------- //

// ------------------------- Установки работы с сессиями ---------------------- //
ini_set('arg_separator.output', '&amp;');
ini_set('session.use_cookies', 1);
ini_set('session.use_trans_sid', 1);
ini_set('session.cookie_domain', $_SERVER['HTTP_HOST']);
ini_set('session.cookie_httponly', 1);
session_name('SID');
// ------------------------- Установки работы с сессиями ---------------------- //

// ------------- Функция запроса к API, проверка истечения сессии ------------- //
function api_query($query)
{
    $content = file_get_contents($query);
    if (strpos($content, 'Authorization required') or $content == '') {
        session_unset();
        session_destroy();
        header('Location: ?error=logon');
        ob_end_flush();
        exit();
    } else {
        return $content;
    }
}
// ------------- Функция запроса к API, проверка истечения сессии ------------- //

// ------------------- Буферизация вывода и сжатие документа ------------------ //
if (isset($_SERVER['HTTP_ACCEPT_ENCODING'])) {
    $accept_encoding = $_SERVER['HTTP_ACCEPT_ENCODING'];
} elseif (isset($_SERVER['HTTP_TE'])) {
    $accept_encoding = $_SERVER['HTTP_TE'];
} else {
    $accept_encoding = '';
}

if (strpos($accept_encoding, 'gzip')) {
    header('Content-Encoding: gzip');
    function gzencode5($data)
    {
        return gzencode($data, 5);
    }
    ob_start('gzencode5');
} elseif (strpos($accept_encoding, 'deflate')) {
    header('Content-Encoding: deflate');
    function gzdeflate5($output)
    {
        return gzdeflate($output, 5);
    }
    ob_start('gzdeflate5');
} else {
    ob_start();
}
// ------------------- Буферизация вывода и сжатие документа ------------------ //

session_start();
$func = isset($_GET['func']) ? $_GET['func'] : '';

// ---------------------- Проверка действительности сессии -------------------- //
if ($func <> '' and $func <> 'exit') {
    if (empty($_SESSION['auth']) or empty($_SESSION['lifetime']) or empty($_SESSION['username']) or empty($_SESSION['password'])) {
        session_unset();
        session_destroy();
        header('Location: ?error=logon');
        ob_end_flush();
        exit();
    } elseif ($_SESSION['auth'] == '' or $_SESSION['lifetime'] == '' or $_SESSION['username'] == '' or $_SESSION['password'] == '') {
        session_unset();
        session_destroy();
        header('Location: ?error=logon');
        ob_end_flush();
        exit();
    } elseif ($_SESSION['lifetime'] < $_SERVER['REQUEST_TIME'] - $session_lifetime) {
        session_unset();
        session_destroy();
        header('Location: ?error=expire');
        ob_end_flush();
        exit();
    } else {
        $_SESSION['lifetime'] = $_SERVER['REQUEST_TIME'];
    }
}
// ---------------------- Проверка действительности сессии -------------------- //

// --------------------------- Отключение кэширования ------------------------- //
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0');
header('Pragma: no-cache');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
// --------------------------- Отключение кэширования ------------------------- //

// -------------------- Отправка заголовка с типом документа ------------------ //
if (isset($_SERVER['HTTP_ACCEPT'])) {
    if (strpos($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml')) {
        header('Content-Type: application/xhtml+xml; charset=UTF-8');
    } else {
        header('Content-Type: text/html; charset=UTF-8');
    }
} else {
    header('Content-Type: text/html; charset=UTF-8');
}
// -------------------- Отправка заголовка с типом документа ------------------ //

echo '<!-- Coded by Azzido (ICQ: 7760598) -->';
echo "\n\n";

echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' . "\n";
echo '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">' . "\n";
echo '<head>' . "\n";
echo '<title>ISPmanager Mobile</title>' . "\n";
echo '<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />' . "\n";
echo '<link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />' . "\n";
echo '<link rel="stylesheet" type="text/css" href="style.css" />' . "\n";
echo '</head>' . "\n";
echo '<body>' . "\n";
echo '<div style="text-align:center">' . "\n";
echo '<img src="images/logo.png" alt="JaHost.Ru ISPmanager" />' . "\n";
echo '</div>' . "\n";

if ($func == '') {
    echo '<div style="text-align:center">' . "\n";
    if (empty($_POST['submit']) and (empty($_GET['username']) or empty($_GET['password']))) {
        if (isset($_GET['error'])) {
            if ($_GET['error'] == 'logon') {
                echo 'Неизвестная ошибка.<br />' . "\n";
                echo 'Авторизуйтесь повторно!<br />' . "\n";
                echo '<br />' . "\n";
            } elseif ($_GET['error'] == 'authfail') {
                echo 'Неверный пароль!<br />' . "\n";
                echo '<br />' . "\n";
            } elseif ($_GET['error'] == 'expire') {
                echo 'Сессия устарела.<br />' . "\n";
                echo 'Авторизуйтесь повторно!<br />' . "\n";
                echo '<br />' . "\n";
            }
        }

        echo '<form action="index.php" method="post">' . "\n";
        echo 'Логин:<br />' . "\n";
        echo '<input name="username" /><br />' . "\n";
        echo 'Пароль:<br />' . "\n";
        echo '<input name="password" type="password" /><br />' . "\n";
        echo '<input name="submit" type="submit" value="Войти" />' . "\n";
        echo '</form>' . "\n";
    } else {
        $content = api_query('https://' . $server . '/manager/ispmgr?func=auth&out=xml&username=' . urlencode($_REQUEST['username']) . '&password=' . urlencode($_REQUEST['password']));
        $parse_xml = simplexml_load_string($content);
        if (isset($parse_xml->auth)) {
            $_SESSION['lifetime'] = $_SERVER['REQUEST_TIME'];
            $_SESSION['auth'] = (string)$parse_xml->auth;
            $_SESSION['username'] = $_REQUEST['username'];
            $_SESSION['password'] = $_REQUEST['password'];

            $content = api_query('https://' . $server . '/manager/ispmgr?func=usrparam&out=xml&authinfo=' . urlencode($_SESSION['username']) . ':' . urlencode($_SESSION['password']));
            $parse_xml_usrparam = simplexml_load_string($content);
            $_SESSION['rows'] = (int)$parse_xml_usrparam->rows;

            if (isset($_GET['username']) and isset($_GET['password'])) {
                header('Location: ?func=menu&' . SID);
                ob_end_flush();
                exit;
            }

            echo 'Авторизация успешна!<br />' . "\n";
            echo '<a href="?func=menu">Продолжить&#187;</a>' . "\n";
        } else {
            session_unset();
            session_destroy();
            header('Location: ?error=authfail');
            ob_end_flush();
            exit();
        }
    }
    echo '</div>' . "\n";
} elseif (file_exists('./func/' . $func . '.php')) {
    require('./func/' . $func . '.php');
} else {
    session_unset();
    session_destroy();
    header('Location: ?error=logon');
    ob_end_flush();
    exit();
}

echo '<hr />' . "\n";
echo '<div style="text-align:center">' . "\n";
echo '&copy; &laquo;<a href="http://jahost.ru/">ДжаХост</a>&raquo; 2010';

if (date('Y') <> '2010') {
    echo '-' . date('Y');
}

echo "\n";
echo '</div>' . "\n";
echo '</body>' . "\n";
echo '</html>' . "\n";

echo "\n";
echo '<!-- ' . (microtime(1) - $microtime) . ' -->';

ob_end_flush();

?>