You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
4.2 KiB
179 lines
4.2 KiB
<?php
|
|
use function Hestiacp\quoteshellarg\quoteshellarg;
|
|
|
|
# Return codes
|
|
const E_ARGS = 1;
|
|
const E_INVALID = 2;
|
|
const E_NOTEXIST = 3;
|
|
const E_EXISTS = 4;
|
|
const E_SUSPENDED = 5;
|
|
const E_UNSUSPENDED = 6;
|
|
const E_INUSE = 7;
|
|
const E_LIMIT = 8;
|
|
const E_PASSWORD = 9;
|
|
const E_FORBIDEN = 10;
|
|
const E_FORBIDDEN = 10;
|
|
const E_DISABLED = 11;
|
|
const E_PARSING = 12;
|
|
const E_DISK = 13;
|
|
const E_LA = 14;
|
|
const E_CONNECT = 15;
|
|
const E_FTP = 16;
|
|
const E_DB = 17;
|
|
const E_RRD = 18;
|
|
const E_UPDATE = 19;
|
|
const E_RESTART = 20;
|
|
const E_API_DISABLED = 21;
|
|
|
|
/**
|
|
* Looks for a code equivalent to "exit_code" to use in http_code.
|
|
*
|
|
* @param int $exit_code
|
|
* @param int $default
|
|
* @return int
|
|
*/
|
|
function exit_code_to_http_code(int $exit_code, int $default = 400): int {
|
|
switch ($exit_code) {
|
|
case 0:
|
|
return 200;
|
|
case E_ARGS:
|
|
// return 500;
|
|
return 400;
|
|
case E_INVALID:
|
|
return 422;
|
|
// case E_NOTEXIST:
|
|
// return 404;
|
|
// case E_EXISTS:
|
|
// return 302;
|
|
case E_PASSWORD:
|
|
return 401;
|
|
case E_SUSPENDED:
|
|
case E_UNSUSPENDED:
|
|
case E_FORBIDEN:
|
|
case E_FORBIDDEN:
|
|
case E_API_DISABLED:
|
|
return 401;
|
|
// return 403;
|
|
case E_DISABLED:
|
|
return 400;
|
|
// return 503;
|
|
}
|
|
|
|
return $default;
|
|
}
|
|
|
|
function check_local_ip($addr) {
|
|
if (in_array($addr, [$_SERVER["SERVER_ADDR"], "127.0.0.1"])) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function get_real_user_ip() {
|
|
$ip = $_SERVER["REMOTE_ADDR"];
|
|
if (isset($_SERVER["HTTP_CLIENT_IP"]) && !check_local_ip($_SERVER["HTTP_CLIENT_IP"])) {
|
|
if (filter_var($_SERVER["HTTP_CLIENT_IP"], FILTER_VALIDATE_IP)) {
|
|
$ip = $_SERVER["HTTP_CLIENT_IP"];
|
|
}
|
|
}
|
|
|
|
if (
|
|
isset($_SERVER["HTTP_X_FORWARDED_FOR"]) &&
|
|
!check_local_ip($_SERVER["HTTP_X_FORWARDED_FOR"])
|
|
) {
|
|
if (filter_var($_SERVER["HTTP_X_FORWARDED_FOR"], FILTER_VALIDATE_IP)) {
|
|
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
|
|
}
|
|
}
|
|
|
|
if (isset($_SERVER["HTTP_FORWARDED_FOR"]) && !check_local_ip($_SERVER["HTTP_FORWARDED_FOR"])) {
|
|
if (filter_var($_SERVER["HTTP_FORWARDED_FOR"], FILTER_VALIDATE_IP)) {
|
|
$ip = $_SERVER["HTTP_FORWARDED_FOR"];
|
|
}
|
|
}
|
|
|
|
if (isset($_SERVER["HTTP_X_FORWARDED"]) && !check_local_ip($_SERVER["HTTP_X_FORWARDED"])) {
|
|
if (filter_var($_SERVER["HTTP_X_FORWARDED"], FILTER_VALIDATE_IP)) {
|
|
$ip = $_SERVER["HTTP_X_FORWARDED"];
|
|
}
|
|
}
|
|
|
|
if (isset($_SERVER["HTTP_FORWARDED"]) && !check_local_ip($_SERVER["HTTP_FORWARDED"])) {
|
|
if (filter_var($_SERVER["HTTP_FORWARDED"], FILTER_VALIDATE_IP)) {
|
|
$ip = $_SERVER["HTTP_FORWARDED"];
|
|
}
|
|
}
|
|
|
|
if (
|
|
isset($_SERVER["HTTP_CF_CONNECTING_IP"]) &&
|
|
!check_local_ip($_SERVER["HTTP_CF_CONNECTING_IP"])
|
|
) {
|
|
if (filter_var($_SERVER["HTTP_CF_CONNECTING_IP"], FILTER_VALIDATE_IP)) {
|
|
$ip = $_SERVER["HTTP_CF_CONNECTING_IP"];
|
|
}
|
|
}
|
|
return $ip;
|
|
}
|
|
|
|
/**
|
|
* Create a history log using 'v-log-action' script.
|
|
*
|
|
* @param string $message The message for log.
|
|
* @param string $category A category for log. Ex: Auth, Firewall, API...
|
|
* @param string $level Info|Warning|Error.
|
|
* @param string $user A username for save in the user history ou 'system' to save in Hestia history.
|
|
* @return int The script result code.
|
|
*/
|
|
function hst_add_history_log($message, $category = "System", $level = "Info", $user = "system") {
|
|
//$message = ucfirst($message);
|
|
//$message = str_replace("'", "`", $message);
|
|
$category = ucfirst(strtolower($category));
|
|
$level = ucfirst(strtolower($level));
|
|
|
|
$command_args =
|
|
quoteshellarg($user) .
|
|
" " .
|
|
quoteshellarg($level) .
|
|
" " .
|
|
quoteshellarg($category) .
|
|
" " .
|
|
quoteshellarg($message);
|
|
exec(HESTIA_CMD . "v-log-action " . $command_args, $output, $return_var);
|
|
unset($output);
|
|
|
|
return $return_var;
|
|
}
|
|
|
|
function get_hostname() {
|
|
$badValues = [
|
|
false,
|
|
null,
|
|
0,
|
|
"",
|
|
"localhost",
|
|
"127.0.0.1",
|
|
"::1",
|
|
"0000:0000:0000:0000:0000:0000:0000:0001",
|
|
];
|
|
$ret = gethostname();
|
|
if (in_array($ret, $badValues, true)) {
|
|
throw new Exception("gethostname() failed");
|
|
}
|
|
$ret2 = gethostbyname($ret);
|
|
if (in_array($ret2, $badValues, true)) {
|
|
return $ret;
|
|
}
|
|
$ret3 = gethostbyaddr($ret2);
|
|
if (in_array($ret3, $badValues, true)) {
|
|
return $ret2;
|
|
}
|
|
return $ret3;
|
|
}
|
|
|
|
function display_title($tab) {
|
|
$array1 = ["{{page}}", "{{hostname}}", "{{ip}}", "{{appname}}"];
|
|
$array2 = [$tab, get_hostname(), $_SERVER["REMOTE_ADDR"], $_SESSION["APP_NAME"]];
|
|
return str_replace($array1, $array2, $_SESSION["TITLE"]);
|
|
}
|