checklist()) return json('你的服务器被禁止使用此云端'); $record = Db::name('record')->where('ip',$this->clientip)->find(); if($record){ Db::name('record')->where('id',$record['id'])->update(['usetime'=>date("Y-m-d H:i:s")]); }else{ Db::name('record')->insert(['ip'=>$this->clientip, 'addtime'=>date("Y-m-d H:i:s"), 'usetime'=>date("Y-m-d H:i:s")]); } $json_arr = Plugins::get_plugin_list(); if(!$json_arr) $json_arr = (object)[]; return json($json_arr); } //获取插件列表(win) public function get_plugin_list_win(){ if(!$this->checklist()) return json('你的服务器被禁止使用此云端'); $os_version = input('post.os_version'); $serverid = input('post.serverid'); $uid = input('post.uid'); $record = Db::name('record')->where('ip',$this->clientip)->find(); if($record){ Db::name('record')->where('id',$record['id'])->update(['usetime'=>date("Y-m-d H:i:s")]); }else{ Db::name('record')->insert(['ip'=>$this->clientip, 'addtime'=>date("Y-m-d H:i:s"), 'usetime'=>date("Y-m-d H:i:s")]); } $json_arr = Plugins::get_plugin_list('Windows'); if(!$json_arr) $json_arr = (object)[]; if($os_version == 'windows_go'){ return Plugins::encrypt_plugin_list($json_arr, $serverid, $uid); } return json($json_arr); } //获取插件列表(aapanel) public function get_plugin_list_en(){ if(!$this->checklist()) return json('你的服务器被禁止使用此云端'); $record = Db::name('record')->where('ip',$this->clientip)->find(); if($record){ Db::name('record')->where('id',$record['id'])->update(['usetime'=>date("Y-m-d H:i:s")]); }else{ Db::name('record')->insert(['ip'=>$this->clientip, 'addtime'=>date("Y-m-d H:i:s"), 'usetime'=>date("Y-m-d H:i:s")]); } $json_arr = Plugins::get_plugin_list('en'); if(!$json_arr) $json_arr = (object)[]; return json($json_arr); } //下载插件包 public function download_plugin(){ $plugin_name = input('param.name'); $version = input('param.version'); $os = input('param.os'); if(!$plugin_name || !$version){ return json(['status'=>false, 'msg'=>'参数不能为空']); } if(!in_array($os,['Windows','Linux'])) $os = 'Linux'; if(!preg_match('/^[a-zA-Z0-9_]+$/', $plugin_name) || !preg_match('/^[0-9.]+$/', $version)){ return json(['status'=>false, 'msg'=>'参数不正确']); } if(!$this->checklist()) return json(['status'=>false, 'msg'=>'你的服务器被禁止使用此云端']); $filepath = get_data_dir($os).'plugins/package/'.$plugin_name.'-'.$version.'.zip'; if(file_exists($filepath)){ $filename = $plugin_name.'.zip'; $this->output_file($filepath, $filename); }else{ return json(['status'=>false, 'msg'=>'云端不存在该插件包']); } } //下载插件包aapanel public function download_plugin_en(){ $plugin_name = input('param.name'); $version = input('param.version'); if(!$plugin_name || !$version){ return json(['status'=>false, 'msg'=>'参数不能为空']); } if(!preg_match('/^[a-zA-Z0-9_]+$/', $plugin_name) || !preg_match('/^[0-9.]+$/', $version)){ return json(['status'=>false, 'msg'=>'参数不正确']); } if(!$this->checklist()) return json(['status'=>false, 'msg'=>'你的服务器被禁止使用此云端']); $filepath = get_data_dir('en').'plugins/package/'.$plugin_name.'-'.$version.'.zip'; if(file_exists($filepath)){ $filename = $plugin_name.'.zip'; $this->output_file($filepath, $filename); }else{ return json(['status'=>false, 'msg'=>'云端不存在该插件包']); } } //下载插件主文件 public function download_plugin_main(){ $plugin_name = input('post.name'); $version = input('post.version'); $os = input('post.os'); if(!$plugin_name || !$version){ return json(['status'=>false, 'msg'=>'参数不能为空']); } if(!in_array($os,['Windows','Linux'])) $os = 'Linux'; if(!preg_match('/^[a-zA-Z0-9_]+$/', $plugin_name) || !preg_match('/^[0-9.]+$/', $version)){ return json(['status'=>false, 'msg'=>'参数不正确']); } if(!$this->checklist()) return json(['status'=>false, 'msg'=>'你的服务器被禁止使用此云端']); $filepath = get_data_dir($os).'plugins/package/'.$plugin_name.'-'.$version.'.zip'; $mainfilepath = get_data_dir($os).'plugins/folder/'.$plugin_name.'-'.$version.'/'.$plugin_name.'/'.$plugin_name.'_main.py'; if(file_exists($mainfilepath)){ $filename = $plugin_name.'_main.py'; $this->output_file($mainfilepath, $filename); }elseif(file_exists($filepath)){ $zip = new \ZipArchive; if ($zip->open($filepath) === true){ echo $zip->getFromName($plugin_name.'/'.$plugin_name.'_main.py'); }else{ return json(['status'=>false, 'msg'=>'插件包解压缩失败']); } }else{ return json(['status'=>false, 'msg'=>'云端不存在该插件主文件']); } } //下载插件其他文件 public function download_plugin_other(){ $fname = input('get.fname'); if(!$fname){ $fname = input('get.filename'); if(!$fname){ return json(['status'=>false, 'msg'=>'参数不能为空']); } } if(strpos(dirname($fname),'.')!==false)return json(['status'=>false, 'msg'=>'参数不正确']); if(!$this->checklist()) return json(['status'=>false, 'msg'=>'你的服务器被禁止使用此云端']); $filepath = get_data_dir().'plugins/other/'.$fname; if(file_exists($filepath)){ $filename = basename($fname); $this->output_file($filepath, $filename); }else{ return json(['status'=>false, 'msg'=>'云端不存在该插件文件']); } } public function get_plugin_auth(){ $productids = ["8","9","10","11","12","13","14","15","16","17","18","19","20","22","23","24","25","26","28","32","33","42","44","45","47","55","65","69","75","82","83","85","90","91","97","99","101","107","108","110","118","121","127","128","132","135","136","140","143","144","151","154","156","161","163","167","173","179","183","185","190","192","195","197","200","201","202","203","204","205","206","207","208","212","213","214","215","216","217","218","219","220","221","222","223","224","225","226","227","228","229","230","231","232","233","234","235","236","237","238","239","241","243","244","245","246","247","248","249","250","251","252","253","254","255","256","257","258","259","261","262","263","264","265","266","267","268","269","270","271","272","273","274","275","276","277","278","279","280","281","282","283","284","285","286","287","289","292","293","295","296","297","298","299","300","301","302","303","304","305","306","307","308","309","310","311","312","313","314","315","316","317","318","319","320","321","322","323","324","325","326","327","328","329","330","331","332","334","335","336","337","338","339","340","341","342","343","344","345","346","347","348","349","350","351","352","353","354","355","356","357","358","359","360","361","362","363","364","365","366","368","369","371","372","373","374","375","376","377","378","379","380","381","382","383","384","385","386","387","388","389","390","391","392","393","394","397","398","400","401","406","408","409","411","413","415","419","423","425","427","429","430","1111111","100000001","100000005","100000007","100000008","100000009","100000010","100000012","100000014","100000015","100000016","100000017","100000035","100000036","100000039","100000040","100000041","100000042","100000045","100000053","100000054","100000056","100000057","100000058","100000059","100000062","100000063","100000067","100000069","100000070","100000076","100000077","100000078","100000079","100000080","100000084","100000085","100000088","100000089","100000090","100000091","100000092","100000093","100000094","100000095","100000096","100000097","100000098"]; $os_version = input('post.os_version'); $address = input('post.address',''); $uid = input('post.uid',''); $username = input('post.username',''); $serverid = input('post.serverid',''); $mac = input('post.mac',''); $data = ['ip'=>$address, 'uid'=>$uid, 'username'=>$username, 'serverid'=>$serverid, 'lasttime'=>time(), 'pro'=>-1, 'skey'=>'', 'ltd'=>strtotime('+10 year'), 'list'=>[]]; foreach($productids as $pid){ $data['list'][$pid] = strtotime('+10 year'); } return Plugins::encrypt_plugin_list($data, $serverid, $uid); } public function get_plugin_auth_win(){ $productids = ["49","50","51","52","53","54","56","57","58","59","60","61","67","68","72","76","80","84","88","89","92","93","119","120","133","134","137","138","139","142","145","146","150","168","169","170","172","176","184","396","404","414","420","422","424","426","428","100000001","100000018","100000019","100000024","100000026","100000027","100000028","100000031","100000039","100000043","100000047","100000048","100000049","100000051","100000052","100000060","100000061","100000064","100000067","100000075"]; $os_version = input('post.os_version'); $address = input('post.address',''); $uid = input('post.uid',''); $username = input('post.username',''); $serverid = input('post.serverid',''); $mac = input('post.mac',''); $data = ['ip'=>$address, 'uid'=>$uid, 'username'=>$username, 'serverid'=>$serverid, 'lasttime'=>time(), 'pro'=>-1, 'skey'=>'', 'ltd'=>strtotime('+10 year'), 'list'=>[]]; foreach($productids as $pid){ $data['list'][$pid] = strtotime('+10 year'); } return Plugins::encrypt_plugin_list($data, $serverid, $uid); } public function get_update_logs(){ $type = input('get.type'); if($type == 'Windows'){ $version = config_get('new_version_win'); $data = [ [ 'title' => 'Linux面板'.$version, 'body' => config_get('update_msg_win'), 'addtime' => config_get('update_date_win') ] ]; }else{ $version = config_get('new_version'); $data = [ [ 'title' => 'Linux面板'.$version, 'body' => config_get('update_msg'), 'addtime' => config_get('update_date') ] ]; } return jsonp($data); } public function get_version(){ $version = config_get('new_version'); return $version; } public function get_version_win(){ $version = config_get('new_version_win'); return $version; } public function get_version_en(){ $version = config_get('new_version_en'); return $version; } public function get_panel_version(){ $version = config_get('new_version'); $file = app()->getRootPath().'public/install/update/LinuxPanel-'.$version.'.zip'; $hash = hash_file('sha256', $file); $data = [ 'version' => $version, 'hash' => $hash, 'update_time' => filemtime($file), ]; return json($data); } public function get_panel_version_v2(){ $version = config_get('new_version'); $down_url = request()->root(true).'/install/update/LinuxPanel-'.$version.'.zip'; $data = [ 'OfficialVersion' => [ 'version' => $version, 'downUrl' => $down_url, 'updateMsg' => config_get('update_msg'), 'uptime' => config_get('update_date'), ], 'OfficialVersionLatest' => [], 'AccountVersion' => [], ]; return json($data); } //安装统计 public function setup_count(){ return 'ok'; } //检测更新 public function check_update(){ $version = config_get('new_version'); $down_url = request()->root(true).'/install/update/LinuxPanel-'.$version.'.zip'; $data = [ 'force' => false, 'version' => $version, 'downUrl' => $down_url, 'updateMsg' => config_get('update_msg'), 'uptime' => config_get('update_date'), 'is_beta' => 0, 'adviser' => -1, 'btb' => '', 'beta' => [ 'version' => $version, 'downUrl' => $down_url, 'updateMsg' => config_get('update_msg'), 'uptime' => config_get('update_date'), ] ]; return json($data); } //检测更新(win) public function check_update_win(){ $version = config_get('new_version_win'); $down_url = request()->root(true).'/win/panel/panel_'.$version.'.zip'; $data = [ 'force' => false, 'version' => $version, 'downUrl' => $down_url, 'updateMsg' => config_get('update_msg_win'), 'uptime' => config_get('update_date_win'), 'is_beta' => 0, 'py_version' => '3.8.6', 'adviser' => -1, 'is_rec' => -1, 'btb' => '', 'beta' => [ 'py_version' => '3.8.6', 'version' => $version, 'downUrl' => $down_url, 'updateMsg' => config_get('update_msg_win'), 'uptime' => config_get('update_date_win'), ] ]; return json($data); } //检测更新(aapanel) public function check_update_en(){ $version = config_get('new_version_en'); $down_url = request()->root(true).'/install/update/LinuxPanel_EN-'.$version.'.zip'; $data = [ 'force' => false, 'version' => $version, 'downUrl' => $down_url, 'updateMsg' => config_get('update_msg_en'), 'uptime' => config_get('update_date_en'), 'is_beta' => 0, 'btb' => '', 'beta' => [ 'version' => $version, 'downUrl' => $down_url, 'updateMsg' => config_get('update_msg_en'), 'uptime' => config_get('update_date_en'), ] ]; return json($data); } //宝塔云监控获取最新版本 public function btm_latest_version(){ $data = [ 'version' => config_get('new_version_btm'), 'description' => config_get('update_msg_btm'), 'create_time' => config_get('update_date_btm') ]; return json($data); } //宝塔云监控更新日志 public function btm_update_history(){ $data = [ [ 'version' => config_get('new_version_btm'), 'description' => config_get('update_msg_btm'), 'create_time' => config_get('update_date_btm') ] ]; return json($data); } //宝塔云WAF最新版本 public function btwaf_latest_version(){ $type = input('?post.type') ? input('post.type') : 0; if($type == 1){ $data = [ 'version' => '1.1', 'description' => '暂无更新日志', 'create_time' => 1705315163, ]; }else{ $data = [ 'version' => '3.0', 'description' => '暂无更新日志', 'create_time' => 1705315163, ]; } $data = bin2hex(json_encode($data)); return json(['status'=>true,'err_no'=>0,'msg'=>'获取成功','data'=>$data]); } //宝塔云控版本信息 public function cloudc_version_info(){ return json(['status'=>true,'msg'=>'获取成功','data'=>[ 'version' => '1.0.5', 'download' => '', 'uptime' => '2025/06/16', 'upmsg' => '暂无更新日志' ]]); } //宝塔云控版本信息 public function cloudc_get_version(){ return json(['status'=>true,'msg'=>'','oid'=>'','data'=>[ 'officialVersion' => [ 'version' => '1.0.5', 'download' => '', 'uptime' => '2025/06/16', 'updateMsg' => '暂无更新日志' ], ]]); } //宝塔云控授权信息 public function cloudc_order_status(){ $data = [ 'status' => true, 'msg' => '获取成功', 'oid' => '', 'data' => [ 'id' => 1, 'address' => real_ip(), 'buytime' => time(), 'endtime' => time() + 86400 * 3650, 'num' => 9999, 'max_num' => 9999, 'pid' => 100000023, 'renew_price' => 0, 'state' => 1, ] ]; return json($data); } //获取内测版更新日志 public function get_beta_logs(){ return json(['beta_ps'=>'当前暂无内测版', 'list'=>[]]); } //检查用户绑定是否正确 public function check_auth_key(){ return '1'; } //从云端验证域名是否可访问 public function check_domain(){ $domain = input('post.domain',null,'trim'); $ssl = input('post.ssl/d'); if(!$domain) return json(['status'=>false, 'msg'=>'域名不能为空']); if(!strpos($domain,'.')) return json(['status'=>false, 'msg'=>'域名格式不正确']); $domain = str_replace('*.','',$domain); $ip = gethostbyname($domain); if(!$ip || $ip == $domain){ return json(['status'=>false, 'msg'=>'无法访问']); }else{ return json(['status'=>true, 'msg'=>'访问正常']); } } //同步时间 public function get_time(){ return time(); } //同步时间 public function get_win_date(){ return date("Y-m-d H:i:s"); } //查询是否专业版(废弃) public function is_pro(){ return json(['endtime'=>true, 'code'=>1]); } //获取产品推荐信息 public function get_plugin_remarks(){ return json(['list'=>[], 'pro_list'=>[], 'kfqq'=>'', 'kf'=>'', 'qun'=>'']); } //获取指定插件评分 public function get_plugin_socre(){ return json(['total'=>0, 'split'=>[0,0,0,0,0],'page'=>"