hedera-web/web/rest.php

109 lines
2.2 KiB
PHP
Executable File

<?php
require_once ('vn/hedera/web.php');
require_once ('vn/rest/rest.php');
use Vn\Lib\Locale;
use Vn\Rest;
use Vn\Hedera\Web;
ini_set ('log_errors', TRUE);
ini_set ('error_log', Vn\Hedera\_LOG_DIR .'/hedera-web.log');
function myExitHandler ()
{
Web::deinit ();
Rest\Service::sendReply ();
}
function myGlobalErrorHandler ()
{
Rest\Service::setError ('PHP', 'internalError', 'An internal error has occurred');
myExitHandler ();
exit (0);
}
function myErrorHandler ($errno, $message, $file, $line, $context)
{
error_log ("$file:$line: $message");
switch ($errno)
{
case E_USER_ERROR:
myGlobalErrorHandler ();
default:
Rest\Service::addWarning ('PHP', 'internalMessage', 'Something has gone wrong');
}
return TRUE;
}
function myExceptionHandler ($e)
{
error_log ($e->getFile () .':'. $e->getLine () .': '. $e->getMessage ());
myGlobalErrorHandler ();
}
set_error_handler ('myErrorHandler', E_ALL);
set_exception_handler ('myExceptionHandler');
Rest\Service::init ();
try {
Web::init ();
if (!Web::login ())
throw new Rest\Exception ('Auth', 'sessionExpired', s('SessionExpired'));
// Checking the client version
if (isset ($_COOKIE['hedera_version']))
{
$clientVersion = (float) $_COOKIE['hedera_version'];
if ($clientVersion < Web::getVersion ())
{
Web::sysInit ();
$row = Web::$sysConn->getRow (
'SELECT critical, changelog FROM version LIMIT 1');
if (!$row || $row['critical'])
throw new Rest\Exception ('Version', 'criticalVersion', $row['changelog']);
else
Rest\Service::addWarning ('Version', 'newVersion', $row['changelog']);
}
}
// Getting the action
$action = NULL;
if (isset ($_REQUEST['action']))
$action = $_REQUEST['action'];
if ($action && Vn\Hedera\checkToken ($action))
{
$actionFile = 'rest/'. $action .'.php';
if (file_exists ($actionFile))
{
Locale::addPath ('rest/'. $action);
require_once ($actionFile);
$module = new RestMod (Web::$conn);
Rest\Service::setData ($module->run ());
}
else
throw new Rest\Exception ('Rest', 'invalidAction', s('InvalidAction'));
}
}
catch (Rest\Exception $e)
{
Rest\Service::setError ($e->getDomain (), $e->getCode (), $e->getMessage ());
}
myExitHandler ();
?>