From ca91a728eb3276ef9883bf5a97ded24f19f256f4 Mon Sep 17 00:00:00 2001 From: Guangcong Luo Date: Mon, 5 Jul 2021 16:16:30 -0400 Subject: [PATCH] Split website/servers.php into website/servers/ This splits servers.php into two files: servers/index.php and servers/server.php. --- website/.htaccess | 5 +- website/servers.php | 439 -------------------------------- website/servers/index.php | 218 ++++++++++++++++ website/servers/server.php | 220 ++++++++++++++++ website/servers/servers.lib.php | 18 ++ 5 files changed, 459 insertions(+), 441 deletions(-) delete mode 100644 website/servers.php create mode 100644 website/servers/index.php create mode 100644 website/servers/server.php create mode 100644 website/servers/servers.lib.php diff --git a/website/.htaccess b/website/.htaccess index 55fccecdd..4895135f8 100644 --- a/website/.htaccess +++ b/website/.htaccess @@ -70,8 +70,9 @@ RewriteRule ^pages/([a-z0-9-]+)/?$ /.pages-cached/$1.html [L,QSA] RewriteRule ^autodownload\/?([A-Za-z0-9-]+)?$ autodownload.php?os=$1 [L,QSA] -RewriteRule ^servers\/?([A-Za-z0-9-]+)?$ servers.php?id=$1 [L,QSA] -RewriteRule ^servers\/([A-Za-z0-9-]+)\.json$ servers.php?id=$1&json [L,QSA] +RewriteRule ^servers\/?$ servers/index.php [L,QSA] +RewriteRule ^servers\/?([A-Za-z0-9-]+)?$ servers/server.php?id=$1 [L,QSA] +RewriteRule ^servers\/([A-Za-z0-9-]+)\.json$ servers/server.php?id=$1&json [L,QSA] # RewriteRule ^replay\/?search/?$ replay/search.php [L,QSA] # RewriteRule ^replay\/?([A-Za-z0-9-]+)$ replay/battle.php?name=$1 [L,QSA] diff --git a/website/servers.php b/website/servers.php deleted file mode 100644 index d11c68e6a..000000000 --- a/website/servers.php +++ /dev/null @@ -1,439 +0,0 @@ -userid(@$_GET['id']); - $entry = @$PokemonServers[$id]; - if (!$entry) { - header('HTTP/1.1 404 Not Found'); - die(isset($_REQUEST['json']) ? 'null' : '404 Not Found'); - } -} - -$timenow = time(); - -$page = 'servers'; -$pageTitle = "Servers"; - -function saveservers() { - file_put_contents(__DIR__ . '/../config/servers.inc.php', ' '', - 'id' => $id, - ]; - if ($entry['banned'] ?? false) { - $out['banned'] = true; - } else { - $out['banned'] = false; - $out['host'] = $entry['server']; - $out['port'] = $entry['port']; - if (isset($entry['altport'])) $out['altport'] = $entry['altport']; - } - die(json_encode($out)); - } - $is_owner = $is_manager; - if (!@$entry['banned'] && strpos(','.@$entry['owner'].',', ','.$curuser['userid'].',') !== false) $is_owner = true; - - if (@$_POST['act'] === 'editserver') { - if (!$is_owner) die('access denied'); - if (!$users->csrfCheck()) die('invalid data, please retry'); - - $id = $entry['id']; - $loc = trim(@$_POST['loc']); - if ($loc) { - - if (substr($loc, 0, 7) === 'http://') $loc = substr($loc, 7); - if (substr($loc, 0, 8) === 'https://') $loc = substr($loc, 8); - $slashpos = strpos($loc, '/'); - if ($slashpos !== false) $loc = substr($loc, 0, $slashpos); - if (substr($loc, -8) === '.psim.us') $loc = substr($loc, 0, -8); - $parts = explode(':', $loc); - $server = $loc; - $port = 8000; - if (@$parts[1]) { - $port = intval($parts[1]); - $server = $parts[0]; - } else { - $dashpos = strrpos($loc, '-'); - if ($dashpos !== false && ctype_digit(substr($loc, $dashpos+1))) { - $port = intval(substr($loc, $dashpos+1)); - $server = substr($loc, 0, $dashpos); - } - } - - if (strpos($server, '.') === false) { - die("invalid server location"); - } - - $PokemonServers[$id]['server'] = $server; - $PokemonServers[$id]['port'] = $port; - } - - $owners = explode(',', $_POST['owner']); - foreach ($owners as $i=>$owner) $owners[$i] = $users->userid($owner); - $PokemonServers[$id]['owner'] = implode(',',$owners); - - saveservers(); - $success = 'editserver'; - $entry = $PokemonServers[$id]; - } - if (@$_POST['act'] === 'deleteserver') { - if (!$is_owner) die('access denied'); - if (!$users->csrfCheck()) die('invalid data, please retry'); - $id = $entry['id']; - - unset($PokemonServers[$id]); - saveservers(); - $success = 'deleteserver'; - $entry = false; - } - if (@$_POST['act'] === 'banserver') { - if (!$is_owner) die('access denied'); - if (!$users->csrfCheck()) die('invalid data, please retry'); - $id = $entry['id']; - - $message = @$_POST['message']; - if (!$message) $message = 'banned'; - $PokemonServers[$id]['banned'] = $_POST['message']; - saveservers(); - $success = 'banserver'; - $entry = $PokemonServers[$id]; - } - if (@$_POST['act'] === 'maketoken') { - if (!$is_owner) die('access denied'); - if (!$users->csrfCheck()) die('invalid data, please retry'); - $id = $entry['id']; - - $token = base64_encode(openssl_random_pseudo_bytes(9)); - $PokemonServers[$id]['token'] = md5($token); - saveservers(); - $success = 'maketoken'; - $entry = $PokemonServers[$id]; - } - if (@$_POST['act'] === 'deltoken') { - if (!$is_owner) die('access denied'); - if (!$users->csrfCheck()) die('invalid data, please retry'); - $id = $entry['id']; - - unset($PokemonServers[$id]['token']); - saveservers(); - $success = 'deltoken'; - $entry = $PokemonServers[$id]; - } - includeHeader(); - // if (!$is_owner) { - // die('access denied'); - // } -?> -
-

