getAdmin(); $code = $this->request->post("code", ""); if (trim($code)) { Db::table('setting')->replace()->insert(['keys' => 'authCode', 'value' => $code]); SettingModel::refreshSetting(); } return $this->success("ok"); } private function initAuth() { $authCode = $this->Setting('authCode', '', true); if (strlen($authCode) == 0) { $authCode = env('authCode', ''); } $this->authCode = $authCode; $this->authService = $this->Setting('authServer', 'https://auth.mtab.cc', true); } function updateApp($n = 0): \think\response\Json { $this->getAdmin(); $this->initAuth(); $result = \Axios::http()->post($this->authService . '/getUpGrade', [ 'timeout' => 10, 'form_params' => [ 'authorization_code' => $this->authCode, 'version_code' => app_version_code, ] ]); if ($result->getStatusCode() == 200) { $json = json_decode($result->getBody()->getContents(), true); if ($json['code'] === 1) { $upgradePhp = runtime_path() . 'update.php'; $f = ""; $upGrade = null; if (!empty($json['info']['update_php'])) { try {//用远程脚本更新,一般用不到,除非上一个版本发生一些问题需要额外脚本处理 $f = file_get_contents($json['info']['update_php']); file_put_contents(runtime_path() . 'update.php', $f); require_once $upgradePhp; $upGrade = new \Upgrade(); } catch (\Exception $e) { return $this->error($e->getMessage()); } } if ($upGrade === null) { $upGrade = new \Upgrade2(); } if (!empty($json['info']['update_zip'])) { $upGrade->update_download_url = $json['info']['update_zip']; } if (!empty($json['info']['update_sql'])) { $upGrade->update_sql_url = $json['info']['update_sql']; } try { $upGrade->run();//启动任务 if (file_exists($upgradePhp)) { unlink($upgradePhp); } return $this->success('更新完毕'); } catch (\Exception $e) { return $this->error($e->getMessage()); } } else { return $this->error($json['msg']); } } return $this->error("没有更新的版本"); } function authorization(): \think\response\Json { $this->getAdmin(); $this->initAuth(); $info = []; $info['version'] = app_version; $info['version_code'] = app_version_code; $info['php_version'] = phpversion(); try { $result = \Axios::http()->post($this->authService . '/checkAuth', [ 'timeout' => 10, 'form_params' => [ 'authorization_code' => $this->authCode, 'version_code' => app_version_code, 'domain' => request()->domain() ] ]); if ($result->getStatusCode() == 200) { $jsonStr = $result->getBody()->getContents(); $json = json_decode($jsonStr, true); $info['remote'] = $json; if (!isset($json['auth'])) { $f = SettingModel::where('keys', 'authCode')->find(); if ($f) { $f->value = ''; $f->save(); } Cache::delete('webConfig'); } return $this->success($info); } } catch (\Exception $e) { } $info['remote'] = [ "auth" => (bool)$this->authCode ]; return $this->success('授权服务器连接失败', $info); } function cardList(): \think\response\Json { $this->getAdmin(); $this->initAuth(); try { $result = \Axios::http()->post($this->authService . '/card', [ 'timeout' => 15, 'form_params' => [ 'authorization_code' => $this->authCode ] ]); $json = $result->getBody()->getContents(); $json = json_decode($json, true); if ($json['code'] === 1) { return $this->success('ok', $json['data']); } } catch (\Exception $e) { } return $this->error('远程卡片获取失败'); } //获取本地应用 function localCard(): \think\response\Json { $this->getAdmin(); $apps = CardModel::select(); return $this->success('ok', $apps); } function stopCard(): \think\response\Json { $this->getAdmin(); is_demo_mode(true); $name_en = $this->request->post('name_en', ''); CardModel::where('name_en', $name_en)->update(['status' => 0]); Cache::delete('cardList'); return $this->success('设置成功'); } function startCard(): \think\response\Json { $this->getAdmin(); $name_en = $this->request->post('name_en', ''); CardModel::where('name_en', $name_en)->update(['status' => 1]); Cache::delete('cardList'); return $this->success('设置成功'); } function installCard(): \think\response\Json { $this->getAdmin(); $this->initAuth(); $name_en = $this->request->post("name_en", ''); $version = 0; $type = $this->request->post('type', 'install'); if (mb_strlen($name_en) > 0) { $card = CardModel::where('name_en', $name_en)->find(); if ($card) { if ($type == 'install') { return $this->error('您已安装当前卡片组件'); } if ($type == 'update') { $version = $card['version']; } } $result = \Axios::http()->post($this->authService . '/installCard', [ 'timeout' => 15, 'form_params' => [ 'authorization_code' => $this->authCode, 'name_en' => $name_en, 'version' => $version ] ]); try { $json = $result->getBody()->getContents(); $json = json_decode($json, true, JSON_UNESCAPED_UNICODE); if ($json['code'] == 0) { return $this->error($json['msg']); } return $this->installCardTask($json['data']); } catch (\Exception $e) { return $this->error($e->getMessage()); } } return $this->error("没有需要安装的卡片插件!"); } function uninstallCard(): \think\response\Json { $this->getAdmin(); is_demo_mode(true); $name_en = $this->request->post("name_en"); if ($name_en) { $this->deleteDirectory(root_path() . 'plugins/' . $name_en); CardModel::where('name_en', $name_en)->delete(); Cache::delete('cardList'); } return $this->success('卸载完毕!'); } private function deleteDirectory($dir) { if (!is_dir($dir)) { return; } $files = scandir($dir); foreach ($files as $file) { if ($file != '.' && $file != '..') { if (is_dir("$dir/$file")) { $this->deleteDirectory("$dir/$file"); } else { unlink("$dir/$file"); } } } rmdir($dir); } private function readCardInfo($name_en) { $file = root_path() . 'plugins/' . $name_en . '/info.json'; $info = file_get_contents($file); try { return json_decode($info, true); } catch (\Exception $e) { } return false; } private function installCardTask($info): \think\response\Json { if ($info['download']) { $task = new \PluginsInstall($info); $state = $task->run(); if ($state === true) { $config = $this->readCardInfo($info['name_en']); $data = [ 'name' => $config['name'], 'name_en' => $config['name_en'], 'version' => $config['version'], 'tips' => $config['tips'], 'src' => $config['src'], 'url' => $config['url'], 'window' => $config['window'], ]; if (isset($config['setting'])) { $data['setting'] = $config['setting']; } $find = CardModel::where('name_en', $info['name_en'])->find(); if ($find) { $find->force()->save($data); } else { CardModel::create($data); } Cache::delete('cardList'); return $this->success("安装成功"); } return $this->error($state); } abort(0, "新版本没有提供下载地址!"); } //打包扩展 function build(): \think\response\Json { $this->getAdmin(); is_demo_mode(true); if (!extension_loaded('zip')) { return $this->error("系统未安装或开启zip扩展,请安装后重试!"); } if (!$this->auth) { return $this->error("请获取授权后进行操作"); } $ExtInfo = $this->request->post("extInfo", []); $build = new \BrowserExtBuild($ExtInfo); try { $status = $build->runBuild(); if ($status) { return $this->success('打包完毕', ['url' => '/browserExt.zip']); } } catch (\Exception $e) { return $this->error($e->getMessage()); } return $this->success('打包失败'); } }