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
			| 
								 
											2 years ago
										 
									 | 
							
								<?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"]);
							 | 
						||
| 
								 | 
							
								}
							 |