- You're logged in as: -

-

- Back to server list -

- Successfully updated.

'; if (!$entry) die(); ?> - -

Add this to your config.js, replacing all other "exports.serverid" and "exports.servertoken" lines if you have them:

- -

- -

- [Hidden] -

- - -

- Banned
Reason: -

- -

- - - - .psim.us - -

-

Owner:

- -

- -

- - -
-csrfCheck()) die('invalid data, please retry'); - $name = trim(@$_POST['name']); - $owners = explode(',', @$_POST['owner']); - foreach ($owners as $i=>$owner) $owners[$i] = $users->userid($owner); - $owner = implode(',',$owners); - $id = $users->userid(@$_POST['id']); - $loc = trim(@$_POST['loc']); - if (!$name || !$id || !$loc) die('missing information'); - if (isset($PokemonServers[$id])) die('server already exists'); - if (substr($loc, 0, 7) === 'http://') $loc = substr($loc, 7); - if (substr($loc, 0, 8) === 'https://') $loc = substr($loc, 8); - $slashpos = strpos($loc, '/'); - if ($slashpos !== false) $loc = substr($loc, 0, $slashpos); - if (substr($loc, -8) === '.psim.us') $loc = substr($loc, 0, -8); - $parts = explode(':', $loc); - $server = $loc; - $port = 8000; - if (@$parts[1]) { - $port = intval($parts[1]); - $server = $parts[0]; - } else { - $dashpos = strrpos($loc, '-'); - if ($dashpos !== false && ctype_digit(substr($loc, $dashpos+1))) { - $port = intval(substr($loc, $dashpos+1)); - $server = substr($loc, 0, $dashpos); - } - } - if (strpos($server, '.') === false) { - die("invalid server location"); - } - $PokemonServers[$id] = [ - 'name' => $name, - 'id' => $id, - 'server' => $server, - 'port' => $port - ]; - if ($owner) $PokemonServers[$id]['owner'] = $owner; - saveservers(); -} - -// Server list -//================================================================================= - -includeHeader(); - -if (@$_POST['act'] === 'addserver') { - echo '

Added: '.htmlspecialchars(var_export($PokemonServers[$id],true)).'

'; -} - -$activeservers = []; -$inactiveservers = []; - -$res = $psdb->query("SELECT `serverid`, `date`, `usercount` FROM `ntbb_userstats`"); -while ($row = $psdb->fetch_assoc($res)) { - $serverid = $row['serverid']; - if (!isset($PokemonServers[$serverid])) continue; - if (@$PokemonServers[$serverid]['hidden']) continue; - - if ($timenow - $row['date'] / 1000 > 60 * 30) { - $inactiveservers[$serverid] = $row; - $inactiveservers[$serverid]['serverentry'] = $PokemonServers[$serverid]; - } else { - $activeservers[$serverid] = $row; - $activeservers[$serverid]['serverentry'] = $PokemonServers[$serverid]; - } -} - -function cmpByDate($b, $a) { - return $a['date'] - $b['date']; -} -function cmpByUsercount($b, $a) { - return $a['usercount'] - $b['usercount']; -} -$uninitializedservers = array_diff_key($PokemonServers, $activeservers, $inactiveservers); -uasort($activeservers, 'cmpByUsercount'); -uasort($inactiveservers, 'cmpByDate'); - -?> -
- -

