get('/skins/{nickname}', function ($nickname) use ($app) {
$systemVersion = $app->request->get("version", "int");
$minecraftVersion = $app->request->get("minecraft_version", "string");
// На всякий случай проверка на наличие .png для файла
if (strrpos($nickname, ".png") != -1) {
$nickname = explode(".", $nickname)[0];
}
// TODO: восстановить функцию деградации скинов
$skin = Skins::findFirst(array(array(
"nickname" => strtolower($nickname)
)));
if (!$skin || $skin->skinId == 0)
return $app->response->redirect("http://skins.minecraft.net/MinecraftSkins/".$nickname.".png", true);
return $app->response->redirect($skin->url);
})->setName("skinSystem");
$app->get('/cloaks/{nickname}', function ($nickname) use ($app) {
// На всякий случай проверка на наличие .png для файла
if (strrpos($nickname, ".png") != -1) {
$nickname = explode(".", $nickname)[0];
}
return $app->response->redirect('http://skins.minecraft.net/MinecraftCloaks/'.$nickname.'.png');
});
$app->get("/textures/{nickname}", function($nickname) use ($app) {
$skin = Skins::findFirst(array(array(
"nickname" => strtolower($nickname)
)));
if ($skin && $skin->skinId != 0) {
$url = $skin->url;
$hash = $skin->hash;
} else {
$url = "http://skins.minecraft.net/MinecraftSkins/".$nickname.".png";
$hash = md5("non-ely-".mktime(date("H"), 0, 0)."-".$nickname);
}
$textures = array(
'SKIN' => array(
'url' => $url,
'hash' => $hash,
'metadata' => array(
'model' => ($skin && $skin->isSlim) ? "slim" : "default"
)
),
'CAPE' => array(
'url' => '',
'hash' => ''
)
);
return $app->response->setJsonContent($textures);
});
/**
* Должно проксироваться средствами nginx, но мало-ли
*/
$app->get("/minecraft.php", function() use ($app) {
$nickname = $app->request->get("name", "string");
$type = $app->request->get("type", "string");
$minecraft_version = str_replace('_', '.', $app->request->get("mine_ver", "string", NULL));
$authlib_version = $app->request->get("auth_lib", "string", NULL);
$version = $app->request->get("ver", "string");
if ($version == "1_0_0")
$version = "1";
if ($type === "cloack" || $type === "cloak")
return $app->response->redirect('http://skins.minecraft.net/MinecraftCloaks/'.$nickname.'.png');
// Если запрос идёт через authlib, то мы не знаем версию Minecraft
if ($authlib_version && !$minecraft_version) {
$auth_to_mine = array(
"1.3" => "1.7.2",
"1.2" => "1.7.4",
"1.3.1" => "1.7.5",
"1.5.13" => "1.7.9",
"1.5.16" => "1.7.10",
"1.5.17" => "1.8.1"
);
if (array_key_exists($authlib_version, $auth_to_mine))
$minecraft_version = $auth_to_mine[$authlib_version];
}
// Отправляем на новую систему скинов в правильном формате
return $app->response->redirect($app->url->get(
array(
"for" => "skinSystem",
"nickname" => $nickname
), array(
"minecraft_version" => $minecraft_version,
"version" => $version
)
), true);
})->setName("fallbackSkinSystem");
$app->post("/system/setSkin", function() use ($app) {
$headers = getallheaders();
if (!array_key_exists("X-Ely-key", $headers) || $headers['X-Ely-key'] != "43fd2ce61b3f5704dfd729c1f2d6ffdb")
return $app->response->setStatusCode(403, "Forbidden")->setContent("Хорошая попытка, мерзкий хакер.");
$request = $app->request;
$skin = Skins::findFirst(array(array(
"userId" => (int) $request->getPost("userId", "int")
)));
if (!$skin) {
$skin = new Skins();
$skin->userId = (int) $request->getPost("userId", "int");
}
$skin->nickname = strtolower($request->getPost("nickname", "string"));
$skin->skinId = (int) $request->getPost("skinId", "int");
$skin->hash = $request->getPost("hash", "string");
$skin->is1_8 = (bool) $request->getPost("is1_8", "int");
$skin->isSlim = (bool) $request->getPost("isSlim", "int");
$skin->url = $request->getPost("url", "string");
if ($skin->save())
echo "OK";
else
echo "ERROR";
});
/**
* Not found handler
*/
$app->notFound(function () use ($app) {
$app->response
->setStatusCode(404, "Not Found")
->setContent('Not Found
Система скинов Ely.by.')
->send();
});