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