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: = htmlspecialchars($curuser['username']) ?>
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:
= htmlspecialchars($entry['name']); ?>
[Hidden]
Banned
Reason: = $entry['banned'] ?>
= $psconfig['routes']['client'] ?>
= $entry['id'] ?>.psim.us
Owner: = htmlspecialchars($entry['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');
?>