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;
// 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 = $users->isLeader();
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']); ?>
isLeader()) { ?>