Add server

-

- -

- - -

- Server registration form -

-

Active servers

- - - - - - - - -
- () - - - - - .psim.us - - - -
-

Inactive servers

- - - - - - - - - -
- (offline) - - .psim.us - - Last online: days ago - - -
- -

Untracked servers

-

- (Registered servers that have never been online ever, or whose online state can't be tracked without a token) -

- - $entry) { - if (@$entry['hidden']) continue; -?> - - - - - - -
- (untracked) - - .psim.us - - -
- -
-csrfCheck()) die('invalid data, please retry'); + $name = trim(@$_POST['name']); + $owners = explode(',', @$_POST['owner']); + foreach ($owners as $i=>$owner) $owners[$i] = $users->userid($owner); + $owner = implode(',',$owners); + $id = $users->userid(@$_POST['id']); + $loc = trim(@$_POST['loc']); + if (!$name || !$id || !$loc) die('missing information'); + if (isset($PokemonServers[$id])) die('server already exists'); + if (substr($loc, 0, 7) === 'http://') $loc = substr($loc, 7); + if (substr($loc, 0, 8) === 'https://') $loc = substr($loc, 8); + $slashpos = strpos($loc, '/'); + if ($slashpos !== false) $loc = substr($loc, 0, $slashpos); + if (substr($loc, -8) === '.psim.us') $loc = substr($loc, 0, -8); + $parts = explode(':', $loc); + $server = $loc; + $port = 8000; + if (@$parts[1]) { + $port = intval($parts[1]); + $server = $parts[0]; + } else { + $dashpos = strrpos($loc, '-'); + if ($dashpos !== false && ctype_digit(substr($loc, $dashpos+1))) { + $port = intval(substr($loc, $dashpos+1)); + $server = substr($loc, 0, $dashpos); + } + } + if (strpos($server, '.') === false) { + die("invalid server location"); + } + $PokemonServers[$id] = [ + 'name' => $name, + 'id' => $id, + 'server' => $server, + 'port' => $port + ]; + if ($owner) $PokemonServers[$id]['owner'] = $owner; + saveservers(); +} + +// Server list +//================================================================================= + +includeHeader(); + +if (@$_POST['act'] === 'addserver') { + echo '

Added: '.htmlspecialchars(var_export($PokemonServers[$id],true)).'

'; +} + +$activeservers = []; +$inactiveservers = []; + +$res = $psdb->query("SELECT `serverid`, `date`, `usercount` FROM `ntbb_userstats`"); +while ($row = $psdb->fetch_assoc($res)) { + $serverid = $row['serverid']; + if (!isset($PokemonServers[$serverid])) continue; + if (@$PokemonServers[$serverid]['hidden']) continue; + + if ($timenow - $row['date'] / 1000 > 60 * 30) { + $inactiveservers[$serverid] = $row; + $inactiveservers[$serverid]['serverentry'] = $PokemonServers[$serverid]; + } else { + $activeservers[$serverid] = $row; + $activeservers[$serverid]['serverentry'] = $PokemonServers[$serverid]; + } +} + +function cmpByDate($b, $a) { + return $a['date'] - $b['date']; +} +function cmpByUsercount($b, $a) { + return $a['usercount'] - $b['usercount']; +} +$uninitializedservers = array_diff_key($PokemonServers, $activeservers, $inactiveservers); +uasort($activeservers, 'cmpByUsercount'); +uasort($inactiveservers, 'cmpByDate'); + +?> +
+ +

Add server

+

+ +

+ + +

+ Server registration form +

+

Active servers

+ + + + + + + + +
+ () + + + + + .psim.us + + + +
+

Inactive servers

+ + + + + + + + + +
+ (offline) + + .psim.us + + Last online: days ago + + +
+ +

Untracked servers

+

