| 
						 | 
						<?php
namespace app\lib;
use Exception;use ZipArchive;
class Plugins{
    private static function get_btapi($os){        if(self::is_third($os)){            return new ThirdPlugins($os);        }else{            return new BtPlugins($os);        }    }
    private static function is_third($os){        $type = $os == 'Windows' ? config_get('wbt_type') : config_get('bt_type');        return $type == 1;    }
    //刷新插件列表
    public static function refresh_plugin_list($os = 'Linux'){        $btapi = self::get_btapi($os);        $result = $btapi->get_plugin_list();        self::save_plugin_list($result, $os);    }
    //保存插件列表
    private static function save_plugin_list($data, $os){        $data['ip'] = '127.0.0.1';        $data['serverid'] = '';        $data['beta'] = 0;        $data['uid'] = 1;        $data['skey'] = '';        $list = [];        foreach($data['list'] as $plugin){            if(isset($plugin['endtime'])) $plugin['endtime'] = 0;            $list[] = $plugin;        }        $data['list'] = $list;        $data['ltd'] = strtotime('+10 year');        $json_file = get_data_dir($os).'config/plugin_list.json';        if(!file_put_contents($json_file, json_encode($data))){            throw new Exception('保存插件列表失败,文件无写入权限');        }    }
    //获取插件列表
    public static function get_plugin_list($os = 'Linux'){        $json_file = get_data_dir($os).'config/plugin_list.json';        if(file_exists($json_file)){            $data = file_get_contents($json_file);            $json_arr = json_decode($data, true);            if($json_arr){                return $json_arr;            }        }        return false;    }
    //获取一个插件信息
    public static function get_plugin_info($name, $os = 'Linux'){        $json_arr = self::get_plugin_list($os);        if(!$json_arr) return null;        foreach($json_arr['list'] as $plugin){            if($plugin['name'] == $name){                return $plugin;            }        }        return null;    }
    //下载插件(自动判断是否第三方)
    public static function download_plugin($plugin_name, $version, $os = 'Linux'){        $plugin_info = Plugins::get_plugin_info($plugin_name, $os);        if(!$plugin_info) throw new Exception('未找到该插件信息');        $btapi = self::get_btapi($os);        $btapi->download_plugin($plugin_name, $version, $plugin_info);    }
    //下载插件主程序文件
    public static function download_plugin_main($plugin_name, $version, $os = 'Linux'){        $btapi = self::get_btapi($os);        $btapi->download_plugin_main($plugin_name, $version);    }
    //本地解密插件主程序文件
    public static function decode_plugin_main_local($main_filepath, $os = 'Linux'){        $btapi = new BtPlugins($os);        return $btapi->decode_plugin_main_local($main_filepath);    }
    //本地解密模块文件
    public static function decode_module_file($filepath){        $src = file_get_contents($filepath);        if($src===false)throw new Exception('文件打开失败');        if(!$src || strpos($src, 'import ')!==false)return 0;        $key = 'Z2B87NEAS2BkxTrh';        $iv = 'WwadH66EGWpeeTT6';        $data_arr = explode("\n", $src);        $de_text = '';        foreach($data_arr as $data){            $data = trim($data);            if(!empty($data)){                $tmp = openssl_decrypt($data, 'aes-128-cbc', $key, 0, $iv);                if($tmp) $de_text .= $tmp;            }        }        if(!empty($de_text) && strpos($de_text, 'import ')!==false){            file_put_contents($filepath, $de_text);            return 1;        }        return 2;    }
    //刷新一键部署列表
    public static function refresh_deplist($os = 'Linux'){        $btapi = self::get_btapi($os);        $result = $btapi->get_deplist();        $json_file = get_data_dir($os).'config/deployment_list.json';        if(!file_put_contents($json_file, json_encode($result))){            throw new Exception('保存一键部署列表失败,文件无写入权限');        }    }
    //获取一键部署列表
    public static function get_deplist($os = 'Linux'){        $json_file = get_data_dir($os).'config/deployment_list.json';        if(file_exists($json_file)){            $data = file_get_contents($json_file);            $json_arr = json_decode($data, true);            if($json_arr){                return $json_arr;            }        }        return false;    }
    //获取蜘蛛IP列表
    public static function btwaf_getspiders(){        $result = cache('btwaf_getspiders');        if($result){            return $result;        }        $btapi = self::get_btapi('Linux');        $result = $btapi->btwaf_getspiders();        cache('btwaf_getspiders', $result, 3600 * 24 * 3);        return $result;    }
    //分类获取蜘蛛IP列表
    public static function get_spider($type){        $result = cache('get_spider_'.$type);        if($result){            return $result;        }        $url = 'https://www.bt.cn/api/panel/get_spider?spider='.$type;        $data = get_curl($url);        $result = json_decode($data, true);        if(!$result) return [];        cache('get_spider_'.$type, $result, 3600 * 24);        return $result;    }
}
  |