$cache ?? false, 'debug' => MCR_DEBUG, 'strict_variables' => true, ]); $twigArgs = [ 'global' => [ 'title' => 'Flashii Minecraft Servers', 'loginUrl' => $config['login_url'], ], 'auth' => $userInfo, 'verification' => $sVerification, ]; function tpl_vars(array $args): void { global $twigArgs; $twigArgs = array_merge($twigArgs, $args); } function tpl_render(string $name, array $args, string $suffix = '.twig'): string { global $twigEnv, $twigArgs; return $twigEnv->render($name . $suffix, array_merge($twigArgs, $args)); } $router = new HttpFx; $router->setDefaultErrorHandler(function($response, $request, $code, $text) use ($userInfo) { $response->setContent(tpl_render('http-error', [ 'error' => [ 'code' => sprintf('%03d', $code), 'text' => $text, ], ])); }); $router->use('/', function($response) { $response->setPoweredBy('Mince'); }); $router->get('/index.php', function($response) { $response->redirect('/', true); }); $router->get('/', function($response, $request) use ($userInfo) { $name = (string)$request->getParam('name'); $error = (string)$request->getParam('error'); if(!empty($error) && ctype_lower($error)) { $errors = [ 'request' => ['Invalid request type.', 'Try to reload the page and try again.'], 'verify' => ['Request verification failed.', 'Try to reload the page and try again.'], 'itainthappenin' => ['Haha', 'No'], 'short' => ['Invalid username', 'The provided name is too short.'], 'long' => ['Invalid username', 'The provided name is too long.'], 'invalid' => ['Invalid username', 'The provided name contains invalid characters.'], 'conflict' => ['Username conflict', 'This username is already whitelisted with someone, contact flashwave if this is unexpected.'], 'connect' => ['Failed to connect to the server', 'The server is probably offline, pope flashwave if this is not expected.'], 'not-listed' => ['You have not been whitelisted yet', 'Add yourself to the whitelist before trying to remove yourself from it.'], ]; if(array_key_exists($error, $errors)) { $mErrorTitle = $errors[$error][0]; $mErrorComment = $errors[$error][1]; } else { $mErrorTitle = 'Unexpected response from server'; $mErrorComment = $error; } tpl_vars([ 'error' => [ 'title' => $mErrorTitle, 'body' => $mErrorComment, ], ]); } if($userInfo->mc_whitelisted > 0) tpl_vars(['whitelist_pending' => floor($userInfo->mc_whitelisted / 300) === floor(time() / 300)]); return tpl_render('index', [ 'wladdform_username' => $name, ]); }); $router->use('/whitelist', function($response, $request) use ($sVerification) { if(!$request->isFormContent()) { $response->redirect('/?error=request'); return true; } $body = $request->getContent(); if(!$body->hasParam('boob') || !hash_equals($sVerification, (string)$body->getParam('boob'))) { $response->redirect('/?error=verify'); return true; } }); $router->post('/whitelist/add', function($response, $request) use ($db, $userInfo) { if($userInfo->user_id == 45) { $response->redirect('/?error=itainthappenin'); return true; } $body = $request->getContent(); $name = (string)$body->getParam('name'); $resp = (new Whitelist($db))->add($userInfo, $name); if($resp === '') $response->redirect('/'); else { if($resp === 'invalid') $name = ''; $response->redirect("/?error={$resp}&name={$name}"); } }); $router->post('/whitelist/remove', function($response) use ($db, $userInfo) { $resp = (new Whitelist($db))->remove($userInfo); if($resp === '') $response->redirect('/'); else $response->redirect("/?error={$resp}"); }); $router->get('/errors/:code', function($res, $req, $code) { $code = (int)$code; if($code < 100 || $code >= 600) $code = 400; return $code; }); $router->dispatch();