+ (Registered servers that have never been online ever, or whose online state can't be tracked without a token) +

+ + $entry) { + if (@$entry['hidden']) continue; +?> + + + + + + +
+ (untracked) + + .psim.us + + +
+ +
+userid($_GET['id']); + $entry = $PokemonServers[$id] ?? null; + if (!$entry) { + header('HTTP/1.1 404 Not Found'); + die(isset($_REQUEST['json']) ? 'null' : '404 Not Found'); + } +} + +$page = 'servers'; +$pageTitle = "Servers"; + +$success = false; + +$is_manager = (@$curuser['group'] == 2 || @$curuser['group'] == 6); + +// Single server view +//================================================================================= + +if (isset($_REQUEST['json'])) { + header('Content-type: application/json'); + header('Access-Control-Allow-Origin: *'); + if (!$entry) die('null'); + $out = [ + 'host' => '', + 'id' => $id, + ]; + if ($entry['banned'] ?? false) { + $out['banned'] = true; + } else { + $out['banned'] = false; + $out['host'] = $entry['server']; + $out['port'] = $entry['port']; + if (isset($entry['altport'])) $out['altport'] = $entry['altport']; + } + die(json_encode($out)); +} + +if (!$entry) { + die("server not found"); +} + +$is_owner = $is_manager; +if (!@$entry['banned'] && strpos(','.@$entry['owner'].',', ','.$curuser['userid'].',') !== false) $is_owner = true; + +if (@$_POST['act'] === 'editserver') { + if (!$is_owner) die('access denied'); + if (!$users->csrfCheck()) die('invalid data, please retry'); + + $id = $entry['id']; + $loc = trim($_POST['loc'] ?? ''); + if ($loc) { + + if (substr($loc, 0, 7) === 'http://') $loc = substr($loc, 7); + if (substr($loc, 0, 8) === 'https://') $loc = substr($loc, 8); + $slashpos = strpos($loc, '/'); + if ($slashpos !== false) $loc = substr($loc, 0, $slashpos); + if (substr($loc, -8) === '.psim.us') $loc = substr($loc, 0, -8); + $parts = explode(':', $loc); + $server = $loc; + $port = 8000; + if (@$parts[1]) { + $port = intval($parts[1]); + $server = $parts[0]; + } else { + $dashpos = strrpos($loc, '-'); + if ($dashpos !== false && ctype_digit(substr($loc, $dashpos+1))) { + $port = intval(substr($loc, $dashpos+1)); + $server = substr($loc, 0, $dashpos); + } + } + + if (strpos($server, '.') === false) { + die("invalid server location"); + } + + $PokemonServers[$id]['server'] = $server; + $PokemonServers[$id]['port'] = $port; + } + + $owners = explode(',', $_POST['owner']); + foreach ($owners as $i=>$owner) $owners[$i] = $users->userid($owner); + $PokemonServers[$id]['owner'] = implode(',',$owners); + + saveservers(); + $success = 'editserver'; + $entry = $PokemonServers[$id]; +} +if (@$_POST['act'] === 'deleteserver') { + if (!$is_owner) die('access denied'); + if (!$users->csrfCheck()) die('invalid data, please retry'); + $id = $entry['id']; + + unset($PokemonServers[$id]); + saveservers(); + $success = 'deleteserver'; + $entry = false; +} +if (@$_POST['act'] === 'banserver') { + if (!$is_owner) die('access denied'); + if (!$users->csrfCheck()) die('invalid data, please retry'); + $id = $entry['id']; + + $message = @$_POST['message']; + if (!$message) $message = 'banned'; + $PokemonServers[$id]['banned'] = $_POST['message']; + saveservers(); + $success = 'banserver'; + $entry = $PokemonServers[$id]; +} +if (@$_POST['act'] === 'maketoken') { + if (!$is_owner) die('access denied'); + if (!$users->csrfCheck()) die('invalid data, please retry'); + $id = $entry['id']; + + $token = base64_encode(openssl_random_pseudo_bytes(9)); + $PokemonServers[$id]['token'] = md5($token); + saveservers(); + $success = 'maketoken'; + $entry = $PokemonServers[$id]; +} +if (@$_POST['act'] === 'deltoken') { + if (!$is_owner) die('access denied'); + if (!$users->csrfCheck()) die('invalid data, please retry'); + $id = $entry['id']; + + unset($PokemonServers[$id]['token']); + saveservers(); + $success = 'deltoken'; + $entry = $PokemonServers[$id]; +} +includeHeader(); +// if (!$is_owner) { +// die('access denied'); +// } +?> +
+

+ You're logged in as: +

+

+ « Back to server list +

+ Successfully updated.

'; if (!$entry) die(); ?> + +

Add this to your config.js, replacing all other "exports.serverid" and "exports.servertoken" lines if you have them:

+ +

+ +

+ [Hidden] +

+ + +

+ Banned
Reason: +

+ +

+ + + + .psim.us + +

+

Owner:

+ +

+ +

+ + +
+