This repository has been archived on 2022-12-28. You can view files and clone it, but cannot push or open issues or pull requests.
gemcapi/index.php

262 lines
13 KiB
PHP
Raw Normal View History

2020-08-09 14:08:44 +00:00
<?php
2020-08-11 07:39:44 +00:00
error_reporting(0);
ini_set('user_agent', 'GeMCAPI/5.0.0 (GeMC API Sync 5.0.0;Release)');
$active=array('mojang/launchermeta/mc/game/version_manifest.json','forge/last','optifine/versionlist','liteloader/dl/versions/versions.json');
$type=array('.com','.net','.com','.moe');
//[0]:mojang,[1]:fabricmc,[2]:liteloader,[3]:authlib-injector
2020-08-10 03:32:26 +00:00
function url_exists($url){
2020-08-09 14:08:44 +00:00
$opts = array(
'http'=>array(
'timeout'=>3,
)
);
$context = stream_context_create($opts);
return @file_get_contents($url, false, $context);
}
2020-08-11 07:39:44 +00:00
function download_file($url,$file,$other){//下载文件
system('python download.py --url "'.$url.'" --file "'.$file.'" --other "'.$other.'"');
}
2020-08-09 14:08:44 +00:00
function get_main_domain($file){
$str=preg_replace('/^[^\/]*\//is','',$file);
$str2=str_replace('/'.$str,'',$file);
return $str2;
}
function get_sub_domain($file){
$str=preg_replace('/^[^\/]*\//is','',$file);
$str2=preg_replace('/^[^\/]*\//is','',$str);
$str3=str_replace('/'.$str2,'',$str);
return $str3;
}
function get_file_path($file){
$str=preg_replace('/^[^\/]*\//is','',$file);
$str2=preg_replace('/^[^\/]*\//is','',$str);
return $str2;
}
function get_online_url($file,$id){
global $type;
$str='http://'.get_sub_domain($file).'.'.get_main_domain($file).$type[$id].'/'.get_file_path($file);
return $str;
}
function get_online_domain($file,$id){
global $type;
$str='http://'.get_sub_domain($file).'.'.get_main_domain($file).$type[$id].'/';
return $str;
}
function check_file_update($file,$dir,$url,$time){
2020-08-11 07:39:44 +00:00
global $replace_mode;
if($replace_mode==true){
$file=str_replace('?','/',$file);
}
header('Content-Disposition: attachment; filename="'.basename($file).'"');
2020-08-10 03:32:26 +00:00
$time=time()-@filemtime($file);
if($time<$time){//检查文件是否超出过期期限1天86400秒
2020-08-09 14:08:44 +00:00
echo file_get_contents($file);
}else{
if(url_exists($url.'/'.str_replace($dir,'',$file))){//防止源无法访问而损坏文件
2020-08-10 03:32:26 +00:00
if(file_get_contents($url.'/'.str_replace($dir,'',$file))==@file_get_contents($file)){
2020-08-09 14:08:44 +00:00
echo file_get_contents($file);
}else{
echo file_get_contents($url.'/'.str_replace($dir,'',$file));
2020-08-11 07:39:44 +00:00
download_file($url.'/'.str_replace($dir,'',$file),$file,'');
2020-08-09 14:08:44 +00:00
}
}else{
echo file_get_contents($file);
}
}
}
function check_file_update_json($file,$dir,$url,$time){
2020-08-11 07:39:44 +00:00
global $replace_mode;
if($replace_mode==true){
$file=str_replace('?','/',$file);
}
2020-08-11 09:01:44 +00:00
header('Content-Disposition: attachment; filename="'.basename($file).'.json"');
$time=time()-@filemtime($file.'/index.json');
if($time<$time){//检查文件是否超出过期期限1天86400秒
echo file_get_contents($file.'/index.json');
}else{
if(url_exists($url.'/'.str_replace($dir,'',$file))){//防止源无法访问而损坏文件
if(file_get_contents($url.'/'.str_replace($dir,'',$file))==@file_get_contents($file.'/index.json')){
echo file_get_contents($file);
}else{
echo file_get_contents($url.'/'.str_replace($dir,'',$file));
2020-08-11 07:39:44 +00:00
download_file($url.'/'.str_replace($dir,'',$file),$file.'/index.json','');
}
}else{
echo file_get_contents($file.'/index.json');
}
}
}
2020-08-11 09:01:44 +00:00
function check_file_update_jar($file,$dir,$url,$time){
global $replace_mode;
if($replace_mode==true){
$file=str_replace('?','/',$file);
}
header('Content-Disposition: attachment; filename="'.basename($file).'.jar"');
$time=time()-@filemtime($file.'/index.jar');
if($time<$time){//检查文件是否超出过期期限1天86400秒
echo file_get_contents($file.'/index.jar');
}else{
if(url_exists($url.'/'.str_replace($dir,'',$file))){//防止源无法访问而损坏文件
if(file_get_contents($url.'/'.str_replace($dir,'',$file))==@file_get_contents($file.'/index.jar')){
echo file_get_contents($file);
}else{
echo file_get_contents($url.'/'.str_replace($dir,'',$file));
download_file($url.'/'.str_replace($dir,'',$file),$file.'/index.jar','');
}
}else{
echo file_get_contents($file.'/index.jar');
}
}
}
2020-08-10 03:32:26 +00:00
function check_file_update_adv($file,$url,$check_url){
2020-08-11 07:39:44 +00:00
global $replace_mode;
if($replace_mode==true){
$file=str_replace('?','/',$file);
}
header('Content-Disposition: attachment; filename="'.basename($file).'"');
2020-08-10 03:32:26 +00:00
$time=time()-@filemtime($file);
if($time<86400){//检查文件是否超出过期期限1天86400秒
echo file_get_contents($file);
}else{
if(url_exists($check_url)){//防止源无法访问而损坏文件
2020-08-10 03:32:26 +00:00
if(file_get_contents($url)==@file_get_contents($file)){
echo file_get_contents($file);
}else{
echo @file_get_contents($url);
2020-08-11 07:39:44 +00:00
download_file($url,$file,'');
2020-08-10 03:32:26 +00:00
}
}else{
echo file_get_contents($file);
}
}
}
2020-08-11 07:39:44 +00:00
if(strstr($_GET['path'],'liteloader')!=False){//替换掉Literloader源中的特殊字符
$replace_mode=true;
2020-08-09 14:08:44 +00:00
}
if(get_main_domain($_GET['path'])=='mojang'){//分配顶级域名尾
$id=0;
}elseif(get_main_domain($_GET['path'])=='fabricmc'){
$id=1;
2020-08-11 07:39:44 +00:00
}elseif(get_main_domain($_GET['path'])=='liteloader'){
$id=2;
}elseif(get_main_domain($_GET['path'])=='yushi'){
$id=3;
}
2020-08-09 14:08:44 +00:00
if($_GET['error']!=""){
2020-08-11 07:39:44 +00:00
echo '{"wikis":"https://gitee.com/ghink/gemcapi/wikis","code":'.$_GET['error'].',"server_time":'.time().'}';
2020-08-09 14:08:44 +00:00
}elseif($_GET['path']==""){
2020-08-11 07:39:44 +00:00
echo '{"wikis":"https://gitee.com/ghink/gemcapi/wikis","code":200,"server_time":'.time().'}';
2020-08-09 14:08:44 +00:00
}else{
if(is_file($_GET['path'])){
//文件存在
if(in_array($_GET['path'],$active)){//判断是否为需要保持最新的文件
if(strstr($_GET['path'],'mojang/')!=False){//目录分组
if(strstr($_GET['path'],'mojang/launchermeta/')!=False){
check_file_update('mojang/launchermeta/mc/game/version_manifest.json',get_main_domain($_GET['path']).'/'.get_sub_domain($_GET['path']).'/','http://launchermeta.mojang.com',86400);
2020-08-09 14:08:44 +00:00
}
2020-08-10 03:49:44 +00:00
}elseif(strstr($_GET['path'],'forge/')!=False){//目录分组
if(strstr($_GET['path'],'forge/last')!=False){
2020-08-11 09:01:44 +00:00
check_file_update_adv('forge/last/index.json','https://download.mcbbs.net/forge/last','https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar');
2020-08-10 03:49:44 +00:00
}
2020-08-11 07:39:44 +00:00
}elseif(strstr($_GET['path'],'optifine/')!=False){//目录分组
if(strstr($_GET['path'],'optifine/versionlist')!=False){
2020-08-11 09:01:44 +00:00
check_file_update_adv('optifine/versionlist/index.json','https://download.mcbbs.net/optifine/versionlist','https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar');
2020-08-11 07:39:44 +00:00
}
}elseif(strstr($_GET['path'],'liteloader/')!=False){//目录分组
if(strstr($_GET['path'],'liteloader/dl/versions')!=False){
check_file_update_adv('liteloader/dl/versions/versions.json','http://dl.liteloader.com/versions/versions.json','http://dl.liteloader.com/versions/versions.json');
}
2020-08-09 14:08:44 +00:00
}
}else{//无需频繁更新的文件
if(@file_get_contents(get_online_url($_GET['path'],$id)=="")){
check_file_update($_GET['path'],get_main_domain($_GET['path']).'/'.get_sub_domain($_GET['path']).'/',get_online_domain($_GET['path'],$id),2592000);
2020-08-10 03:32:26 +00:00
}else{
check_file_update_json($_GET['path'],get_main_domain($_GET['path']).'/'.get_sub_domain($_GET['path']).'/',get_online_domain($_GET['path'],$id),2592000);
2020-08-10 03:32:26 +00:00
}
2020-08-09 14:08:44 +00:00
}
}elseif(is_dir($_GET['path'])){
//目录存在
2020-08-10 03:32:26 +00:00
if(strstr($_GET['path'],'forge/minecraft')!=False){//特殊目录返回
2020-08-11 09:01:44 +00:00
check_file_update_adv('forge/minecraft/minecraft.json','https://download.mcbbs.net/forge/minecraft','https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar');
2020-08-11 07:39:44 +00:00
}elseif(strstr($_GET['path'],'yushi/authlib-injector')!=False){
2020-08-11 09:01:44 +00:00
check_file_update_adv('yushi/authlib-injector/list.json','https://authlib-injector.yushi.moe','https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar');
2020-08-11 07:39:44 +00:00
//此处暂时使用bmclapi源检测文件欺骗检测authlib-injector原因见底部注释
}elseif(is_file($_GET['path'].'/index.json')){
2020-08-11 09:01:44 +00:00
check_file_update_json($_GET['path'],get_main_domain($_GET['path']).'/'.get_sub_domain($_GET['path']).'/',get_online_domain($_GET['path'],$id),86400);
}elseif(is_file($_GET['path'].'/index.jar')){
check_file_update_jar($_GET['path'],get_main_domain($_GET['path']).'/'.get_sub_domain($_GET['path']).'/',get_online_domain($_GET['path'],$id),31536000);
2020-08-10 03:32:26 +00:00
}else{
header('Content-Disposition: attachment; filename="'.basename($_GET['path']).'"');
echo file_get_contents($_GET['path']);
2020-08-10 03:32:26 +00:00
}
2020-08-09 14:08:44 +00:00
}else{
//目录或文件不存在
if(strstr($_GET['path'],'forge/')!=False){//特殊Forge采用二级源 BMCLAPI
if(url_exists('https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar')){
2020-08-10 03:32:26 +00:00
if(strstr($_GET['path'],'forge/minecraft')!=False){//forge/minecraft目录特殊同步
if($_GET['path']=='forge/minecraft'){
2020-08-11 09:01:44 +00:00
check_file_update_adv('forge/minecraft/minecraft.json','https://download.mcbbs.net/forge/minecraft','https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar');
2020-08-10 03:32:26 +00:00
}else{
2020-08-10 09:53:54 +00:00
check_file_update_adv($_GET['path'].'/index.json','https://download.mcbbs.net/'.$_GET['path'],'https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar');
2020-08-10 03:32:26 +00:00
}
2020-08-11 09:01:44 +00:00
}elseif(strstr($_GET['path'],'forge/last')!=False){
check_file_update_adv($_GET['path'].'/index.json','https://download.mcbbs.net/'.$_GET['path'],'https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar');
2020-08-10 09:53:54 +00:00
}elseif(strstr($_GET['path'],'forge/download')!=False){//forge/download目录特殊同步
check_file_update_adv($_GET['path'].'/index.jar','https://download.mcbbs.net/'.$_GET['path'],'https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar');
2020-08-10 03:32:26 +00:00
}else{
download_file('https://download.mcbbs.net/'.$_GET['path'],$_GET['path'],'');
header('Content-Disposition: attachment; filename="'.basename($_GET['path']).'"');
echo file_get_contents($_GET['path']);
2020-08-10 03:32:26 +00:00
}
2020-08-09 14:08:44 +00:00
}else{
2020-08-11 07:39:44 +00:00
echo '{"wikis":"https://gitee.com/ghink/gemcapi/wikis","code":404,"server_time":'.time().'}';
header('HTTP/1.1 404 Not Found');
}
}elseif(strstr($_GET['path'],'optifine/')!=False){//Optifine同步
if($_GET['path']=='optifine'){
echo '{"wikis":"https://gitee.com/ghink/gemcapi/wikis","code":404,"server_time":'.time().'}';
2020-08-10 03:32:26 +00:00
header('HTTP/1.1 404 Not Found');
2020-08-11 09:01:44 +00:00
}elseif(strstr($_GET['path'],'optifine/versionlist')!=False){
check_file_update_adv(str_replace('?','/',$_GET['path']).'/index.json','https://download.mcbbs.net/'.$_GET['path'],'https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar');
2020-08-11 07:39:44 +00:00
}else{
2020-08-11 09:01:44 +00:00
if(@file_get_contents(get_online_url($_GET['path'],$id)=="")){
check_file_update_adv($_GET['path'].'/index.jar','https://download.mcbbs.net/'.$_GET['path'],'https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar');
}else{
if(strstr($_GET['path'],'HD_U')!=False){
check_file_update_adv($_GET['path'].'/index.jar','https://download.mcbbs.net/'.$_GET['path'],'https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar');
}else{
check_file_update_adv($_GET['path'].'/index.json','https://download.mcbbs.net/'.$_GET['path'],'https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar');
}
}
2020-08-11 07:39:44 +00:00
}
}elseif(strstr($_GET['path'],'liteloader/')!=False){//Liteloader同步
if(strstr($_GET['path'],'liteloader/list')!=False){
check_file_update_adv(str_replace('?','/',$_GET['path']).'/index.json','https://download.mcbbs.net/'.$_GET['path'],'https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar');
}elseif(strstr($_GET['path'],'liteloader/download')!=False){
2020-08-11 09:01:44 +00:00
check_file_update_adv(str_replace('?','/',$_GET['path']).'/index.jar','https://download.mcbbs.net/'.$_GET['path'],'https://download.mcbbs.net/maven/net/minecraftforge/forge/1.7.10-10.13.0.1151/forge-1.7.10-10.13.0.1151-installer.jar');
2020-08-11 07:39:44 +00:00
}else{
check_file_update_adv($_GET['path'],get_online_url($_GET['path'],$id),'http://dl.liteloader.com/versions/versions.json');
2020-08-09 14:08:44 +00:00
}
}else{
if(url_exists(get_online_url($_GET['path'],$id))){
if(@file_get_contents(get_online_url($_GET['path'],$id)=="")){
download_file(get_online_url($_GET['path'],$id),$_GET['path'],'');
header('Content-Disposition: attachment; filename="'.basename($_GET['path']).'"');
echo file_get_contents($_GET['path']);
}else{
download_file(get_online_url($_GET['path'],$id),$_GET['path'].'/index.json','');
header('Content-Disposition: attachment; filename="'.basename($_GET['path']).'"');
echo file_get_contents($_GET['path'].'/index.json');
}
2020-08-11 07:39:44 +00:00
}elseif(get_main_domain($_GET['path'])=='yushi'){
//暂不明确为何authlib-injector的服务器即使存活文件存在也会被判定为不存在
2020-08-11 09:01:44 +00:00
download_file(get_online_url($_GET['path'],$id),$_GET['path'].'/list.json','');
2020-08-11 07:39:44 +00:00
header('Content-Disposition: attachment; filename="'.basename($_GET['path']).'"');
2020-08-11 09:01:44 +00:00
echo file_get_contents($_GET['path'].'/list.json');
2020-08-09 14:08:44 +00:00
}else{
2020-08-11 07:39:44 +00:00
echo '{"wikis":"https://gitee.com/ghink/gemcapi/wikis","code":404,"server_time":'.time().'}';
2020-08-10 03:32:26 +00:00
header('HTTP/1.1 404 Not Found');
2020-08-09 14:08:44 +00:00
}
}
}
}