HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot//www.whfie.com/tttt/api/common.php
<?php
require_once('constants.php');
require_once('config.php');

function localApiResponse($json, $header = 'HTTP/1.1 200 OK', $contentType = "application/json") {
	if ($header !== NULL) {
		header($header);
	}
	header("Content-Type: $contentType");
	echo $json;
}

function getEventFromStatus($status) {
	$action = 'unknown';
	switch ($status) {
		case '-1':
			$action = 'paused';
			break;
		case '0':
			$action = 'under-review';
			break;
		case '1':
			$action = 'active';
			break;
		case '2':
			$action = 'allow-all';
			break;
		case '3':
			$action = 'scheduled';
			break;
	}
	return $action;
}

if (!function_exists('getLocalDb')) {
	function getLocalDb() {
		// get db path
		$dbpath = DB_FILE;
		if (strpos('/',DB_FILE) === false) {
			$dbpath = __DIR__.'/db/'.$dbpath;
		}

		// open db for read/write
		$ldb = new SQLite3($dbpath, SQLITE3_OPEN_READWRITE, DB_KEY);
		$ldb->busyTimeout(60000); 
		return $ldb;
	}
}

function genToken($payload) {
	$payload = json_encode($payload);
	$sig = hash_hmac('sha256', $payload, APISECRET);
	return base64_encode($payload).'.'.base64_encode($sig);
}

function checkAuth($jwt) {
	@list($payload, $sig) = explode('.', $jwt);
	if (!$payload || !$sig) return false;

	$payload_json = base64_decode($payload);
	$payload = json_decode($payload_json,true);
	$sig = base64_decode($sig);
	if (!$payload || !$payload_json || !$sig) return false;

	if ($payload['role'] !== 'api') return false;
	if (time() > $payload['exp']) return false;

	$thisSig = hash_hmac('sha256', $payload_json, APISECRET);
	if ($sig !== $thisSig) return false;

	return $payload;
}

function noipApiRq($params, $post = NULL, $retry = false) {
	global $curl_config;

	// build url
	$utc = time();
	$auth = array(
		'auth' => 2,
		'key' => APIKEY,
		'utc' => $utc,
		'sig' => hash_hmac('sha256', $utc.APIKEY, APISECRET),
		'iid' => md5(DB_KEY)
	);
	$q = http_build_query(array_merge($auth, $params));
	$url = 'http://'.API_DOMAIN.API_PATH.'api.php?'.$q;

	// execute request
	$ch = curl_init();
	$curl_config[CURLOPT_URL] = $url;
	if ($post) {
		$curl_config[CURLOPT_POST] = 1;
		$curl_config[CURLOPT_POSTFIELDS] = $post;
	}
	curl_setopt_array($ch, $curl_config);
	$data = curl_exec($ch);
	$c_info = curl_getinfo($ch);
	$c_errno = curl_errno($ch);
	$c_err = curl_error($ch);
	curl_close($ch);

	// check success
	if ($c_errno !== 0) {
		if (!$retry) {
			return noipApiRq($params, $post, true); // retry 
		} else {
			throw new Exception('Error communicating with API: ('.$c_errno.') '.$c_err);
		}
	}
 
	return $data;
}