├── .env.example ├── .gitattributes ├── .gitignore ├── Dockerfile ├── LICENSE.md ├── README.md ├── app ├── Console │ └── Commands │ │ └── CheckAppStatus.php ├── Http │ ├── Controllers │ │ ├── AccountController.php │ │ ├── Controller.php │ │ ├── GroupController.php │ │ ├── InstallController.php │ │ ├── InvCodeController.php │ │ ├── IpController.php │ │ ├── ParseController.php │ │ ├── RecordController.php │ │ ├── ResponseController.php │ │ ├── TokenController.php │ │ ├── UserController.php │ │ ├── UtilsController.php │ │ └── config │ │ │ ├── MailConfigController.php │ │ │ └── MainConfigController.php │ └── Middleware │ │ ├── AutoUpdate.php │ │ ├── IpFilter.php │ │ ├── NeedInstall.php │ │ ├── NeedPassword.php │ │ ├── ParamCheck.php │ │ └── RoleFilter.php ├── Models │ ├── Account.php │ ├── FileList.php │ ├── Group.php │ ├── InvCode.php │ ├── Ip.php │ ├── Record.php │ ├── Token.php │ └── User.php ├── Providers │ └── AppServiceProvider.php └── helpers.php ├── artisan ├── bootstrap ├── app.php ├── cache │ └── .gitignore └── providers.php ├── composer.json ├── composer.lock ├── config ├── 94list.php ├── app.php ├── auth.php ├── cache.php ├── database.php ├── filesystems.php ├── logging.php ├── mail.php ├── queue.php ├── sanctum.php ├── services.php └── session.php ├── database └── .gitignore ├── docker ├── default.conf ├── entrypoint.sh ├── fpm-pool.conf ├── nginx.conf └── supervisord.conf ├── phpunit.xml ├── public ├── .htaccess ├── assets │ ├── css │ │ ├── AccountManagement-CvA_2gMU.css │ │ ├── GetFileList-D8J9e0M0.css │ │ ├── GroupManagement-DsjCwHwp.css │ │ ├── InstallView-CRaRKPdy.css │ │ ├── InvCodeManagement-BIcF9Kxd.css │ │ ├── IpManagement-BHydyvRO.css │ │ ├── LoginView-kFAD-Fzo.css │ │ ├── NotFoundView-B8o8jygP.css │ │ ├── RecordManagement-S3Hh6B8z.css │ │ ├── RegisterView-BnKfmdM9.css │ │ ├── ShowFileList-CbcFgyZ7.css │ │ ├── TokenManagement-aT40K2D6.css │ │ ├── UserManagement-C5ETFEKD.css │ │ ├── UserView-BUO1heXg.css │ │ ├── element-plus@2.7.7_vue@3.4.32_typescript@5.5-YF1DmkJl.css │ │ ├── element-plus@2.7.7_vue@3.4.32_typescript@5.5-YF1DmkJl.css.gz │ │ └── index-qsVAQOGj.css │ ├── ico │ │ └── favicon-fA9CtK1z.ico │ ├── js │ │ ├── @ctrl_tinycolor@3.6.1-r5W6hzzQ.js │ │ ├── @ctrl_tinycolor@3.6.1-r5W6hzzQ.js.gz │ │ ├── @element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js │ │ ├── @element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js.gz │ │ ├── @fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js │ │ ├── @fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js.gz │ │ ├── @floating-ui_core@1.6.4-l0sNRNKZ.js │ │ ├── @floating-ui_dom@1.6.7-l0sNRNKZ.js │ │ ├── @floating-ui_utils@0.2.4-l0sNRNKZ.js │ │ ├── @sxzz_popperjs-es@2.11.7-D9SI2xQl.js │ │ ├── @sxzz_popperjs-es@2.11.7-D9SI2xQl.js.gz │ │ ├── @vue_devtools-api@6.6.3-l0sNRNKZ.js │ │ ├── @vue_reactivity@3.4.32-DksAu7zd.js │ │ ├── @vue_reactivity@3.4.32-DksAu7zd.js.gz │ │ ├── @vue_runtime-core@3.4.32-BofAHbgu.js │ │ ├── @vue_runtime-core@3.4.32-BofAHbgu.js.gz │ │ ├── @vue_runtime-dom@3.4.32-DNdjNMzo.js │ │ ├── @vue_runtime-dom@3.4.32-DNdjNMzo.js.gz │ │ ├── @vue_shared@3.4.32-CaCWPAm8.js │ │ ├── @vue_shared@3.4.32-CaCWPAm8.js.gz │ │ ├── @vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js │ │ ├── @vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js.gz │ │ ├── @vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js │ │ ├── @vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js.gz │ │ ├── AccountManagement-HxMt2-hw.js │ │ ├── AccountManagement-HxMt2-hw.js.gz │ │ ├── AdminView-ClWDJ0yp.js │ │ ├── AdminView-ClWDJ0yp.js.gz │ │ ├── AnnounceDialog-C3AXj005.js │ │ ├── AnnounceDialog-C3AXj005.js.gz │ │ ├── Aria2Dialog-BoClX_iS.js │ │ ├── Aria2Dialog-BoClX_iS.js.gz │ │ ├── ChangeMailConfig-DWXXcDjr.js │ │ ├── ChangeMailConfig-DWXXcDjr.js.gz │ │ ├── ChangeMainConfig-DBsWGwM3.js │ │ ├── ChangeMainConfig-DBsWGwM3.js.gz │ │ ├── DownloadLinks-0QpbYdeQ.js │ │ ├── DownloadLinks-0QpbYdeQ.js.gz │ │ ├── GetFileList-ClRPbksc.js │ │ ├── GetFileList-ClRPbksc.js.gz │ │ ├── GroupManagement-wC6WYaei.js │ │ ├── GroupManagement-wC6WYaei.js.gz │ │ ├── InstallView-1zGjJR37.js │ │ ├── InstallView-1zGjJR37.js.gz │ │ ├── InvCodeManagement-Dsqp0U7A.js │ │ ├── InvCodeManagement-Dsqp0U7A.js.gz │ │ ├── IpManagement-CNmIbwyM.js │ │ ├── IpManagement-CNmIbwyM.js.gz │ │ ├── LoginView-BoL3i2YX.js │ │ ├── LoginView-BoL3i2YX.js.gz │ │ ├── NotFoundView-D8J8xe3g.js │ │ ├── NotFoundView-D8J8xe3g.js.gz │ │ ├── RecordManagement-BjaPKNfj.js │ │ ├── RecordManagement-BjaPKNfj.js.gz │ │ ├── RegisterView-BB1Y1TFY.js │ │ ├── RegisterView-BB1Y1TFY.js.gz │ │ ├── ShowFileList-DoTSeEKx.js │ │ ├── ShowFileList-DoTSeEKx.js.gz │ │ ├── TokenManagement-BJdgmlbt.js │ │ ├── TokenManagement-BJdgmlbt.js.gz │ │ ├── UserManagement-C-9GJbGk.js │ │ ├── UserManagement-C-9GJbGk.js.gz │ │ ├── UserView-DXrxeYoX.js │ │ ├── UserView-DXrxeYoX.js.gz │ │ ├── _plugin-vue_export-helper-DlAUqK2U.js │ │ ├── aria2Store-Eper8YQt.js │ │ ├── async-validator@4.2.5-DKvM95Vc.js │ │ ├── async-validator@4.2.5-DKvM95Vc.js.gz │ │ ├── axios@1.7.2-B4uVmeYG.js │ │ ├── axios@1.7.2-B4uVmeYG.js.gz │ │ ├── changeConfigForm-D___ED7J.js │ │ ├── copy-By2guqEs.js │ │ ├── dayjs@1.11.11-Ct2Knyoi.js │ │ ├── dayjs@1.11.11-Ct2Knyoi.js.gz │ │ ├── element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js │ │ ├── element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js.gz │ │ ├── favicon-BrYC5Vmz.js │ │ ├── fileListStore-BL5xDhSX.js │ │ ├── fileListStore-BL5xDhSX.js.gz │ │ ├── format-CyW-QbYa.js │ │ ├── index-DYV93AZk.js │ │ ├── index-DYV93AZk.js.gz │ │ ├── isMobile-BD0f7XPI.js │ │ ├── lodash-es@4.17.21-BB-zMWwC.js │ │ ├── lodash-es@4.17.21-BB-zMWwC.js.gz │ │ ├── lodash-unified@1.0.3_@types_lodash-es@4.17.12_lodash-es@4.17.21_lodash@4.17.21-l0sNRNKZ.js │ │ ├── memoize-one@6.0.0-l0sNRNKZ.js │ │ ├── normalize-wheel-es@1.2.0-B6fDCfyv.js │ │ ├── normalize-wheel-es@1.2.0-B6fDCfyv.js.gz │ │ ├── package-DAW1B3SR.js │ │ ├── package-DAW1B3SR.js.gz │ │ ├── pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js │ │ ├── pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js.gz │ │ ├── tslib@2.6.3-CPxunF3b.js │ │ ├── tslib@2.6.3-CPxunF3b.js.gz │ │ ├── vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js │ │ ├── vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js │ │ ├── vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js.gz │ │ └── vue@3.4.32_typescript@5.5.3-l0sNRNKZ.js │ └── png │ │ ├── qrcode-39AXYHGT.png │ │ └── unknownfile-BBXNi05M.png ├── favicon.ico ├── index.html ├── index.html.gz ├── index.php └── robots.txt ├── resources └── views │ └── App.blade.php ├── routes ├── api.php ├── console.php └── web.php ├── storage ├── app │ ├── .gitignore │ └── public │ │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ ├── .gitignore │ │ └── data │ │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ ├── testing │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore ├── tests ├── Feature │ └── ExampleTest.php ├── Pest.php ├── TestCase.php └── Unit │ └── ExampleTest.php └── vendor.zip /.env.example: -------------------------------------------------------------------------------- 1 | APP_NAME=94list-laravel 2 | APP_ENV=local 3 | APP_KEY=base64:uXKgvz9P8KCytUmXaq8mntdhk8HM2eFCTJV/uVMjAoM= 4 | APP_DEBUG=true 5 | APP_URL=http://localhost 6 | 7 | # 数据库配置 8 | DB_CONNECTION=no 9 | DB_HOST= 10 | DB_PORT= 11 | DB_DATABASE= 12 | DB_USERNAME= 13 | DB_PASSWORD= 14 | 15 | MAIL_SWITCH=false 16 | MAIL_HOST=127.0.0.1 17 | MAIL_PORT=2525 18 | MAIL_USERNAME=username 19 | MAIL_PASSWORD=password 20 | MAIL_ENCRYPTION=tls 21 | MAIL_FROM_ADDRESS=hello@example.com 22 | MAIL_FROM_NAME=Example 23 | MAIL_TO_ADDRESS=hello@example.com 24 | MAIL_TO_NAME=Example 25 | 26 | _94LIST_VERSION=1.3.45 27 | _94LIST_SLEEP=3 28 | _94LIST_MAX_ONCE=20 29 | _94LIST_PASSWORD="" 30 | _94LIST_ANNOUNCE="测试公告" 31 | _94LIST_USER_AGENT="netdisk;7.42.0.5;PC" 32 | _94LIST_NEED_INV_CODE=true 33 | _94LIST_WHITELIST_MODE=false 34 | _94LIST_SHOW_COPYRIGHT=true 35 | _94LIST_CUSTOM_COPYRIGHT="本项目半开源, 项目地址: https://github.com/huankong233/94list-laravel" 36 | _94LIST_MAIN_SERVER=空 37 | _94LIST_CODE=空 38 | _94LIST_PARSE_MODE=1 39 | _94LIST_MAX_FILESIZE=536870912000 40 | _94LIST_MIN_SINGLE_FILESIZE=0 41 | _94LIST_MAX_SINGLE_FILESIZE=53687091200 42 | _94LIST_TOKEN_MODE=true 43 | _94LIST_BUTTON_LINK="blank" 44 | _94LIST_LIMIT_CN=true 45 | _94LIST_LIMIT_PROV=false 46 | _94LIST_SHOW_LOGIN_BUTTON=true 47 | _94LIST_TOKEN_BIND_IP=false 48 | HKLIST_PROXY_SERVER= 49 | HKLIST_PROXY_PASSWORD= 50 | 51 | # 企业版CK 52 | HKLIST_DOWNLOAD_TICKET_COOKIE="" 53 | # 企业版CID 54 | # 进入企业版网页 地址栏里有 55 | HKLIST_DOWNLOAD_TICKET_CID="" 56 | # 企业版 BDSTOKEN 57 | # 获取链接: https://pan.baidu.com/api/gettemplatevariable?fields=[%22bdstoken%22] 58 | HKLIST_DOWNLOAD_TICKET_BDSTOKEN="" 59 | # 存盘路径 60 | # 注意: 以/打头,结尾不需要/,注意这个文件夹需要手动先创建好,下面的分享链接需要是设定的这个文件夹 61 | HKLIST_DOWNLOAD_TICKET_PATH="/helloworld" 62 | 63 | # 记得填充下载卷(自行购买) 64 | # 企业版分享链接下载链接 65 | # https://pan.baidu.com/s/123456 66 | # 下面填 123456 67 | HKLIST_DOWNLOAD_TICKET_SURL="" 68 | # 企业版分享链接下载密码 69 | HKLIST_DOWNLOAD_TICKET_PWD="" 70 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | 3 | *.blade.php diff=html 4 | *.css diff=css 5 | *.html diff=html 6 | *.md diff=markdown 7 | *.php diff=php 8 | 9 | /.github export-ignore 10 | CHANGELOG.md export-ignore 11 | .styleci.yml export-ignore 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.phpunit.cache 2 | /node_modules 3 | /public/build 4 | /public/hot 5 | /public/storage 6 | /storage/*.key 7 | /vendor 8 | .env 9 | .env.backup 10 | .env.production 11 | .phpunit.result.cache 12 | Homestead.json 13 | Homestead.yaml 14 | auth.json 15 | npm-debug.log 16 | yarn-error.log 17 | /.fleet 18 | /.idea 19 | /.vscode 20 | 21 | /database/database.sqlite -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # 依赖构建 2 | FROM composer AS composer 3 | 4 | COPY .env.example .env 5 | 6 | # 复制项目源码 7 | COPY . /app 8 | RUN rm vendor.zip 9 | 10 | # 开始构建 11 | RUN composer install --optimize-autoloader --no-interaction --no-progress 12 | 13 | # 项目地址: https://github.com/huankong233/php-nginx 14 | FROM huankong233/php-nginx:latest 15 | 16 | # 指定当前用户 17 | USER root 18 | 19 | # 补全环境 20 | RUN apk update && \ 21 | apk add tzdata && \ 22 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ 23 | echo "Asia/Shanghai" > /etc/timezone 24 | 25 | # 复制项目源码 26 | COPY docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf 27 | COPY docker/fpm-pool.conf ${PHP_INI_DIR}/php-fpm.d/www.conf 28 | COPY docker/nginx.conf /etc/nginx/nginx.conf 29 | COPY docker/default.conf /etc/nginx/conf.d/default.conf 30 | COPY docker/entrypoint.sh /entrypoint.sh 31 | 32 | # 复制构建后项目源码 33 | COPY --from=composer /app /var/www/94list-laravel 34 | 35 | # 赋权 36 | RUN chmod a+x /entrypoint.sh 37 | 38 | ########################################################################### 39 | 40 | # 环境变量 41 | ENV APP_AUTO_UPDATE=true 42 | ENV IS_DOCKER=true 43 | 44 | # 默认工作目录 45 | WORKDIR /var/www/html 46 | 47 | # 开放端口 48 | EXPOSE 8080 49 | 50 | # 映射源码目录 51 | VOLUME ["/var/www/html"] 52 | 53 | # 启动 54 | ENTRYPOINT ["/entrypoint.sh"] 55 | 56 | CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] 57 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020-2024 幻空 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HkList-laravel 2 | 3 | 已迁移到新仓库 [hklist](https://github.com/huankong233/hklist) 4 | 5 | 本仓库将存档 6 | -------------------------------------------------------------------------------- /app/Console/Commands/CheckAppStatus.php: -------------------------------------------------------------------------------- 1 | info("开始检查是否更新"); 32 | 33 | // 各项文件夹目录 34 | $www_path = "/var/www/html"; 35 | $latest_path = "/var/www/94list-laravel"; 36 | 37 | // .env文件的路径 38 | $www_env_path = $www_path . "/.env"; 39 | $latest_env_path = $latest_path . "/.env"; 40 | 41 | $www_env = getEnvFile($www_env_path); 42 | $latest_env = getEnvFile($latest_env_path); 43 | 44 | $www_version = getVersionString($www_env); 45 | $latest_version = getVersionString($latest_env); 46 | 47 | $this->info("本地版本号:" . $www_version); 48 | $this->info("容器版本号:" . $latest_version); 49 | 50 | if ($www_version === $latest_version) { 51 | $this->info("本地版本和容器版本一致,无需更新"); 52 | return; 53 | } 54 | 55 | if (version_compare($www_version, $latest_version, ">=")) { 56 | $this->info("本地版本高于或等于容器版本,无需更新"); 57 | return; 58 | } 59 | 60 | $this->info("本地版本低于容器版本,开始更新"); 61 | 62 | $bak_path = "/var/www/bak"; 63 | 64 | $www_db_file = $www_path . "/database/database.sqlite"; 65 | $bak_db_file = $bak_path . "/database.sqlite"; 66 | 67 | $www_env_file = $www_path . "/.env"; 68 | $bak_env_file = $bak_path . "/.env"; 69 | 70 | $this->info("开始备份数据库和配置文件"); 71 | if (!File::exists($bak_path)) File::makeDirectory($bak_path); 72 | if (File::exists($www_db_file)) File::copy($www_db_file, $bak_db_file); 73 | if (File::exists($www_env_file)) File::copy($www_env_file, $bak_env_file); 74 | $this->info("完成备份数据库和配置文件"); 75 | 76 | $this->info("开始导入容器版本源码"); 77 | // 清空当前版本下所有内容 78 | File::deleteDirectories($www_path); 79 | File::copyDirectory($latest_path, $www_path); 80 | $this->info("完成导入容器版本源码"); 81 | 82 | $this->info("开始导入sqlite数据库"); 83 | if (File::exists($bak_db_file)){ 84 | File::copy($bak_db_file, $www_db_file); 85 | $this->info("完成导入sqlite数据库"); 86 | }else{ 87 | $this->info("取消导入sqlite数据库: 数据库不存在"); 88 | } 89 | 90 | $this->info("开始导入配置文件"); 91 | // 删除配置文件 92 | File::delete($www_env_path); 93 | // 更新env信息 94 | $latest_env = $latest_env->map(function ($env, $key) use ($www_env, $latest_version) { 95 | if ($key === "_94LIST_VERSION") return "_94LIST_VERSION=" . $latest_version; 96 | return $key . "=" . ($www_env->get($key) ?? $env); 97 | }); 98 | File::replace($www_env_path, $latest_env->implode("\n")); 99 | $this->info("完成导入配置文件"); 100 | 101 | # 更新完成 102 | $this->info("更新完成"); 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /app/Http/Controllers/Controller.php: -------------------------------------------------------------------------------- 1 | paginate($request["size"]); 14 | return ResponseController::success($groups); 15 | } 16 | 17 | public function addGroup(Request $request) 18 | { 19 | $validator = Validator::make($request->all(), [ 20 | "name" => "required|string", 21 | "count" => "required|numeric", 22 | "size" => "required|numeric" 23 | ]); 24 | 25 | if ($validator->fails()) return ResponseController::paramsError(); 26 | 27 | $group = Group::query()->firstWhere("name", $request["name"]); 28 | if ($group) return ResponseController::groupExists(); 29 | 30 | Group::query()->create([ 31 | "name" => $request["name"], 32 | "count" => $request["count"], 33 | "size" => $request["size"] 34 | ]); 35 | 36 | return ResponseController::success(); 37 | } 38 | 39 | public function updateGroup(Request $request, $group_id) 40 | { 41 | $validator = Validator::make($request->all(), [ 42 | "name" => "required|string", 43 | "count" => "required|numeric", 44 | "size" => "required|numeric" 45 | ]); 46 | 47 | if ($validator->fails()) return ResponseController::paramsError(); 48 | 49 | $group = Group::query()->find($group_id); 50 | if (!$group) return ResponseController::groupNotExists(); 51 | 52 | if ($group_id === "1") { 53 | $request["name"] = $group["name"]; 54 | } else { 55 | $Group = Group::query()->firstWhere("name", $request["name"]); 56 | if ($Group && $group["id"] !== $Group["id"]) return ResponseController::groupExists(); 57 | } 58 | 59 | $group->update([ 60 | "name" => $request["name"], 61 | "count" => $request["count"], 62 | "size" => $request["size"] 63 | ]); 64 | 65 | return ResponseController::success(); 66 | } 67 | 68 | public function removeGroups(Request $request) 69 | { 70 | $validator = Validator::make($request->all(), [ 71 | "group_ids" => "required|array", 72 | "group_ids.*" => "required|numeric" 73 | ]); 74 | 75 | if ($validator->fails()) return ResponseController::paramsError(); 76 | 77 | if (in_array(1, $request["group_ids"]) || in_array(2, $request["group_ids"])) return ResponseController::groupCanNotBeRemoved("自带分组禁止删除"); 78 | 79 | Group::query()->whereIn("id", $request["group_ids"])->delete(); 80 | 81 | return ResponseController::success(); 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /app/Http/Controllers/InvCodeController.php: -------------------------------------------------------------------------------- 1 | with("group") 17 | ->withCount("user as use_count") 18 | ->paginate($request["size"]); 19 | 20 | return ResponseController::success($InvCodes); 21 | } 22 | 23 | public function addInvCode(Request $request) 24 | { 25 | $validator = Validator::make($request->all(), [ 26 | "name" => "required|string", 27 | "can_count" => "required|numeric", 28 | "group_id" => "required|numeric" 29 | ]); 30 | 31 | if ($validator->fails()) return ResponseController::paramsError(); 32 | 33 | $invCode = InvCode::query()->firstWhere("name", $request["name"]); 34 | if ($invCode) return ResponseController::invCodeExists(); 35 | 36 | $group = Group::query()->find($request["group_id"]); 37 | if (!$group) return ResponseController::groupNotExists(); 38 | 39 | InvCode::query()->create([ 40 | "name" => $request["name"], 41 | "group_id" => $request["group_id"], 42 | "can_count" => $request["can_count"] 43 | ]); 44 | 45 | return ResponseController::success(); 46 | } 47 | 48 | public function generateInvCode(Request $request) 49 | { 50 | $validator = Validator::make($request->all(), [ 51 | "can_count" => "required|numeric", 52 | "count" => "required|numeric", 53 | "group_id" => "required|numeric" 54 | ]); 55 | 56 | if ($validator->fails()) return ResponseController::paramsError(); 57 | 58 | $group = Group::query()->find($request["group_id"]); 59 | if (!$group) return ResponseController::groupNotExists(); 60 | 61 | for ($i = 0; $i < $request["count"]; $i++) { 62 | $name = Str::random(); 63 | $invCode = InvCode::query()->firstWhere("name", $name); 64 | if ($invCode) { 65 | $i--; 66 | continue; 67 | } 68 | 69 | InvCode::query()->create([ 70 | "name" => $name, 71 | "group_id" => $request["group_id"], 72 | "can_count" => $request["can_count"] 73 | ]); 74 | } 75 | 76 | return ResponseController::success(); 77 | } 78 | 79 | public function updateInvCode(Request $request, $inv_code_id) 80 | { 81 | $validator = Validator::make($request->all(), [ 82 | "name" => "required|string", 83 | "group_id" => "required|numeric", 84 | "can_count" => "required|numeric" 85 | ]); 86 | 87 | if ($validator->fails()) return ResponseController::paramsError(); 88 | 89 | $invCode = InvCode::query()->find($inv_code_id); 90 | if (!$invCode) return ResponseController::invCodeNotExists(); 91 | 92 | if (in_array($inv_code_id, ["1", "2"])) { 93 | $request["name"] = $invCode["name"]; 94 | } else { 95 | $InvCode = InvCode::query()->firstWhere("name", $request["name"]); 96 | if ($InvCode && $invCode["id"] !== $InvCode["id"]) return ResponseController::invCodeExists(); 97 | } 98 | 99 | $group = Group::query()->find($request["group_id"]); 100 | if (!$group) return ResponseController::groupNotExists(); 101 | 102 | $invCode->update([ 103 | "name" => $request["name"], 104 | "group_id" => $request["group_id"], 105 | "can_count" => $request["can_count"] 106 | ]); 107 | 108 | return ResponseController::success(); 109 | } 110 | 111 | public function removeInvCodes(Request $request) 112 | { 113 | $validator = Validator::make($request->all(), [ 114 | "inv_code_ids" => "required|array", 115 | "inv_code_ids.*" => "required|numeric" 116 | ]); 117 | 118 | if ($validator->fails()) return ResponseController::paramsError(); 119 | 120 | if (in_array(1, $request["inv_code_ids"]) || in_array(2, $request["inv_code_ids"])) return ResponseController::invCodeCanNotBeRemoved("自带邀请码禁止删除"); 121 | 122 | InvCode::query()->whereIn("id", $request["inv_code_ids"])->delete(); 123 | 124 | return ResponseController::success(); 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /app/Http/Controllers/IpController.php: -------------------------------------------------------------------------------- 1 | paginate($request["size"]); 15 | return ResponseController::success($ips); 16 | } 17 | 18 | public function addIp(Request $request) 19 | { 20 | $validator = Validator::make($request->all(), [ 21 | "ip" => "required|string|ip", 22 | "mode" => ["required", Rule::in([0, 1])], 23 | ]); 24 | 25 | if ($validator->fails()) return ResponseController::paramsError(); 26 | 27 | $ip = Ip::query()->firstWhere("ip", $request["ip"]); 28 | if ($ip) return ResponseController::IpExists(); 29 | 30 | Ip::query()->create([ 31 | "ip" => $request["ip"], 32 | "mode" => $request["mode"] 33 | ]); 34 | 35 | return ResponseController::success(); 36 | } 37 | 38 | public function updateIp(Request $request, $ip_id) 39 | { 40 | $validator = Validator::make($request->all(), [ 41 | "ip" => "required|string|ip", 42 | "mode" => ["required", Rule::in([0, 1])] 43 | ]); 44 | 45 | if ($validator->fails()) return ResponseController::paramsError(); 46 | 47 | $ip = Ip::query()->find($ip_id); 48 | if (!$ip) return ResponseController::IpNotExists(); 49 | 50 | $Ip = Ip::query()->firstWhere("ip", $request["ip"]); 51 | if ($Ip && $ip["id"] !== $Ip["id"]) return ResponseController::IpExists(); 52 | 53 | $ip->update([ 54 | "ip" => $request["ip"], 55 | "mode" => $request["mode"] 56 | ]); 57 | 58 | return ResponseController::success(); 59 | } 60 | 61 | public function removeIps(Request $request) 62 | { 63 | $validator = Validator::make($request->all(), [ 64 | "ip_ids" => "required|array", 65 | "ip_ids.*" => "required|numeric" 66 | ]); 67 | 68 | if ($validator->fails()) return ResponseController::paramsError(); 69 | 70 | Ip::query()->whereIn("id", $request["ip_ids"])->delete(); 71 | 72 | return ResponseController::success(); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /app/Http/Controllers/RecordController.php: -------------------------------------------------------------------------------- 1 | all(), [ 16 | "orderBy" => ["required", Rule::in(["size", "id"])] 17 | ]); 18 | 19 | if ($validator->fails()) return ResponseController::paramsError(); 20 | 21 | $records = Record::query()->with(["file"]); 22 | 23 | if ($request["orderBy"] == "id") { 24 | $records->orderByDesc("id"); 25 | } else { 26 | $records = $records->select('records.*') 27 | ->join('file_lists', 'records.fs_id', '=', 'file_lists.id') 28 | ->orderByDesc('file_lists.size'); 29 | } 30 | 31 | $records = $records->paginate($request["size"]); 32 | return ResponseController::success($records); 33 | } 34 | 35 | public function getRecordsCount() 36 | { 37 | $total = Record::query() 38 | ->leftJoin("file_lists", "records.fs_id", "file_lists.id") 39 | ->selectRaw("SUM(size) as size,COUNT(*) as count") 40 | ->first(); 41 | 42 | $today = Record::query() 43 | ->leftJoin("file_lists", "records.fs_id", "file_lists.id") 44 | ->whereDate("records.created_at", Carbon::today(config("app.timezone"))) 45 | ->selectRaw("SUM(size) as size,COUNT(*) as count") 46 | ->first(); 47 | 48 | return ResponseController::success([ 49 | "today" => [ 50 | "count" => $today["count"], 51 | "size" => $today["size"] 52 | ], 53 | "total" => [ 54 | "count" => $total["count"], 55 | "size" => $total["size"] 56 | ] 57 | ]); 58 | } 59 | 60 | public static function addRecord($data) 61 | { 62 | $validator = Validator::make($data, [ 63 | "ip" => "required|string", 64 | "fs_id" => "required|numeric", 65 | "url" => "required|string", 66 | "ua" => "required|string", 67 | "user_id" => "nullable|numeric", 68 | "token_id" => "nullable|numeric", 69 | "account_id" => "required|numeric" 70 | ]); 71 | 72 | if ($validator->fails()) return ResponseController::paramsError(); 73 | 74 | Record::query()->create($data); 75 | 76 | return ResponseController::success(); 77 | } 78 | 79 | public function removeRecords(Request $request) 80 | { 81 | $validator = Validator::make($request->all(), [ 82 | "record_ids" => "required|array", 83 | "record_ids.*" => "required|numeric" 84 | ]); 85 | 86 | if ($validator->fails()) return ResponseController::paramsError(); 87 | 88 | Record::query()->whereIn("id", $request->record_ids)->forceDelete(); 89 | 90 | return ResponseController::success(); 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /app/Http/Controllers/TokenController.php: -------------------------------------------------------------------------------- 1 | withCount([ 17 | 'records as total_count', 18 | 'records as today_count' => function ($query) { 19 | $query->whereDate('created_at', Carbon::today(config("app.timezone"))); 20 | } 21 | ]) 22 | ->withSum([ 23 | 'records as total_size' => function ($query) { 24 | $query->leftJoin('file_lists', 'file_lists.id', '=', 'records.fs_id'); 25 | }, 26 | 'records as today_size' => function ($query) { 27 | $query->leftJoin('file_lists', 'file_lists.id', '=', 'records.fs_id') 28 | ->whereDate('records.created_at', Carbon::today(config("app.timezone"))); 29 | } 30 | ], "file_lists.size") 31 | ->paginate($request["size"]); 32 | return ResponseController::success($tokens); 33 | } 34 | 35 | public function addToken(Request $request) 36 | { 37 | $validator = Validator::make($request->all(), [ 38 | "name" => "required|string", 39 | "count" => "required|numeric", 40 | "size" => "required|numeric", 41 | "day" => "required|numeric", 42 | ]); 43 | 44 | if ($validator->fails()) return ResponseController::paramsError(); 45 | 46 | $token = Token::query()->firstWhere("name", $request["name"]); 47 | if ($token) return ResponseController::TokenExists(); 48 | 49 | Token::query()->create([ 50 | "name" => $request["name"], 51 | "count" => $request["count"], 52 | "size" => $request["size"], 53 | "day" => $request["day"], 54 | "ip" => null 55 | ]); 56 | 57 | return ResponseController::success(); 58 | } 59 | 60 | public function generateToken(Request $request) 61 | { 62 | $validator = Validator::make($request->all(), [ 63 | "token_count" => "required|numeric", 64 | "count" => "required|numeric", 65 | "size" => "required|numeric", 66 | "day" => "required|numeric", 67 | ]); 68 | 69 | if ($validator->fails()) return ResponseController::paramsError(); 70 | 71 | for ($i = 0; $i < $request["token_count"]; $i++) { 72 | $name = Str::random(); 73 | $token = Token::query()->firstWhere("name", $name); 74 | if ($token) { 75 | $i--; 76 | continue; 77 | } 78 | 79 | Token::query()->create([ 80 | "name" => $name, 81 | "count" => $request["count"], 82 | "size" => $request["size"], 83 | "day" => $request["day"], 84 | "ip" => null 85 | ]); 86 | } 87 | 88 | return ResponseController::success(); 89 | } 90 | 91 | public function updateToken(Request $request, $token_id) 92 | { 93 | $validator = Validator::make($request->all(), [ 94 | "name" => "required|string", 95 | "count" => "required|numeric", 96 | "size" => "required|numeric", 97 | "day" => "required|numeric", 98 | "expired_at" => "nullable|date", 99 | "ip" => "nullable|string" 100 | ]); 101 | 102 | if ($validator->fails()) return ResponseController::paramsError(); 103 | 104 | $token = Token::query()->find($token_id); 105 | if (!$token) return ResponseController::TokenNotExists(); 106 | 107 | $Token = Token::query()->firstWhere("name", $request["name"]); 108 | if ($Token && $token["id"] !== $Token["id"]) return ResponseController::TokenExists(); 109 | 110 | $token->update([ 111 | "name" => $request["name"], 112 | "count" => $request["count"], 113 | "size" => $request["size"], 114 | "day" => $request["day"], 115 | "expired_at" => $request["expired_at"] ? Carbon::createFromTimeString($request["expired_at"], config("app.timezone"))->addHours(8)->format("Y-m-d H:i:s") : null, 116 | "ip" => $request["ip"] === "" ? null : $request["ip"] 117 | ]); 118 | 119 | return ResponseController::success(); 120 | } 121 | 122 | public function removeTokens(Request $request) 123 | { 124 | $validator = Validator::make($request->all(), [ 125 | "token_ids" => "required|array", 126 | "token_ids.*" => "required|numeric" 127 | ]); 128 | 129 | if ($validator->fails()) return ResponseController::paramsError(); 130 | 131 | Token::query()->whereIn("id", $request["token_ids"])->delete(); 132 | 133 | return ResponseController::success(); 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /app/Http/Controllers/UtilsController.php: -------------------------------------------------------------------------------- 1 | to(config("mail.to.address"))->subject($subject); 34 | }); 35 | } catch (Exception $e) { 36 | // 处理异常 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Http/Controllers/config/MailConfigController.php: -------------------------------------------------------------------------------- 1 | $config["switch"], 21 | "host" => $config["mailers"]["smtp"]["host"], 22 | "port" => $config["mailers"]["smtp"]["port"], 23 | "username" => $config["mailers"]["smtp"]["username"], 24 | "password" => $config["mailers"]["smtp"]["password"], 25 | "encryption" => $config["mailers"]["smtp"]["encryption"], 26 | "from_address" => $config["from"]["address"], 27 | "from_name" => $config["from"]["name"], 28 | "to_address" => $config["to"]["address"], 29 | "to_name" => $config["to"]["name"] 30 | ]); 31 | } 32 | 33 | public function updateMailConfig(Request $request) 34 | { 35 | $validator = Validator::make($request->all(), [ 36 | "switch" => "required|bool", 37 | "host" => "required|string", 38 | "port" => "required|numeric", 39 | "username" => "required|string", 40 | "password" => "required|string", 41 | "encryption" => ["required", Rule::in(["tls", "ssl"])], 42 | "from_address" => "required|string", 43 | "from_name" => "required|string", 44 | "to_address" => "required|string", 45 | "to_name" => "required|string" 46 | ]); 47 | 48 | if ($validator->fails()) return ResponseController::paramsError(); 49 | 50 | updateEnv([ 51 | "MAIL_SWITCH" => $request["switch"], 52 | "MAIL_HOST" => '"' . $request["host"] . '"', 53 | "MAIL_PORT" => '"' . $request["port"] . '"', 54 | "MAIL_USERNAME" => '"' . $request["username"] . '"', 55 | "MAIL_PASSWORD" => '"' . $request["password"] . '"', 56 | "MAIL_ENCRYPTION" => '"' . $request["encryption"] . '"', 57 | "MAIL_FROM_ADDRESS" => '"' . $request["from_address"] . '"', 58 | "MAIL_FROM_NAME" => '"' . $request["from_name"] . '"', 59 | "MAIL_TO_ADDRESS" => '"' . $request["to_address"] . '"', 60 | "MAIL_TO_NAME" => '"' . $request["to_name"] . '"', 61 | ]); 62 | 63 | return ResponseController::success(); 64 | } 65 | 66 | public function sendTestMail(Request $request) 67 | { 68 | $update = self::updateMailConfig($request); 69 | $updateData = $update->getData(true); 70 | if ($updateData["code"] !== 200) return $update; 71 | 72 | try { 73 | Mail::raw("亲爱的 " . config("mail.to.name") . ":\n\t这是一封来自" . config("app.name") . "的连通性测试邮件,请查收!", function ($message) { 74 | $message->to(config("mail.to.address"))->subject("测试邮件"); 75 | }); 76 | } catch (Exception $e) { 77 | return ResponseController::sendMailFailed($e->getMessage()); 78 | } 79 | 80 | return ResponseController::success(); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /app/Http/Controllers/config/MainConfigController.php: -------------------------------------------------------------------------------- 1 | config("app.debug"), 21 | "name" => config("app.name") 22 | ]); 23 | } 24 | 25 | public function updateConfig(Request $request) 26 | { 27 | $validator = Validator::make($request->all(), [ 28 | "max_once" => "required|numeric", 29 | "password" => "string", 30 | "announce" => "string", 31 | "user_agent" => "required|string", 32 | "need_inv_code" => "required|bool", 33 | "whitelist_mode" => "required|bool", 34 | "debug" => "required|bool", 35 | "name" => "required|string", 36 | "main_server" => "string", 37 | "code" => "string", 38 | "show_copyright" => "required|bool", 39 | "custom_copyright" => "string", 40 | "parse_mode" => "required|numeric", 41 | "max_filesize" => "required|numeric", 42 | "min_single_filesize" => "required|numeric", 43 | "max_single_filesize" => "required|numeric", 44 | "token_mode" => "required|bool", 45 | "button_link" => "string", 46 | "limit_cn" => "required|bool", 47 | "limit_prov" => "required|bool", 48 | "show_login_button" => "required|bool", 49 | "token_bind_ip" => "required|bool", 50 | "proxy_server" => "string", 51 | "proxy_password" => "string" 52 | ]); 53 | 54 | if ($validator->fails()) return ResponseController::paramsError(); 55 | 56 | $update = []; 57 | 58 | $update["_94LIST_MAX_ONCE"] = $request["max_once"]; 59 | $update["_94LIST_PASSWORD"] = '"' . $request["password"] . '"'; 60 | $update["_94LIST_ANNOUNCE"] = '"' . htmlspecialchars(str_replace("\n", "[NextLine]", $request["announce"]), ENT_QUOTES) . '"'; 61 | $update["_94LIST_NEED_INV_CODE"] = $request["need_inv_code"]; 62 | $update["_94LIST_WHITELIST_MODE"] = $request["whitelist_mode"]; 63 | $update["APP_DEBUG"] = $request["debug"]; 64 | $update["APP_NAME"] = '"' . $request["name"] . '"'; 65 | $update["_94LIST_MAIN_SERVER"] = '"' . rtrim($request["main_server"], '/') . '"'; 66 | $update["_94LIST_CODE"] = '"' . $request["code"] . '"'; 67 | $update["_94LIST_SHOW_COPYRIGHT"] = $request["show_copyright"]; 68 | $update["_94LIST_PARSE_MODE"] = $request["parse_mode"]; 69 | $update["_94LIST_MAX_FILESIZE"] = $request["max_filesize"]; 70 | $update["_94LIST_CUSTOM_COPYRIGHT"] = '"' . $request["custom_copyright"] . '"'; 71 | $update["_94LIST_MIN_SINGLE_FILESIZE"] = $request["min_single_filesize"]; 72 | $update["_94LIST_MAX_SINGLE_FILESIZE"] = $request["max_single_filesize"]; 73 | $update["_94LIST_TOKEN_MODE"] = $request["token_mode"]; 74 | $update["_94LIST_BUTTON_LINK"] = '"' . $request["button_link"] . '"'; 75 | $update["_94LIST_LIMIT_CN"] = $request["limit_cn"]; 76 | $update["_94LIST_LIMIT_PROV"] = $request["limit_prov"]; 77 | $update["_94LIST_SHOW_LOGIN_BUTTON"] = $request["show_login_button"]; 78 | $update["_94LIST_TOKEN_BIND_IP"] = $request["token_bind_ip"]; 79 | $update["_94LIST_USER_AGENT"] = '"' . $request["user_agent"] . '"'; 80 | $update["HKLIST_PROXY_SERVER"] = '"' . $request["proxy_server"] . '"'; 81 | $update["HKLIST_PROXY_PASSWORD"] = '"' . $request["proxy_password"] . '"'; 82 | 83 | updateEnv($update); 84 | 85 | return ResponseController::success(); 86 | } 87 | 88 | public function testAuth(Request $request) 89 | { 90 | $updateConfig = self::updateConfig($request); 91 | $updateConfigData = $updateConfig->getData(true); 92 | if ($updateConfigData["code"] !== 200) return $updateConfig; 93 | 94 | $http = new Client(); 95 | 96 | // 测试 97 | try { 98 | $res = $http->post(config("94list.main_server") . "/api/checkCode", ["query" => ["code" => config("94list.code")]]); 99 | return JSON::decode($res->getBody()->getContents()); 100 | } catch (RequestException $e) { 101 | try { 102 | $res = $http->get(config("94list.main_server") . "/api/ip"); 103 | $response = $res->getBody()->getContents(); 104 | } catch (GuzzleException $e) { 105 | return ResponseController::networkError("连接解析服务器"); 106 | } 107 | $errmsg = JSON::decode($e->getResponse()->getBody()->getContents()); 108 | $errmsg["data"]["ip"] = $response; 109 | return $errmsg; 110 | } catch (GuzzleException $e) { 111 | return ResponseController::networkError("连接解析服务器"); 112 | } 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /app/Http/Middleware/AutoUpdate.php: -------------------------------------------------------------------------------- 1 | string("ip")->nullable()->after("day"); 26 | }); 27 | } 28 | 29 | // 1.3.14 迁移 增加账号类型 access_token refresh_token 30 | if (!Schema::hasColumn("accounts", "account_type")) { 31 | Schema::table("accounts", function (Blueprint $table) { 32 | $table->enum("account_type", ["cookie", "access_token"])->default("cookie")->after("baidu_name"); 33 | $table->longText("cookie")->nullable()->change(); 34 | $table->longText("access_token")->nullable()->after("cookie"); 35 | $table->longText("refresh_token")->nullable()->after("access_token"); 36 | }); 37 | } 38 | 39 | // 1.3.14 迁移 增加token到期时间 40 | if (!Schema::hasColumn("accounts", "expired_at")) { 41 | Schema::table("accounts", function (Blueprint $table) { 42 | $table->timestamp("expired_at")->nullable()->after("refresh_token"); 43 | }); 44 | } 45 | 46 | // 1.3.19 迁移 增加用户uk 47 | if (!Schema::hasColumn("accounts", "uk")) { 48 | Schema::table("accounts", function (Blueprint $table) { 49 | $table->string("uk")->nullable()->after("cookie"); 50 | }); 51 | } 52 | 53 | // 1.3.29 54 | $account = Account::query()->find(0); 55 | if (!$account) { 56 | Account::query() 57 | ->create([ 58 | "baidu_name" => "授权服务器提供", 59 | "account_type" => "cookie", 60 | "vip_type" => "普通用户", 61 | "switch" => 0 62 | ]) 63 | ->update([ 64 | "id" => 0 65 | ]); 66 | } 67 | 68 | // 1.3.34 迁移 增加企业cid 69 | if (!Schema::hasColumn("accounts", "cid")) { 70 | Schema::table("accounts", function (Blueprint $table) { 71 | $table->enum("account_type", ["cookie", "access_token", "enterprise"])->change(); 72 | $table->unsignedBigInteger("cid")->nullable()->after("refresh_token"); 73 | }); 74 | } 75 | 76 | return $next($request); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /app/Http/Middleware/IpFilter.php: -------------------------------------------------------------------------------- 1 | firstWhere(['ip' => $ip, 'mode' => 1]); 25 | if (!$ip) return ResponseController::notInWhiteList(); 26 | } else { 27 | $ip = Ip::query()->firstWhere(['ip' => $ip, 'mode' => 0]); 28 | if ($ip) return ResponseController::inBlackList(); 29 | } 30 | 31 | return $next($request); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Http/Middleware/NeedInstall.php: -------------------------------------------------------------------------------- 1 | url(), "install")) return $next($request); 20 | 21 | // 检查是否安装 22 | $dbDefault = config("database.default"); 23 | if ( 24 | $dbDefault === "no" || 25 | ($dbDefault === "sqlite" && !File::exists(database_path("database.sqlite"))) 26 | ) { 27 | return response()->redirectTo("/install"); 28 | } 29 | 30 | return $next($request); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Http/Middleware/NeedPassword.php: -------------------------------------------------------------------------------- 1 | method() === "GET" ? $request->query() : $request->post(); 28 | unset($temp["rand"]); 29 | 30 | // 校验哈希 31 | if ($rand !== sha1(json_encode($temp, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE))) return ResponseController::paramsError(); 32 | 33 | if (!$print) { 34 | Cache::put($request["print"], [UtilsController::getIp()]); 35 | return $next($request); 36 | } 37 | 38 | if (!in_array(UtilsController::getIp(), $print)) { 39 | if (count($print) > 3) { 40 | return ResponseController::inBlackList(); 41 | } else { 42 | $print[] = UtilsController::getIp(); 43 | Cache::put($request["print"], $print); 44 | } 45 | } 46 | 47 | return $next($request); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/Http/Middleware/RoleFilter.php: -------------------------------------------------------------------------------- 1 | hasMany(Record::class)->withTrashed(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Models/FileList.php: -------------------------------------------------------------------------------- 1 | belongsTo(Group::class)->withTrashed(); 24 | } 25 | 26 | public function user() 27 | { 28 | return $this->hasMany(User::class)->withTrashed(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Models/Ip.php: -------------------------------------------------------------------------------- 1 | hasOne(FileList::class, "id", "fs_id"); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Models/Token.php: -------------------------------------------------------------------------------- 1 | hasMany(Record::class)->withTrashed(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Models/User.php: -------------------------------------------------------------------------------- 1 | belongsTo(InvCode::class)->withTrashed(); 25 | } 26 | 27 | public function group() 28 | { 29 | return $this->hasOneThrough(Group::class, InvCode::class, "id", "id", "inv_code_id", "group_id")->withTrashed()->withTrashedParents(); 30 | } 31 | 32 | public function records() 33 | { 34 | return $this->hasMany(Record::class)->withTrashed(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | $value]; 17 | 18 | $envPath = base_path(".env"); 19 | $contentArray = collect(file($envPath, FILE_IGNORE_NEW_LINES)); 20 | 21 | $contentArray->transform(function ($item) use (&$data) { 22 | foreach ($data as $key => $value) { 23 | if (str_starts_with($item, $key . "=")) { 24 | unset($data[$key]); 25 | if (is_bool($value)) return $key . "=" . ($value ? "true" : "false"); 26 | return $key . "=" . $value; 27 | } 28 | } 29 | return $item; 30 | }); 31 | 32 | if (count($data) !== 0) { 33 | $contentArray->add(""); 34 | foreach ($data as $key => $value) { 35 | $contentArray->add($key . "=" . $value); 36 | } 37 | } 38 | 39 | $content = implode("\n", $contentArray->toArray()); 40 | File::put($envPath, $content); 41 | } 42 | } 43 | 44 | if (!function_exists("getVersionString")) { 45 | /** 46 | * get Version in the env arr 47 | * @param $env_arr 48 | * @return string 49 | */ 50 | function getVersionString($env_arr): string 51 | { 52 | return $env_arr->filter(fn($env, $key) => $key === "_94LIST_VERSION")->first() ?? "0.0.0"; 53 | } 54 | } 55 | 56 | if (!function_exists("getEnvFile")) { 57 | /** 58 | * get env file arr 59 | * @param $env_path 60 | * @return Collection 61 | */ 62 | function getEnvFile($env_path): Collection 63 | { 64 | return collect(explode("\n", File::get($env_path))) 65 | ->filter(fn($line) => $line) 66 | ->map(fn($line) => explode("=", $line)) 67 | ->mapWithKeys(fn($item) => [$item[0] => $item[1] ?? ""]); 68 | } 69 | } -------------------------------------------------------------------------------- /artisan: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | handleCommand(new ArgvInput); 14 | 15 | exit($status); 16 | -------------------------------------------------------------------------------- /bootstrap/app.php: -------------------------------------------------------------------------------- 1 | withRouting( 17 | web: __DIR__ . '/../routes/web.php', 18 | api: __DIR__ . '/../routes/api.php', 19 | commands: __DIR__ . '/../routes/console.php', 20 | health: '/up', 21 | ) 22 | ->withMiddleware(function (Middleware $middleware) { 23 | $middleware->alias([ 24 | 'RoleFilter' => RoleFilter::class, 25 | 'IpFilter' => IpFilter::class, 26 | 'NeedInstall' => NeedInstall::class, 27 | 'NeedPassword' => NeedPassword::class, 28 | 'AutoUpdate' => AutoUpdate::class, 29 | 'ParamCheck' => ParamCheck::class 30 | ]); 31 | 32 | $middleware->web(remove: [ 33 | StartSession::class, 34 | ]); 35 | 36 | $middleware->use([ 37 | StartSession::class 38 | ]); 39 | 40 | $middleware->trustProxies("*"); 41 | }) 42 | ->withExceptions(function (Exceptions $exceptions) { 43 | // 44 | })->create(); 45 | -------------------------------------------------------------------------------- /bootstrap/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /bootstrap/providers.php: -------------------------------------------------------------------------------- 1 | "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", 5 | "fake_wx_user_agent" => "Mozilla/5.0 (Linux; Android 7.1.1; MI 6 Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/043807 Mobile Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/4G Language/zh_CN MicroMessenger/6.6.1.1220(0x26060135) NetType/4G Language/zh_CN miniProgram", 6 | "fake_cookie" => "BAIDUID=A4FDFAE43DDBF7E6956B02F6EF715373:FG=1; BAIDUID_BFESS=A4FDFAE43DDBF7E6956B02F6EF715373:FG=1; newlogin=1", 7 | 8 | "version" => "1.3.45", 9 | "sleep" => (int)env("_94LIST_SLEEP", 3), 10 | "max_once" => (int)env("_94LIST_MAX_ONCE", 20), 11 | "password" => env("_94LIST_PASSWORD", ""), 12 | "announce" => env("_94LIST_ANNOUNCE", "公告"), 13 | "user_agent" => env("_94LIST_USER_AGENT", "netdisk;7.42.0.5;PC"), 14 | "need_inv_code" => (bool)env("_94LIST_NEED_INV_CODE", true), 15 | "whitelist_mode" => (bool)env("_94LIST_WHITELIST_MODE", false), 16 | 17 | "show_copyright" => (bool)env("_94LIST_SHOW_COPYRIGHT", true), 18 | "custom_copyright" => env("_94LIST_CUSTOM_COPYRIGHT", "本项目半开源, 项目地址: https://github.com/huankong233/94list-laravel"), 19 | 20 | "main_server" => env("_94LIST_MAIN_SERVER", "空"), 21 | "code" => env("_94LIST_CODE", "空"), 22 | 23 | "parse_mode" => (int)env("_94LIST_PARSE_MODE", 3), 24 | "max_filesize" => (int)env("_94LIST_MAX_FILESIZE", 536870912000), 25 | "min_single_filesize" => (int)env("_94LIST_MIN_SINGLE_FILESIZE", 0), 26 | "max_single_filesize" => (int)env("_94LIST_MAX_SINGLE_FILESIZE", 53687091200), 27 | "token_mode" => (bool)env("_94LIST_TOKEN_MODE", true), 28 | "button_link" => env("_94LIST_BUTTON_LINK", ""), 29 | "limit_cn" => (bool)env("_94LIST_LIMIT_CN", true), 30 | "limit_prov" => (bool)env("_94LIST_LIMIT_PROV", false), 31 | 32 | "show_login_button" => (bool)env("_94LIST_SHOW_LOGIN_BUTTON", true), 33 | "token_bind_ip" => (bool)env("_94LIST_TOKEN_BIND_IP", false), 34 | 35 | "proxy_server" => env("HKLIST_PROXY_SERVER", ""), 36 | "proxy_password" => env("HKLIST_PROXY_PASSWORD", "download"), 37 | 38 | "download_ticket" => [ 39 | "cookie" => env("HKLIST_DOWNLOAD_TICKET_COOKIE"), 40 | "cid" => env("HKLIST_DOWNLOAD_TICKET_CID"), 41 | "bdstoken" => env("HKLIST_DOWNLOAD_TICKET_BDSTOKEN"), 42 | "surl" => env("HKLIST_DOWNLOAD_TICKET_SURL"), 43 | "pwd" => env("HKLIST_DOWNLOAD_TICKET_PWD"), 44 | "path" => env("HKLIST_DOWNLOAD_TICKET_PATH") 45 | ] 46 | ]; 47 | -------------------------------------------------------------------------------- /config/app.php: -------------------------------------------------------------------------------- 1 | env('APP_NAME', 'Laravel'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Application Environment 21 | |-------------------------------------------------------------------------- 22 | | 23 | | This value determines the "environment" your application is currently 24 | | running in. This may determine how you prefer to configure various 25 | | services the application utilizes. Set this in your ".env" file. 26 | | 27 | */ 28 | 29 | 'env' => env('APP_ENV', 'production'), 30 | 31 | /* 32 | |-------------------------------------------------------------------------- 33 | | Application Debug Mode 34 | |-------------------------------------------------------------------------- 35 | | 36 | | When your application is in debug mode, detailed error messages with 37 | | stack traces will be shown on every error that occurs within your 38 | | application. If disabled, a simple generic error page is shown. 39 | | 40 | */ 41 | 42 | 'debug' => (bool) env('APP_DEBUG', false), 43 | 44 | /* 45 | |-------------------------------------------------------------------------- 46 | | Application URL 47 | |-------------------------------------------------------------------------- 48 | | 49 | | This URL is used by the console to properly generate URLs when using 50 | | the Artisan command line tool. You should set this to the root of 51 | | the application so that it's available within Artisan commands. 52 | | 53 | */ 54 | 55 | 'url' => env('APP_URL', 'http://localhost'), 56 | 57 | /* 58 | |-------------------------------------------------------------------------- 59 | | Application Timezone 60 | |-------------------------------------------------------------------------- 61 | | 62 | | Here you may specify the default timezone for your application, which 63 | | will be used by the PHP date and date-time functions. The timezone 64 | | is set to "UTC" by default as it is suitable for most use cases. 65 | | 66 | */ 67 | 68 | 'timezone' => env('APP_TIMEZONE', 'Asia/Shanghai'), 69 | 70 | /* 71 | |-------------------------------------------------------------------------- 72 | | Application Locale Configuration 73 | |-------------------------------------------------------------------------- 74 | | 75 | | The application locale determines the default locale that will be used 76 | | by Laravel's translation / localization methods. This option can be 77 | | set to any locale for which you plan to have translation strings. 78 | | 79 | */ 80 | 81 | 'locale' => env('APP_LOCALE', 'zh_CN'), 82 | 83 | 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'zh_CN'), 84 | 85 | 'faker_locale' => env('APP_FAKER_LOCALE', 'zh_CN'), 86 | 87 | /* 88 | |-------------------------------------------------------------------------- 89 | | Encryption Key 90 | |-------------------------------------------------------------------------- 91 | | 92 | | This key is utilized by Laravel's encryption services and should be set 93 | | to a random, 32 character string to ensure that all encrypted values 94 | | are secure. You should do this prior to deploying the application. 95 | | 96 | */ 97 | 98 | 'cipher' => 'AES-256-CBC', 99 | 100 | 'key' => env('APP_KEY'), 101 | 102 | 'previous_keys' => [ 103 | ...array_filter( 104 | explode(',', env('APP_PREVIOUS_KEYS', '')) 105 | ), 106 | ], 107 | 108 | /* 109 | |-------------------------------------------------------------------------- 110 | | Maintenance Mode Driver 111 | |-------------------------------------------------------------------------- 112 | | 113 | | These configuration options determine the driver used to determine and 114 | | manage Laravel's "maintenance mode" status. The "cache" driver will 115 | | allow maintenance mode to be controlled across multiple machines. 116 | | 117 | | Supported drivers: "file", "cache" 118 | | 119 | */ 120 | 121 | 'maintenance' => [ 122 | 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), 123 | 'store' => env('APP_MAINTENANCE_STORE', 'database'), 124 | ], 125 | 126 | ]; 127 | -------------------------------------------------------------------------------- /config/auth.php: -------------------------------------------------------------------------------- 1 | [ 17 | 'guard' => env('AUTH_GUARD', 'web'), 18 | 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), 19 | ], 20 | 21 | /* 22 | |-------------------------------------------------------------------------- 23 | | Authentication Guards 24 | |-------------------------------------------------------------------------- 25 | | 26 | | Next, you may define every authentication guard for your application. 27 | | Of course, a great default configuration has been defined for you 28 | | which utilizes session storage plus the Eloquent user provider. 29 | | 30 | | All authentication guards have a user provider, which defines how the 31 | | users are actually retrieved out of your database or other storage 32 | | system used by the application. Typically, Eloquent is utilized. 33 | | 34 | | Supported: "session" 35 | | 36 | */ 37 | 38 | 'guards' => [ 39 | 'web' => [ 40 | 'driver' => 'session', 41 | 'provider' => 'users', 42 | ], 43 | ], 44 | 45 | /* 46 | |-------------------------------------------------------------------------- 47 | | User Providers 48 | |-------------------------------------------------------------------------- 49 | | 50 | | All authentication guards have a user provider, which defines how the 51 | | users are actually retrieved out of your database or other storage 52 | | system used by the application. Typically, Eloquent is utilized. 53 | | 54 | | If you have multiple user tables or models you may configure multiple 55 | | providers to represent the model / table. These providers may then 56 | | be assigned to any extra authentication guards you have defined. 57 | | 58 | | Supported: "database", "eloquent" 59 | | 60 | */ 61 | 62 | 'providers' => [ 63 | 'users' => [ 64 | 'driver' => 'eloquent', 65 | 'model' => env('AUTH_MODEL', App\Models\User::class), 66 | ], 67 | 68 | // 'users' => [ 69 | // 'driver' => 'database', 70 | // 'table' => 'users', 71 | // ], 72 | ], 73 | 74 | /* 75 | |-------------------------------------------------------------------------- 76 | | Resetting Passwords 77 | |-------------------------------------------------------------------------- 78 | | 79 | | These configuration options specify the behavior of Laravel's password 80 | | reset functionality, including the table utilized for token storage 81 | | and the user provider that is invoked to actually retrieve users. 82 | | 83 | | The expiry time is the number of minutes that each reset token will be 84 | | considered valid. This security feature keeps tokens short-lived so 85 | | they have less time to be guessed. You may change this as needed. 86 | | 87 | | The throttle setting is the number of seconds a user must wait before 88 | | generating more password reset tokens. This prevents the user from 89 | | quickly generating a very large amount of password reset tokens. 90 | | 91 | */ 92 | 93 | 'passwords' => [ 94 | 'users' => [ 95 | 'provider' => 'users', 96 | 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), 97 | 'expire' => 60, 98 | 'throttle' => 60, 99 | ], 100 | ], 101 | 102 | /* 103 | |-------------------------------------------------------------------------- 104 | | Password Confirmation Timeout 105 | |-------------------------------------------------------------------------- 106 | | 107 | | Here you may define the amount of seconds before a password confirmation 108 | | window expires and users are asked to re-enter their password via the 109 | | confirmation screen. By default, the timeout lasts for three hours. 110 | | 111 | */ 112 | 113 | 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), 114 | 115 | ]; 116 | -------------------------------------------------------------------------------- /config/cache.php: -------------------------------------------------------------------------------- 1 | env('CACHE_STORE', 'file'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Cache Stores 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may define all of the cache "stores" for your application as 26 | | well as their drivers. You may even define multiple stores for the 27 | | same cache driver to group types of items stored in your caches. 28 | | 29 | | Supported drivers: "apc", "array", "database", "file", "memcached", 30 | | "redis", "dynamodb", "octane", "null" 31 | | 32 | */ 33 | 34 | 'stores' => [ 35 | 36 | 'array' => [ 37 | 'driver' => 'array', 38 | 'serialize' => false, 39 | ], 40 | 41 | 'database' => [ 42 | 'driver' => 'database', 43 | 'table' => env('DB_CACHE_TABLE', 'cache'), 44 | 'connection' => env('DB_CACHE_CONNECTION'), 45 | 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), 46 | ], 47 | 48 | 'file' => [ 49 | 'driver' => 'file', 50 | 'path' => storage_path('framework/cache/data'), 51 | 'lock_path' => storage_path('framework/cache/data'), 52 | ], 53 | 54 | 'memcached' => [ 55 | 'driver' => 'memcached', 56 | 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 57 | 'sasl' => [ 58 | env('MEMCACHED_USERNAME'), 59 | env('MEMCACHED_PASSWORD'), 60 | ], 61 | 'options' => [ 62 | // Memcached::OPT_CONNECT_TIMEOUT => 2000, 63 | ], 64 | 'servers' => [ 65 | [ 66 | 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 67 | 'port' => env('MEMCACHED_PORT', 11211), 68 | 'weight' => 100, 69 | ], 70 | ], 71 | ], 72 | 73 | 'redis' => [ 74 | 'driver' => 'redis', 75 | 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), 76 | 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), 77 | ], 78 | 79 | 'dynamodb' => [ 80 | 'driver' => 'dynamodb', 81 | 'key' => env('AWS_ACCESS_KEY_ID'), 82 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 83 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 84 | 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), 85 | 'endpoint' => env('DYNAMODB_ENDPOINT'), 86 | ], 87 | 88 | 'octane' => [ 89 | 'driver' => 'octane', 90 | ], 91 | 92 | ], 93 | 94 | /* 95 | |-------------------------------------------------------------------------- 96 | | Cache Key Prefix 97 | |-------------------------------------------------------------------------- 98 | | 99 | | When utilizing the APC, database, memcached, Redis, and DynamoDB cache 100 | | stores, there might be other applications using the same cache. For 101 | | that reason, you may prefix every cache key to avoid collisions. 102 | | 103 | */ 104 | 105 | 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'), 106 | 107 | ]; 108 | -------------------------------------------------------------------------------- /config/filesystems.php: -------------------------------------------------------------------------------- 1 | env('FILESYSTEM_DISK', 'local'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Filesystem Disks 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Below you may configure as many filesystem disks as necessary, and you 24 | | may even configure multiple disks for the same driver. Examples for 25 | | most supported storage drivers are configured here for reference. 26 | | 27 | | Supported Drivers: "local", "ftp", "sftp", "s3" 28 | | 29 | */ 30 | 31 | 'disks' => [ 32 | 33 | 'local' => [ 34 | 'driver' => 'local', 35 | 'root' => storage_path('app'), 36 | 'throw' => false, 37 | ], 38 | 39 | 'public' => [ 40 | 'driver' => 'local', 41 | 'root' => storage_path('app/public'), 42 | 'url' => env('APP_URL').'/storage', 43 | 'visibility' => 'public', 44 | 'throw' => false, 45 | ], 46 | 47 | 's3' => [ 48 | 'driver' => 's3', 49 | 'key' => env('AWS_ACCESS_KEY_ID'), 50 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 51 | 'region' => env('AWS_DEFAULT_REGION'), 52 | 'bucket' => env('AWS_BUCKET'), 53 | 'url' => env('AWS_URL'), 54 | 'endpoint' => env('AWS_ENDPOINT'), 55 | 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), 56 | 'throw' => false, 57 | ], 58 | 59 | ], 60 | 61 | /* 62 | |-------------------------------------------------------------------------- 63 | | Symbolic Links 64 | |-------------------------------------------------------------------------- 65 | | 66 | | Here you may configure the symbolic links that will be created when the 67 | | `storage:link` Artisan command is executed. The array keys should be 68 | | the locations of the links and the values should be their targets. 69 | | 70 | */ 71 | 72 | 'links' => [ 73 | public_path('storage') => storage_path('app/public'), 74 | ], 75 | 76 | ]; 77 | -------------------------------------------------------------------------------- /config/logging.php: -------------------------------------------------------------------------------- 1 | env('LOG_CHANNEL', 'daily'), 22 | 23 | /* 24 | |-------------------------------------------------------------------------- 25 | | Deprecations Log Channel 26 | |-------------------------------------------------------------------------- 27 | | 28 | | This option controls the log channel that should be used to log warnings 29 | | regarding deprecated PHP and library features. This allows you to get 30 | | your application ready for upcoming major versions of dependencies. 31 | | 32 | */ 33 | 34 | 'deprecations' => [ 35 | 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'daily'), 36 | 'trace' => env('LOG_DEPRECATIONS_TRACE', true), 37 | ], 38 | 39 | /* 40 | |-------------------------------------------------------------------------- 41 | | Log Channels 42 | |-------------------------------------------------------------------------- 43 | | 44 | | Here you may configure the log channels for your application. Laravel 45 | | utilizes the Monolog PHP logging library, which includes a variety 46 | | of powerful log handlers and formatters that you're free to use. 47 | | 48 | | Available Drivers: "single", "daily", "slack", "syslog", 49 | | "errorlog", "monolog", "custom", "stack" 50 | | 51 | */ 52 | 53 | 'channels' => [ 54 | 55 | 'stack' => [ 56 | 'driver' => 'stack', 57 | 'channels' => explode(',', env('LOG_STACK', 'single')), 58 | 'ignore_exceptions' => false, 59 | ], 60 | 61 | 'single' => [ 62 | 'driver' => 'single', 63 | 'path' => storage_path('logs/laravel.log'), 64 | 'level' => env('LOG_LEVEL', 'debug'), 65 | 'replace_placeholders' => true, 66 | ], 67 | 68 | 'daily' => [ 69 | 'driver' => 'daily', 70 | 'path' => storage_path('logs/laravel.log'), 71 | 'level' => env('LOG_LEVEL', 'debug'), 72 | 'days' => env('LOG_DAILY_DAYS', 14), 73 | 'replace_placeholders' => true, 74 | ], 75 | 76 | 'slack' => [ 77 | 'driver' => 'slack', 78 | 'url' => env('LOG_SLACK_WEBHOOK_URL'), 79 | 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'), 80 | 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), 81 | 'level' => env('LOG_LEVEL', 'critical'), 82 | 'replace_placeholders' => true, 83 | ], 84 | 85 | 'papertrail' => [ 86 | 'driver' => 'monolog', 87 | 'level' => env('LOG_LEVEL', 'debug'), 88 | 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), 89 | 'handler_with' => [ 90 | 'host' => env('PAPERTRAIL_URL'), 91 | 'port' => env('PAPERTRAIL_PORT'), 92 | 'connectionString' => 'tls://' . env('PAPERTRAIL_URL') . ':' . env('PAPERTRAIL_PORT'), 93 | ], 94 | 'processors' => [PsrLogMessageProcessor::class], 95 | ], 96 | 97 | 'stderr' => [ 98 | 'driver' => 'monolog', 99 | 'level' => env('LOG_LEVEL', 'debug'), 100 | 'handler' => StreamHandler::class, 101 | 'formatter' => env('LOG_STDERR_FORMATTER'), 102 | 'with' => [ 103 | 'stream' => 'php://stderr', 104 | ], 105 | 'processors' => [PsrLogMessageProcessor::class], 106 | ], 107 | 108 | 'syslog' => [ 109 | 'driver' => 'syslog', 110 | 'level' => env('LOG_LEVEL', 'debug'), 111 | 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), 112 | 'replace_placeholders' => true, 113 | ], 114 | 115 | 'errorlog' => [ 116 | 'driver' => 'errorlog', 117 | 'level' => env('LOG_LEVEL', 'debug'), 118 | 'replace_placeholders' => true, 119 | ], 120 | 121 | 'null' => [ 122 | 'driver' => 'monolog', 123 | 'handler' => NullHandler::class, 124 | ], 125 | 126 | 'emergency' => [ 127 | 'path' => storage_path('logs/laravel.log'), 128 | ], 129 | 130 | ], 131 | 132 | ]; 133 | -------------------------------------------------------------------------------- /config/mail.php: -------------------------------------------------------------------------------- 1 | env('MAIL_SWITCH', false), 10 | 11 | /* 12 | |-------------------------------------------------------------------------- 13 | | Default Mailer 14 | |-------------------------------------------------------------------------- 15 | | 16 | | This option controls the default mailer that is used to send all email 17 | | messages unless another mailer is explicitly specified when sending 18 | | the message. All additional mailers can be configured within the 19 | | "mailers" array. Examples of each type of mailer are provided. 20 | | 21 | */ 22 | 23 | 'default' => 'smtp', 24 | 25 | /* 26 | |-------------------------------------------------------------------------- 27 | | Mailer Configurations 28 | |-------------------------------------------------------------------------- 29 | | 30 | | Here you may configure all of the mailers used by your application plus 31 | | their respective settings. Several examples have been configured for 32 | | you and you are free to add your own as your application requires. 33 | | 34 | | Laravel supports a variety of mail "transport" drivers that can be used 35 | | when delivering an email. You may specify which one you're using for 36 | | your mailers below. You may also add additional mailers if needed. 37 | | 38 | | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", 39 | | "postmark", "log", "array", "failover", "roundrobin" 40 | | 41 | */ 42 | 43 | 'mailers' => [ 44 | 'smtp' => [ 45 | 'transport' => 'smtp', 46 | 'host' => env('MAIL_HOST', '127.0.0.1'), 47 | 'port' => env('MAIL_PORT', 2525), 48 | 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 49 | 'username' => env('MAIL_USERNAME'), 50 | 'password' => env('MAIL_PASSWORD') 51 | ], 52 | ], 53 | 54 | /* 55 | |-------------------------------------------------------------------------- 56 | | Global "From" Address 57 | |-------------------------------------------------------------------------- 58 | | 59 | | You may wish for all emails sent by your application to be sent from 60 | | the same address. Here you may specify a name and address that is 61 | | used globally for all emails that are sent by your application. 62 | | 63 | */ 64 | 'from' => [ 65 | 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 66 | 'name' => env('MAIL_FROM_NAME', 'Example'), 67 | ], 68 | 69 | 'to' => [ 70 | 'address' => env('MAIL_TO_ADDRESS', 'hello@example.com'), 71 | 'name' => env('MAIL_TO_NAME', 'Example'), 72 | ] 73 | ]; 74 | -------------------------------------------------------------------------------- /config/queue.php: -------------------------------------------------------------------------------- 1 | env('QUEUE_CONNECTION', 'database'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Queue Connections 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Here you may configure the connection options for every queue backend 24 | | used by your application. An example configuration is provided for 25 | | each backend supported by Laravel. You're also free to add more. 26 | | 27 | | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" 28 | | 29 | */ 30 | 31 | 'connections' => [ 32 | 33 | 'sync' => [ 34 | 'driver' => 'sync', 35 | ], 36 | 37 | 'database' => [ 38 | 'driver' => 'database', 39 | 'connection' => env('DB_QUEUE_CONNECTION'), 40 | 'table' => env('DB_QUEUE_TABLE', 'jobs'), 41 | 'queue' => env('DB_QUEUE', 'default'), 42 | 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), 43 | 'after_commit' => false, 44 | ], 45 | 46 | 'beanstalkd' => [ 47 | 'driver' => 'beanstalkd', 48 | 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), 49 | 'queue' => env('BEANSTALKD_QUEUE', 'default'), 50 | 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), 51 | 'block_for' => 0, 52 | 'after_commit' => false, 53 | ], 54 | 55 | 'sqs' => [ 56 | 'driver' => 'sqs', 57 | 'key' => env('AWS_ACCESS_KEY_ID'), 58 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 59 | 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), 60 | 'queue' => env('SQS_QUEUE', 'default'), 61 | 'suffix' => env('SQS_SUFFIX'), 62 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 63 | 'after_commit' => false, 64 | ], 65 | 66 | 'redis' => [ 67 | 'driver' => 'redis', 68 | 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), 69 | 'queue' => env('REDIS_QUEUE', 'default'), 70 | 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), 71 | 'block_for' => null, 72 | 'after_commit' => false, 73 | ], 74 | 75 | ], 76 | 77 | /* 78 | |-------------------------------------------------------------------------- 79 | | Job Batching 80 | |-------------------------------------------------------------------------- 81 | | 82 | | The following options configure the database and table that store job 83 | | batching information. These options can be updated to any database 84 | | connection and table which has been defined by your application. 85 | | 86 | */ 87 | 88 | 'batching' => [ 89 | 'database' => env('DB_CONNECTION', 'sqlite'), 90 | 'table' => 'job_batches', 91 | ], 92 | 93 | /* 94 | |-------------------------------------------------------------------------- 95 | | Failed Queue Jobs 96 | |-------------------------------------------------------------------------- 97 | | 98 | | These options configure the behavior of failed queue job logging so you 99 | | can control how and where failed jobs are stored. Laravel ships with 100 | | support for storing failed jobs in a simple file or in a database. 101 | | 102 | | Supported drivers: "database-uuids", "dynamodb", "file", "null" 103 | | 104 | */ 105 | 106 | 'failed' => [ 107 | 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), 108 | 'database' => env('DB_CONNECTION', 'sqlite'), 109 | 'table' => 'failed_jobs', 110 | ], 111 | 112 | ]; 113 | -------------------------------------------------------------------------------- /config/sanctum.php: -------------------------------------------------------------------------------- 1 | explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( 19 | '%s%s', 20 | 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', 21 | Sanctum::currentApplicationUrlWithPort() 22 | ))), 23 | 24 | /* 25 | |-------------------------------------------------------------------------- 26 | | Sanctum Guards 27 | |-------------------------------------------------------------------------- 28 | | 29 | | This array contains the authentication guards that will be checked when 30 | | Sanctum is trying to authenticate a request. If none of these guards 31 | | are able to authenticate the request, Sanctum will use the bearer 32 | | token that's present on an incoming request for authentication. 33 | | 34 | */ 35 | 36 | 'guard' => ['web'], 37 | 38 | /* 39 | |-------------------------------------------------------------------------- 40 | | Expiration Minutes 41 | |-------------------------------------------------------------------------- 42 | | 43 | | This value controls the number of minutes until an issued token will be 44 | | considered expired. This will override any values set in the token's 45 | | "expires_at" attribute, but first-party sessions are not affected. 46 | | 47 | */ 48 | 49 | 'expiration' => null, 50 | 51 | /* 52 | |-------------------------------------------------------------------------- 53 | | Token Prefix 54 | |-------------------------------------------------------------------------- 55 | | 56 | | Sanctum can prefix new tokens in order to take advantage of numerous 57 | | security scanning initiatives maintained by open source platforms 58 | | that notify developers if they commit tokens into repositories. 59 | | 60 | | See: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning 61 | | 62 | */ 63 | 64 | 'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''), 65 | 66 | /* 67 | |-------------------------------------------------------------------------- 68 | | Sanctum Middleware 69 | |-------------------------------------------------------------------------- 70 | | 71 | | When authenticating your first-party SPA with Sanctum you may need to 72 | | customize some of the middleware Sanctum uses while processing the 73 | | request. You may change the middleware listed below as required. 74 | | 75 | */ 76 | 77 | 'middleware' => [ 78 | 'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class, 79 | 'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class, 80 | 'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class, 81 | ], 82 | 83 | ]; 84 | -------------------------------------------------------------------------------- /config/services.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'token' => env('POSTMARK_TOKEN'), 19 | ], 20 | 21 | 'ses' => [ 22 | 'key' => env('AWS_ACCESS_KEY_ID'), 23 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 24 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 25 | ], 26 | 27 | 'slack' => [ 28 | 'notifications' => [ 29 | 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), 30 | 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), 31 | ], 32 | ], 33 | 34 | ]; 35 | -------------------------------------------------------------------------------- /database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite* 2 | -------------------------------------------------------------------------------- /docker/default.conf: -------------------------------------------------------------------------------- 1 | # Default server definition 2 | server { 3 | listen [::]:8080 default_server; 4 | listen 8080 default_server; 5 | server_name _; 6 | 7 | sendfile off; 8 | tcp_nodelay on; 9 | absolute_redirect off; 10 | 11 | root /var/www/html/public; 12 | index index.php index.html; 13 | 14 | location / { 15 | # First attempt to serve request as file, then 16 | # as directory, then fall back to index.php 17 | try_files $uri $uri/ /index.php?q=$uri&$args; 18 | } 19 | 20 | # Redirect server error pages to the static page /50x.html 21 | error_page 500 502 503 504 /50x.html; 22 | location = /50x.html { 23 | root /var/lib/nginx/html; 24 | } 25 | 26 | # Pass the PHP scripts to PHP-FPM listening on php-fpm.sock 27 | location ~ \.php$ { 28 | try_files $uri =404; 29 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 30 | fastcgi_pass unix:/run/php-fpm.sock; 31 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 32 | fastcgi_param SCRIPT_NAME $fastcgi_script_name; 33 | fastcgi_index index.php; 34 | include fastcgi_params; 35 | } 36 | 37 | # Set the cache-control headers on assets to cache for 5 days 38 | location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ { 39 | expires 5d; 40 | } 41 | 42 | # Deny access to . files, for security 43 | location ~ /\. { 44 | log_not_found off; 45 | deny all; 46 | } 47 | 48 | # Allow fpm ping and status from localhost 49 | location ~ ^/(fpm-status|fpm-ping)$ { 50 | access_log off; 51 | allow 127.0.0.1; 52 | deny all; 53 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 54 | include fastcgi_params; 55 | fastcgi_pass unix:/run/php-fpm.sock; 56 | } 57 | } -------------------------------------------------------------------------------- /docker/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 变量 4 | www_path="/var/www/html" 5 | latest_path="/var/www/94list-laravel" 6 | commands_path="/app/Console/Commands" 7 | 8 | echo "检查目录映射是否正确" && \ 9 | if [ -d "$www_path" ]; then 10 | cd $www_path || exit 11 | if [ ! "$(ls -A $www_path)" ]; then 12 | echo "文件夹为空,导入文件" 13 | cp -a $latest_path/. $www_path 14 | fi 15 | else 16 | echo "没有正确映射路径" 17 | exit 18 | fi 19 | 20 | echo "导入Commands文件夹" 21 | rm -rf $www_path$commands_path 22 | mkdir -p $www_path$commands_path 23 | cp -a $latest_path$commands_path/. $www_path$commands_path 24 | 25 | echo "导入新的依赖" 26 | rm -rf $www_path/vendor 27 | cp -a $latest_path/vendor/. $www_path/vendor 28 | 29 | echo "启动更新程序" 30 | cd $latest_path || exit 31 | php artisan app:check-app-status 32 | 33 | exec "$@" 34 | -------------------------------------------------------------------------------- /docker/fpm-pool.conf: -------------------------------------------------------------------------------- 1 | [global] 2 | ; Log to stderr 3 | error_log = /dev/stderr 4 | 5 | [www] 6 | ; The address on which to accept FastCGI requests. 7 | ; Valid syntaxes are: 8 | ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on 9 | ; a specific port; 10 | ; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on 11 | ; a specific port; 12 | ; 'port' - to listen on a TCP socket to all addresses 13 | ; (IPv6 and IPv4-mapped) on a specific port; 14 | ; '/path/to/unix/socket' - to listen on a unix socket. 15 | ; Note: This value is mandatory. 16 | listen = /run/php-fpm.sock 17 | user = root 18 | group = wheel 19 | 20 | ; Enable status page 21 | pm.status_path = /fpm-status 22 | 23 | ; Ondemand process manager 24 | pm = ondemand 25 | 26 | ; The number of child processes to be created when pm is set to 'static' and the 27 | ; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'. 28 | ; This value sets the limit on the number of simultaneous requests that will be 29 | ; served. Equivalent to the ApacheMaxClients directive with mpm_prefork. 30 | ; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP 31 | ; CGI. The below defaults are based on a server without much resources. Don't 32 | ; forget to tweak pm.* to fit your needs. 33 | ; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand' 34 | ; Note: This value is mandatory. 35 | pm.max_children = 100 36 | 37 | ; The number of seconds after which an idle process will be killed. 38 | ; Note: Used only when pm is set to 'ondemand' 39 | ; Default Value: 10s 40 | pm.process_idle_timeout = 10s; 41 | 42 | ; The number of requests each child process should execute before respawning. 43 | ; This can be useful to work around memory leaks in 3rd party libraries. For 44 | ; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS. 45 | ; Default Value: 0 46 | pm.max_requests = 1000 47 | 48 | ; Make sure the FPM workers can reach the environment variables for configuration 49 | clear_env = no 50 | 51 | ; Catch output from PHP 52 | catch_workers_output = yes 53 | 54 | ; Remove the 'child 10 said into stderr' prefix in the log and only show the actual message 55 | decorate_workers_output = no 56 | 57 | ; Enable ping page to use in healthcheck 58 | ping.path = /fpm-ping -------------------------------------------------------------------------------- /docker/nginx.conf: -------------------------------------------------------------------------------- 1 | worker_processes auto; 2 | error_log stderr warn; 3 | pid /run/nginx.pid; 4 | user root; 5 | 6 | events { 7 | worker_connections 1024; 8 | } 9 | 10 | http { 11 | include mime.types; 12 | default_type application/octet-stream; 13 | 14 | # Define custom log format to include reponse times 15 | log_format main_timed '$remote_addr - $remote_user [$time_local] "$request" ' 16 | '$status $body_bytes_sent "$http_referer" ' 17 | '"$http_user_agent" "$http_x_forwarded_for" ' 18 | '$request_time $upstream_response_time $pipe $upstream_cache_status'; 19 | 20 | access_log /dev/stdout main_timed; 21 | error_log /dev/stderr notice; 22 | 23 | keepalive_timeout 65; 24 | 25 | # Write temporary files to /tmp so they can be created as a non-privileged user 26 | client_body_temp_path /tmp/client_temp; 27 | proxy_temp_path /tmp/proxy_temp_path; 28 | fastcgi_temp_path /tmp/fastcgi_temp; 29 | uwsgi_temp_path /tmp/uwsgi_temp; 30 | scgi_temp_path /tmp/scgi_temp; 31 | 32 | # Hardening 33 | proxy_hide_header X-Powered-By; 34 | fastcgi_hide_header X-Powered-By; 35 | server_tokens off; 36 | 37 | # Enable gzip compression by default 38 | gzip on; 39 | gzip_proxied any; 40 | gzip_types text/plain application/xml text/css text/js text/xml application/x-javascript text/javascript application/json application/xml+rss; 41 | gzip_vary on; 42 | gzip_disable "msie6"; 43 | 44 | # Include server configs 45 | include /etc/nginx/conf.d/*.conf; 46 | } -------------------------------------------------------------------------------- /docker/supervisord.conf: -------------------------------------------------------------------------------- 1 | [supervisord] 2 | nodaemon=true 3 | logfile=/dev/null 4 | logfile_maxbytes=0 5 | pidfile=/run/supervisord.pid 6 | user=root 7 | 8 | [program:php-fpm] 9 | command=php-fpm83 -F -R 10 | stdout_logfile=/dev/stdout 11 | stdout_logfile_maxbytes=0 12 | stderr_logfile=/dev/stderr 13 | stderr_logfile_maxbytes=0 14 | autorestart=false 15 | startretries=0 16 | user=root 17 | 18 | [program:nginx] 19 | command=nginx -g 'daemon off;' 20 | stdout_logfile=/dev/stdout 21 | stdout_logfile_maxbytes=0 22 | stderr_logfile=/dev/stderr 23 | stderr_logfile_maxbytes=0 24 | autorestart=false 25 | startretries=0 26 | user=root -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | tests/Unit 10 | 11 | 12 | tests/Feature 13 | 14 | 15 | 16 | 17 | app 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews -Indexes 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Handle Authorization Header 9 | RewriteCond %{HTTP:Authorization} . 10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 11 | 12 | # Redirect Trailing Slashes If Not A Folder... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_URI} (.+)/$ 15 | RewriteRule ^ %1 [L,R=301] 16 | 17 | # Send Requests To Front Controller... 18 | RewriteCond %{REQUEST_FILENAME} !-d 19 | RewriteCond %{REQUEST_FILENAME} !-f 20 | RewriteRule ^ index.php [L] 21 | 22 | -------------------------------------------------------------------------------- /public/assets/css/AccountManagement-CvA_2gMU.css: -------------------------------------------------------------------------------- 1 | .table[data-v-a8baa8b2],.el-pagination[data-v-a8baa8b2]{margin-top:15px} 2 | -------------------------------------------------------------------------------- /public/assets/css/GetFileList-D8J9e0M0.css: -------------------------------------------------------------------------------- 1 | img[data-v-eaf991a9]:hover{cursor:pointer}a[data-v-eaf991a9]{text-decoration:none;color:inherit}.el-button+.el-button[data-v-eaf991a9]{margin-left:0}.alert span span+span[data-v-eaf991a9]{margin-left:10px}.buttons .el-form-item__content{gap:10px} 2 | -------------------------------------------------------------------------------- /public/assets/css/GroupManagement-DsjCwHwp.css: -------------------------------------------------------------------------------- 1 | .table[data-v-6ac724f9],.el-pagination[data-v-6ac724f9]{margin-top:15px} 2 | -------------------------------------------------------------------------------- /public/assets/css/InstallView-CRaRKPdy.css: -------------------------------------------------------------------------------- 1 | .container[data-v-c77698d2]{max-width:515px;margin:0 auto;padding:20px;text-align:center}h1[data-v-c77698d2]{margin:0 0 15px} 2 | -------------------------------------------------------------------------------- /public/assets/css/InvCodeManagement-BIcF9Kxd.css: -------------------------------------------------------------------------------- 1 | .table[data-v-3f8aea2f],.el-pagination[data-v-3f8aea2f]{margin-top:15px} 2 | -------------------------------------------------------------------------------- /public/assets/css/IpManagement-BHydyvRO.css: -------------------------------------------------------------------------------- 1 | .table[data-v-bfd061e8],.el-pagination[data-v-bfd061e8]{margin-top:15px} 2 | -------------------------------------------------------------------------------- /public/assets/css/LoginView-kFAD-Fzo.css: -------------------------------------------------------------------------------- 1 | .container[data-v-76f977eb]{max-width:515px;margin:0 auto;padding:20px;text-align:center}h2[data-v-76f977eb]{margin:0 0 15px} 2 | -------------------------------------------------------------------------------- /public/assets/css/NotFoundView-B8o8jygP.css: -------------------------------------------------------------------------------- 1 | #app{margin:0;padding:0}.page{display:flex;align-items:center;justify-content:center;height:100vh;width:100vw;background:#0078d7}.page .container{width:70vw}.page .container .font-h1{font-size:120px}.page .container .tip{font-size:30px;padding-top:20px}.page .container .complete{font-size:30px;padding:30px 0}.page .container .details{display:flex;align-items:center}.page .container .details .qr-image img{height:120px;width:120px}.page .container .details .stopcode{padding-left:15px;height:120px}.page .container .details .stopcode .stopcode-text{display:block;padding:4px 0;font-size:16px}.page .container .details .stopcode .stopcode-text p{margin:5px 0 0}@media screen and (max-width: 800px){.container{width:90vw!important}.tip{font-size:20px!important;padding-top:20px}.complete{font-size:20px!important;padding:30px 0}.stopcode-text{font-size:15px!important}} 2 | -------------------------------------------------------------------------------- /public/assets/css/RecordManagement-S3Hh6B8z.css: -------------------------------------------------------------------------------- 1 | .table[data-v-f57bd9b1],.el-pagination[data-v-f57bd9b1]{margin-top:15px} 2 | -------------------------------------------------------------------------------- /public/assets/css/RegisterView-BnKfmdM9.css: -------------------------------------------------------------------------------- 1 | .container[data-v-da197fbf]{max-width:515px;margin:0 auto;padding:20px;text-align:center}h2[data-v-da197fbf]{margin:0 0 15px} 2 | -------------------------------------------------------------------------------- /public/assets/css/ShowFileList-CbcFgyZ7.css: -------------------------------------------------------------------------------- 1 | .table[data-v-a8be935c]{height:500px}img[data-v-a8be935c]{width:20px;height:20px} 2 | -------------------------------------------------------------------------------- /public/assets/css/TokenManagement-aT40K2D6.css: -------------------------------------------------------------------------------- 1 | .table[data-v-9f80afaa],.el-pagination[data-v-9f80afaa]{margin-top:15px} 2 | -------------------------------------------------------------------------------- /public/assets/css/UserManagement-C5ETFEKD.css: -------------------------------------------------------------------------------- 1 | .table[data-v-39a05d3b],.el-pagination[data-v-39a05d3b]{margin-top:15px} 2 | -------------------------------------------------------------------------------- /public/assets/css/UserView-BUO1heXg.css: -------------------------------------------------------------------------------- 1 | .card,.table,.form,.alert{margin-top:15px!important}@media screen and (min-width: 1000px){.container[data-v-afbfa6b1]{width:60%;margin:0 auto}} 2 | -------------------------------------------------------------------------------- /public/assets/css/element-plus@2.7.7_vue@3.4.32_typescript@5.5-YF1DmkJl.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/css/element-plus@2.7.7_vue@3.4.32_typescript@5.5-YF1DmkJl.css.gz -------------------------------------------------------------------------------- /public/assets/css/index-qsVAQOGj.css: -------------------------------------------------------------------------------- 1 | body{margin:0;padding:0}#app{padding:20px}.center .el-form-item__content{display:block;margin:0 auto!important} 2 | -------------------------------------------------------------------------------- /public/assets/ico/favicon-fA9CtK1z.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/ico/favicon-fA9CtK1z.ico -------------------------------------------------------------------------------- /public/assets/js/@ctrl_tinycolor@3.6.1-r5W6hzzQ.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/@ctrl_tinycolor@3.6.1-r5W6hzzQ.js.gz -------------------------------------------------------------------------------- /public/assets/js/@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js.gz -------------------------------------------------------------------------------- /public/assets/js/@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js.gz -------------------------------------------------------------------------------- /public/assets/js/@floating-ui_core@1.6.4-l0sNRNKZ.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/assets/js/@floating-ui_dom@1.6.7-l0sNRNKZ.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/assets/js/@floating-ui_utils@0.2.4-l0sNRNKZ.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/assets/js/@sxzz_popperjs-es@2.11.7-D9SI2xQl.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/@sxzz_popperjs-es@2.11.7-D9SI2xQl.js.gz -------------------------------------------------------------------------------- /public/assets/js/@vue_devtools-api@6.6.3-l0sNRNKZ.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/assets/js/@vue_reactivity@3.4.32-DksAu7zd.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/@vue_reactivity@3.4.32-DksAu7zd.js.gz -------------------------------------------------------------------------------- /public/assets/js/@vue_runtime-core@3.4.32-BofAHbgu.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/@vue_runtime-core@3.4.32-BofAHbgu.js.gz -------------------------------------------------------------------------------- /public/assets/js/@vue_runtime-dom@3.4.32-DNdjNMzo.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/@vue_runtime-dom@3.4.32-DNdjNMzo.js.gz -------------------------------------------------------------------------------- /public/assets/js/@vue_shared@3.4.32-CaCWPAm8.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @vue/shared v3.4.32 3 | * (c) 2018-present Yuxi (Evan) You and Vue contributors 4 | * @license MIT 5 | **//*! #__NO_SIDE_EFFECTS__ */function S(e,t){const n=new Set(e.split(","));return s=>n.has(s)}const I={},$=[],H=()=>{},L=()=>!1,q=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),J=e=>e.startsWith("onUpdate:"),k=Object.assign,G=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},C=Object.prototype.hasOwnProperty,Y=(e,t)=>C.call(e,t),c=Array.isArray,N=e=>f(e)==="[object Map]",T=e=>f(e)==="[object Set]",b=e=>f(e)==="[object Date]",u=e=>typeof e=="function",a=e=>typeof e=="string",p=e=>typeof e=="symbol",r=e=>e!==null&&typeof e=="object",W=e=>(r(e)||u(e))&&u(e.then)&&u(e.catch),j=Object.prototype.toString,f=e=>j.call(e),Z=e=>f(e).slice(8,-1),P=e=>f(e)==="[object Object]",Q=e=>a(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,X=S(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),d=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},R=/-(\w)/g,v=d(e=>e.replace(R,(t,n)=>n?n.toUpperCase():"")),z=/\B([A-Z])/g,ee=d(e=>e.replace(z,"-$1").toLowerCase()),E=d(e=>e.charAt(0).toUpperCase()+e.slice(1)),te=d(e=>e?`on${E(e)}`:""),ne=(e,t)=>!Object.is(e,t),se=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},re=e=>{const t=parseFloat(e);return isNaN(t)?e:t},ie=e=>{const t=a(e)?Number(e):NaN;return isNaN(t)?e:t};let O;const ce=()=>O||(O=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function M(e){if(c(e)){const t={};for(let n=0;n{if(n){const s=n.split(B);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function K(e){let t="";if(a(e))t=e;else if(c(e))for(let n=0;ng(n,t))}const w=e=>!!(e&&e.__v_isRef===!0),F=e=>a(e)?e:e==null?"":c(e)||r(e)&&(e.toString===j||!u(e.toString))?w(e)?F(e.value):JSON.stringify(e,A,2):String(e),A=(e,t)=>w(t)?A(e,t.value):N(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o],i)=>(n[y(s,i)+" =>"]=o,n),{})}:T(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>y(n))}:p(t)?y(t):r(t)&&!c(t)&&!P(t)?String(t):t,y=(e,t="")=>{var n;return p(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};export{ee as A,G as B,re as C,te as D,$ as E,J as F,ie as G,fe as H,ae as I,le as J,g as K,F as L,b as M,H as N,r as a,c as b,Q as c,oe as d,Y as e,u as f,N as g,ne as h,p as i,k as j,ce as k,a as l,S as m,K as n,M as o,q as p,T as q,P as r,I as s,Z as t,W as u,X as v,se as w,v as x,E as y,L as z}; 6 | -------------------------------------------------------------------------------- /public/assets/js/@vue_shared@3.4.32-CaCWPAm8.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/@vue_shared@3.4.32-CaCWPAm8.js.gz -------------------------------------------------------------------------------- /public/assets/js/@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js: -------------------------------------------------------------------------------- 1 | import{i as R,n as Q,r as $,t as _,a as W,b as L,c as C,d as T}from"./@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js";import{w}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";import{r as m}from"./@vue_reactivity@3.4.32-DksAu7zd.js";function v(e){var n;const r=$(e);return(n=r==null?void 0:r.$el)!=null?n:r}const y=C?window:void 0,x=C?window.document:void 0;function b(...e){let n,r,t,u;if(R(e[0])||Array.isArray(e[0])?([r,t,u]=e,n=y):[n,r,t,u]=e,!n)return Q;Array.isArray(r)||(r=[r]),Array.isArray(t)||(t=[t]);const p=[],a=()=>{p.forEach(i=>i()),p.length=0},l=(i,c,s,o)=>(i.addEventListener(c,s,o),()=>i.removeEventListener(c,s,o)),f=w(()=>[v(n),$(u)],([i,c])=>{a(),i&&p.push(...r.flatMap(s=>t.map(o=>l(i,s,o,c))))},{immediate:!0,flush:"post"}),O=()=>{f(),a()};return _(O),O}let h=!1;function Y(e,n,r={}){const{window:t=y,ignore:u=[],capture:p=!0,detectIframe:a=!1}=r;if(!t)return;T&&!h&&(h=!0,Array.from(t.document.body.children).forEach(s=>s.addEventListener("click",Q)));let l=!0;const f=s=>u.some(o=>{if(typeof o=="string")return Array.from(t.document.querySelectorAll(o)).some(d=>d===s.target||s.composedPath().includes(d));{const d=v(o);return d&&(s.target===d||s.composedPath().includes(d))}}),i=[b(t,"click",s=>{const o=v(e);if(!(!o||o===s.target||s.composedPath().includes(o))){if(s.detail===0&&(l=!f(s)),!l){l=!0;return}n(s)}},{passive:!0,capture:p}),b(t,"pointerdown",s=>{const o=v(e);o&&(l=!s.composedPath().includes(o)&&!f(s))},{passive:!0}),a&&b(t,"blur",s=>{var o;const d=v(e);((o=t.document.activeElement)==null?void 0:o.tagName)==="IFRAME"&&!(d!=null&&d.contains(t.document.activeElement))&&n(s)})].filter(Boolean);return()=>i.forEach(s=>s())}function N(e,n=!1){const r=m(),t=()=>r.value=!!e();return t(),W(t,n),r}const I=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},E="__vueuse_ssr_handlers__";I[E]=I[E]||{};function Z({document:e=x}={}){if(!e)return m("visible");const n=m(e.visibilityState);return b(e,"visibilitychange",()=>{n.value=e.visibilityState}),n}var g=Object.getOwnPropertySymbols,M=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable,B=(e,n)=>{var r={};for(var t in e)M.call(e,t)&&n.indexOf(t)<0&&(r[t]=e[t]);if(e!=null&&g)for(var t of g(e))n.indexOf(t)<0&&k.call(e,t)&&(r[t]=e[t]);return r};function ee(e,n,r={}){const t=r,{window:u=y}=t,p=B(t,["window"]);let a;const l=N(()=>u&&"ResizeObserver"in u),f=()=>{a&&(a.disconnect(),a=void 0)},O=w(()=>v(e),c=>{f(),l.value&&u&&c&&(a=new ResizeObserver(n),a.observe(c,p))},{immediate:!0,flush:"post"}),i=()=>{f(),O()};return _(i),{isSupported:l,stop:i}}var P=Object.getOwnPropertySymbols,F=Object.prototype.hasOwnProperty,z=Object.prototype.propertyIsEnumerable,U=(e,n)=>{var r={};for(var t in e)F.call(e,t)&&n.indexOf(t)<0&&(r[t]=e[t]);if(e!=null&&P)for(var t of P(e))n.indexOf(t)<0&&z.call(e,t)&&(r[t]=e[t]);return r};function te(e,n,r={}){const t=r,{window:u=y}=t,p=U(t,["window"]);let a;const l=N(()=>u&&"MutationObserver"in u),f=()=>{a&&(a.disconnect(),a=void 0)},O=w(()=>v(e),c=>{f(),l.value&&u&&c&&(a=new MutationObserver(n),a.observe(c,p))},{immediate:!0}),i=()=>{f(),O()};return _(i),{isSupported:l,stop:i}}var S;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(S||(S={}));var D=Object.defineProperty,j=Object.getOwnPropertySymbols,G=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable,A=(e,n,r)=>n in e?D(e,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[n]=r,V=(e,n)=>{for(var r in n||(n={}))G.call(n,r)&&A(e,r,n[r]);if(j)for(var r of j(n))H.call(n,r)&&A(e,r,n[r]);return e};const q={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};V({linear:L},q);function ne({window:e=y}={}){if(!e)return m(!1);const n=m(e.document.hasFocus());return b(e,"blur",()=>{n.value=!1}),b(e,"focus",()=>{n.value=!0}),n}export{ee as a,v as b,te as c,Z as d,ne as e,Y as o,b as u}; 2 | -------------------------------------------------------------------------------- /public/assets/js/@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js.gz -------------------------------------------------------------------------------- /public/assets/js/@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js: -------------------------------------------------------------------------------- 1 | import{o as y,q as w,u as O,n as b,v as h,r as _}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import{l as T,w as $,k as D,m as S,n as j}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";var x=Object.defineProperty,C=Object.defineProperties,E=Object.getOwnPropertyDescriptors,p=Object.getOwnPropertySymbols,F=Object.prototype.hasOwnProperty,I=Object.prototype.propertyIsEnumerable,d=(e,t,r)=>t in e?x(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,A=(e,t)=>{for(var r in t||(t={}))F.call(t,r)&&d(e,r,t[r]);if(p)for(var r of p(t))I.call(t,r)&&d(e,r,t[r]);return e},M=(e,t)=>C(e,E(t));function z(e,t){var r;const n=y();return T(()=>{n.value=e()},M(A({},t),{flush:(r=void 0)!=null?r:"sync"})),w(n)}var m;const P=typeof window<"u",B=e=>typeof e=="string",v=()=>{},G=P&&((m=window==null?void 0:window.navigator)==null?void 0:m.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function f(e){return typeof e=="function"?e():O(e)}function R(e,t){function r(...n){return new Promise((o,i)=>{Promise.resolve(e(()=>t.apply(this,n),{fn:t,thisArg:this,args:n})).then(o).catch(i)})}return r}function W(e,t={}){let r,n,o=v;const i=s=>{clearTimeout(s),o(),o=v};return s=>{const u=f(e),a=f(t.maxWait);return r&&i(r),u<=0||a!==void 0&&a<=0?(n&&(i(n),n=null),Promise.resolve(s())):new Promise((l,g)=>{o=t.rejectOnCancel?g:l,a&&!n&&(n=setTimeout(()=>{r&&i(r),n=null,l(s())},a)),r=setTimeout(()=>{n&&i(n),n=null,l(s())},u)})}}function H(e){return e}function q(e){return b()?(h(e),!0):!1}function N(e,t=200,r={}){return R(W(t,r),e)}function J(e,t=200,r={}){const n=_(e.value),o=N(()=>{n.value=e.value},t,r);return $(e,()=>o()),n}function K(e,t=!0){D()?S(e):t?e():j(e)}function L(e,t,r={}){const{immediate:n=!0}=r,o=_(!1);let i=null;function c(){i&&(clearTimeout(i),i=null)}function s(){o.value=!1,c()}function u(...a){c(),o.value=!0,i=setTimeout(()=>{o.value=!1,i=null,e(...a)},f(t))}return n&&(o.value=!0,P&&u()),q(s),{isPending:w(o),start:u,stop:s}}export{K as a,H as b,P as c,G as d,J as e,z as f,B as i,v as n,f as r,q as t,L as u}; 2 | -------------------------------------------------------------------------------- /public/assets/js/@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js.gz -------------------------------------------------------------------------------- /public/assets/js/AccountManagement-HxMt2-hw.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/AccountManagement-HxMt2-hw.js.gz -------------------------------------------------------------------------------- /public/assets/js/AdminView-ClWDJ0yp.js: -------------------------------------------------------------------------------- 1 | const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/js/ChangeMainConfig-DBsWGwM3.js","assets/js/element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js","assets/js/@vue_runtime-dom@3.4.32-DNdjNMzo.js","assets/js/@vue_runtime-core@3.4.32-BofAHbgu.js","assets/js/@vue_reactivity@3.4.32-DksAu7zd.js","assets/js/@vue_shared@3.4.32-CaCWPAm8.js","assets/js/lodash-es@4.17.21-BB-zMWwC.js","assets/js/async-validator@4.2.5-DKvM95Vc.js","assets/js/@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js","assets/js/@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js","assets/js/dayjs@1.11.11-Ct2Knyoi.js","assets/js/@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js","assets/js/@ctrl_tinycolor@3.6.1-r5W6hzzQ.js","assets/js/@sxzz_popperjs-es@2.11.7-D9SI2xQl.js","assets/js/normalize-wheel-es@1.2.0-B6fDCfyv.js","assets/css/element-plus@2.7.7_vue@3.4.32_typescript@5.5-YF1DmkJl.css","assets/js/index-DYV93AZk.js","assets/js/pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js","assets/js/vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js","assets/js/axios@1.7.2-B4uVmeYG.js","assets/js/@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js","assets/js/tslib@2.6.3-CPxunF3b.js","assets/js/vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js","assets/css/index-qsVAQOGj.css","assets/js/changeConfigForm-D___ED7J.js","assets/js/ChangeMailConfig-DWXXcDjr.js","assets/js/UserManagement-C-9GJbGk.js","assets/js/format-CyW-QbYa.js","assets/js/_plugin-vue_export-helper-DlAUqK2U.js","assets/css/UserManagement-C5ETFEKD.css","assets/js/InvCodeManagement-Dsqp0U7A.js","assets/js/copy-By2guqEs.js","assets/css/InvCodeManagement-BIcF9Kxd.css","assets/js/TokenManagement-BJdgmlbt.js","assets/css/TokenManagement-aT40K2D6.css","assets/js/GroupManagement-wC6WYaei.js","assets/css/GroupManagement-DsjCwHwp.css","assets/js/AccountManagement-HxMt2-hw.js","assets/css/AccountManagement-CvA_2gMU.css","assets/js/RecordManagement-BjaPKNfj.js","assets/css/RecordManagement-S3Hh6B8z.css","assets/js/IpManagement-CNmIbwyM.js","assets/css/IpManagement-BHydyvRO.css"])))=>i.map(i=>d[i]); 2 | import{u as A,g as c,c as L,a as R,_ as n}from"./index-DYV93AZk.js";import{a as D,d as O,f as h,g as k,h as x}from"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";import{u as N}from"./vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js";import{d as y,G as S,H as t,K as B,o as w,a as G,L as m,i as e,X as r}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";import{r as U,u as a}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import{L as $}from"./@vue_shared@3.4.32-CaCWPAm8.js";import"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import"./vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js";import"./@vue_runtime-dom@3.4.32-DNdjNMzo.js";import"./axios@1.7.2-B4uVmeYG.js";import"./@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js";import"./tslib@2.6.3-CPxunF3b.js";import"./lodash-es@4.17.21-BB-zMWwC.js";import"./async-validator@4.2.5-DKvM95Vc.js";import"./@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js";import"./@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js";import"./dayjs@1.11.11-Ct2Knyoi.js";import"./@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js";import"./@ctrl_tinycolor@3.6.1-r5W6hzzQ.js";import"./@sxzz_popperjs-es@2.11.7-D9SI2xQl.js";import"./normalize-wheel-es@1.2.0-B6fDCfyv.js";const ue=y({__name:"AdminView",setup(H){const f=A(),s=r(()=>n(()=>import("./ChangeMainConfig-DBsWGwM3.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]))),g=r(()=>n(()=>import("./ChangeMailConfig-DWXXcDjr.js"),__vite__mapDeps([25,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]))),E=r(()=>n(()=>import("./UserManagement-C-9GJbGk.js"),__vite__mapDeps([26,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,27,28,29]))),M=r(()=>n(()=>import("./InvCodeManagement-Dsqp0U7A.js"),__vite__mapDeps([30,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,31,28,32]))),V=r(()=>n(()=>import("./TokenManagement-BJdgmlbt.js"),__vite__mapDeps([33,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,31,27,28,34]))),b=r(()=>n(()=>import("./GroupManagement-wC6WYaei.js"),__vite__mapDeps([35,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,28,36]))),v=r(()=>n(()=>import("./AccountManagement-HxMt2-hw.js"),__vite__mapDeps([37,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,27,28,38]))),C=r(()=>n(()=>import("./RecordManagement-BjaPKNfj.js"),__vite__mapDeps([39,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,27,24,31,28,40]))),P=r(()=>n(()=>import("./IpManagement-CNmIbwyM.js"),__vite__mapDeps([41,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,28,42]))),u=U("changeMainConfig"),l=N();return c()==="0"&&l.push("/login"),L()==="user"&&l.push("/user"),(K,_)=>{const p=O,o=h,I=k,d=D,T=x;return a(c)()==="1"?(w(),S(d,{key:0,class:"box-card"},{default:t(()=>[G("h2",null,[m(" 后台控制中心 | "+$(a(R)())+" ",1),e(p,{type:"primary",onClick:_[0]||(_[0]=i=>a(l).push("/"))},{default:t(()=>[m("回到首页")]),_:1}),e(p,{type:"danger",onClick:_[1]||(_[1]=i=>a(f).logout())},{default:t(()=>[m("退出登陆")]),_:1})]),e(T,{modelValue:u.value,"onUpdate:modelValue":_[2]||(_[2]=i=>u.value=i)},{default:t(()=>[e(o,{label:"基础配置",name:"changeMainConfig"},{default:t(()=>[e(a(s),{Mode:"main"})]),_:1}),e(o,{label:"解析配置",name:"changeParseConfig"},{default:t(()=>[e(a(s),{Mode:"parse"})]),_:1}),e(o,{label:"邮件配置",name:"changeMailConfig"},{default:t(()=>[e(a(g))]),_:1}),e(o,{label:"用户管理",name:"userManagement"},{default:t(()=>[e(a(E))]),_:1}),e(o,{label:"用户组管理",name:"groupManagement"},{default:t(()=>[e(a(b))]),_:1}),e(o,{label:"邀请码管理",name:"invCodeManagement"},{default:t(()=>[e(a(M))]),_:1}),e(o,{label:"卡密管理",name:"tokenManagement"},{default:t(()=>[e(a(V))]),_:1}),e(o,{label:"账号管理",name:"accountManagement"},{default:t(()=>[e(a(v))]),_:1}),e(o,{label:"记录管理",name:"recordManagement"},{default:t(()=>[e(a(C))]),_:1}),e(o,{label:"IP管理",name:"ipManagement"},{default:t(()=>[e(a(P))]),_:1}),e(o,{label:"开源说明",name:"openSourceNotice"},{default:t(()=>[e(d,null,{default:t(()=>[e(I,null,{default:t(()=>[m(" 项目所涉及的接口均为官方开放接口,需使用正版 SVIP 会员账号进行代理提取高速链接,无破坏官方接口行为,本身不存在违法。 仅供自己参考学习使用。诺违规使用官方会限制或封禁你的账号,包括你的 IP,如无官方授权进行商业用途会对你造成更严重后果。 源码仅供学习,如无视声明使用产生正负面结果(限速,被封等)都与作者无关。 ")]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})):B("",!0)}}});export{ue as default}; 3 | -------------------------------------------------------------------------------- /public/assets/js/AdminView-ClWDJ0yp.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/AdminView-ClWDJ0yp.js.gz -------------------------------------------------------------------------------- /public/assets/js/AnnounceDialog-C3AXj005.js: -------------------------------------------------------------------------------- 1 | import{d,k as _}from"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";import{u as f,d as g}from"./index-DYV93AZk.js";import{s as k}from"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import{d as V,o as w,G as h,H as t,a as s,i as m,L as l}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";import{u as n}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import"./@vue_runtime-dom@3.4.32-DNdjNMzo.js";import"./@vue_shared@3.4.32-CaCWPAm8.js";import"./lodash-es@4.17.21-BB-zMWwC.js";import"./async-validator@4.2.5-DKvM95Vc.js";import"./@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js";import"./@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js";import"./dayjs@1.11.11-Ct2Knyoi.js";import"./@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js";import"./@ctrl_tinycolor@3.6.1-r5W6hzzQ.js";import"./@sxzz_popperjs-es@2.11.7-D9SI2xQl.js";import"./normalize-wheel-es@1.2.0-B6fDCfyv.js";import"./axios@1.7.2-B4uVmeYG.js";import"./@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js";import"./tslib@2.6.3-CPxunF3b.js";import"./vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js";import"./vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js";const v=["innerHTML"],x={class:"dialog-footer"},K=V({__name:"AnnounceDialog",setup(B){const p=f(),{config:o}=k(p),r=()=>o.value.show_announce=!1,c=()=>{g(o.value.announce),r()};return(C,e)=>{const a=d,u=_;return w(),h(u,{modelValue:n(o).show_announce,"onUpdate:modelValue":e[1]||(e[1]=i=>n(o).show_announce=i),title:"公告",width:"60%","close-on-click-modal":!1},{footer:t(()=>[s("div",x,[m(a,{type:"danger",onClick:c},{default:t(()=>[l(" 下次不再提示 ")]),_:1}),m(a,{type:"primary",onClick:e[0]||(e[0]=i=>r())},{default:t(()=>[l(" 确认 ")]),_:1})])]),default:t(()=>[s("span",{innerHTML:n(o).announce},null,8,v)]),_:1},8,["modelValue"])}}});export{K as default}; 2 | -------------------------------------------------------------------------------- /public/assets/js/AnnounceDialog-C3AXj005.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/AnnounceDialog-C3AXj005.js.gz -------------------------------------------------------------------------------- /public/assets/js/Aria2Dialog-BoClX_iS.js: -------------------------------------------------------------------------------- 1 | import{b as g,c as A,d as C,e as b,k as c}from"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";import{u as k}from"./aria2Store-Eper8YQt.js";import{s as E}from"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import{d as F,o as w,G as R,H as i,i as e,L as x}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";import{u as r,a as U}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import"./@vue_runtime-dom@3.4.32-DNdjNMzo.js";import"./@vue_shared@3.4.32-CaCWPAm8.js";import"./lodash-es@4.17.21-BB-zMWwC.js";import"./async-validator@4.2.5-DKvM95Vc.js";import"./@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js";import"./@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js";import"./dayjs@1.11.11-Ct2Knyoi.js";import"./@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js";import"./@ctrl_tinycolor@3.6.1-r5W6hzzQ.js";import"./@sxzz_popperjs-es@2.11.7-D9SI2xQl.js";import"./normalize-wheel-es@1.2.0-B6fDCfyv.js";import"./index-DYV93AZk.js";import"./axios@1.7.2-B4uVmeYG.js";import"./@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js";import"./tslib@2.6.3-CPxunF3b.js";import"./vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js";import"./vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js";const Y=F({__name:"Aria2Dialog",setup(v){const s=k(),{aria2ConfigForm:l,aria2ConfigFormRef:p,aria2ConfigDialogVisible:n}=E(s),u={host:[{required:!0,validator:(d,o,a)=>o===""?a(new Error("请输入Aria2 服务器地址")):o.includes("jsonrpc")?a(new Error("地址不需要包含端口或jsonrpc路径")):a(),message:"",trigger:"blur"}],port:[{required:!0,message:"请输入Aria2 端口号",trigger:"blur"}]};return(d,o)=>{const a=g,m=A,f=C,_=b,V=c;return w(),R(V,{modelValue:r(n),"onUpdate:modelValue":o[4]||(o[4]=t=>U(n)?n.value=t:null),title:"Aria2配置",width:"90%","close-on-click-modal":!1},{default:i(()=>[e(_,{ref_key:"aria2ConfigFormRef",ref:p,model:r(l),rules:u,"label-width":"auto"},{default:i(()=>[e(m,{label:"Aria2 服务器地址",prop:"host"},{default:i(()=>[e(a,{modelValue:r(l).host,"onUpdate:modelValue":o[0]||(o[0]=t=>r(l).host=t)},null,8,["modelValue"])]),_:1}),e(m,{label:"Aria2 端口号",prop:"port"},{default:i(()=>[e(a,{modelValue:r(l).port,"onUpdate:modelValue":o[1]||(o[1]=t=>r(l).port=t)},null,8,["modelValue"])]),_:1}),e(m,{label:"Aria2 下载密钥",prop:"token"},{default:i(()=>[e(a,{modelValue:r(l).token,"onUpdate:modelValue":o[2]||(o[2]=t=>r(l).token=t)},null,8,["modelValue"])]),_:1}),e(m,{label:" "},{default:i(()=>[e(f,{type:"primary",onClick:o[3]||(o[3]=t=>r(s).saveAria2Config())},{default:i(()=>[x(" 保存 ")]),_:1})]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"])}}});export{Y as default}; 2 | -------------------------------------------------------------------------------- /public/assets/js/Aria2Dialog-BoClX_iS.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/Aria2Dialog-BoClX_iS.js.gz -------------------------------------------------------------------------------- /public/assets/js/ChangeMailConfig-DWXXcDjr.js: -------------------------------------------------------------------------------- 1 | import{E as _,q,c as P,b as U,i as E,j as F,d as k,e as x,v as B}from"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";import{i as p}from"./index-DYV93AZk.js";import{d as R,m as I,I as L,o as v,G as $,H as t,i as o,c as N,F as j,R as z,L as V}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";import{r as i}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import"./@vue_runtime-dom@3.4.32-DNdjNMzo.js";import"./@vue_shared@3.4.32-CaCWPAm8.js";import"./lodash-es@4.17.21-BB-zMWwC.js";import"./async-validator@4.2.5-DKvM95Vc.js";import"./@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js";import"./@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js";import"./dayjs@1.11.11-Ct2Knyoi.js";import"./@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js";import"./@ctrl_tinycolor@3.6.1-r5W6hzzQ.js";import"./@sxzz_popperjs-es@2.11.7-D9SI2xQl.js";import"./normalize-wheel-es@1.2.0-B6fDCfyv.js";import"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import"./vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js";import"./axios@1.7.2-B4uVmeYG.js";import"./@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js";import"./tslib@2.6.3-CPxunF3b.js";import"./vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js";const D=()=>p.get("/admin/config/mail"),G=m=>p.patch("/admin/config/mail",m),H=m=>p.post("/admin/config/mail",m),ie=R({__name:"ChangeMailConfig",setup(m){const s=i(!1),l=i({switch:!1,host:"",port:"",username:"",password:"",encryption:"tls",from_address:"",from_name:"",to_address:"",to_name:""}),d=i(null),c={host:[{required:!0,message:"请输入SMTP服务器地址",trigger:"blur"}],port:[{required:!0,message:"请输入SMTP服务器端口",trigger:"blur"}],username:[{required:!0,message:"请输入SMTP服务器账户",trigger:"blur"}],password:[{required:!0,message:"请输入SMTP服务器密码",trigger:"blur"}],encryption:[{required:!0,message:"请选择SMTP服务器加密方式",trigger:"blur"}],from_address:[{required:!0,message:"请输入发件人地址",trigger:"blur"}],from_name:[{required:!0,message:"请输入发件人名称",trigger:"blur"}],to_address:[{required:!0,message:"请输入收件人地址",trigger:"blur"}],to_name:[{required:!0,message:"请输入收件人名称",trigger:"blur"}]},f=async()=>{try{s.value=!0;const u=await D();l.value=u.data}finally{s.value=!1}},b=async u=>{if(!(!u||!await u.validate()))try{s.value=!0,await G(l.value),_.success("保存成功")}finally{s.value=!1,await f()}},w=async u=>{if(!(!u||!await u.validate()))try{s.value=!0,await H(l.value),_.success("发送成功,请检查邮箱是否收到")}finally{s.value=!1}};return I(f),(u,a)=>{const y=q,r=P,n=U,M=E,C=F,g=k,T=x,S=B;return L((v(),$(T,{ref_key:"changeMailConfigFormRef",ref:d,model:l.value,rules:c,"label-width":"auto"},{default:t(()=>[o(r,{label:"是否开启",prop:"switch"},{default:t(()=>[o(y,{modelValue:l.value.switch,"onUpdate:modelValue":a[0]||(a[0]=e=>l.value.switch=e),size:"large"},null,8,["modelValue"])]),_:1}),o(r,{label:"SMTP服务器地址",prop:"host"},{default:t(()=>[o(n,{modelValue:l.value.host,"onUpdate:modelValue":a[1]||(a[1]=e=>l.value.host=e)},null,8,["modelValue"])]),_:1}),o(r,{label:"SMTP服务器加密方式",prop:"encryption"},{default:t(()=>[o(C,{modelValue:l.value.encryption,"onUpdate:modelValue":a[2]||(a[2]=e=>l.value.encryption=e),placeholder:"选择加密方式"},{default:t(()=>[(v(),N(j,null,z(["tls","ssl"],e=>o(M,{key:e,label:e,value:e},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1}),o(r,{label:"SMTP服务器端口",prop:"port"},{default:t(()=>[o(n,{modelValue:l.value.port,"onUpdate:modelValue":a[3]||(a[3]=e=>l.value.port=e)},null,8,["modelValue"])]),_:1}),o(r,{label:"SMTP服务器用户名",prop:"username"},{default:t(()=>[o(n,{modelValue:l.value.username,"onUpdate:modelValue":a[4]||(a[4]=e=>l.value.username=e)},null,8,["modelValue"])]),_:1}),o(r,{label:"SMTP服务器密码",prop:"password"},{default:t(()=>[o(n,{modelValue:l.value.password,"onUpdate:modelValue":a[5]||(a[5]=e=>l.value.password=e)},null,8,["modelValue"])]),_:1}),o(r,{label:"发件人地址",prop:"from_address"},{default:t(()=>[o(n,{modelValue:l.value.from_address,"onUpdate:modelValue":a[6]||(a[6]=e=>l.value.from_address=e)},null,8,["modelValue"])]),_:1}),o(r,{label:"发件人名称",prop:"from_name"},{default:t(()=>[o(n,{modelValue:l.value.from_name,"onUpdate:modelValue":a[7]||(a[7]=e=>l.value.from_name=e)},null,8,["modelValue"])]),_:1}),o(r,{label:"收件人名称",prop:"to_name"},{default:t(()=>[o(n,{modelValue:l.value.to_name,"onUpdate:modelValue":a[8]||(a[8]=e=>l.value.to_name=e)},null,8,["modelValue"])]),_:1}),o(r,{label:"收件人地址",prop:"to_address"},{default:t(()=>[o(n,{modelValue:l.value.to_address,"onUpdate:modelValue":a[9]||(a[9]=e=>l.value.to_address=e)},null,8,["modelValue"])]),_:1}),o(r,{label:" "},{default:t(()=>[o(g,{type:"primary",onClick:a[10]||(a[10]=e=>b(d.value))},{default:t(()=>[V("保存")]),_:1}),o(g,{type:"primary",onClick:a[11]||(a[11]=e=>w(d.value))},{default:t(()=>[V(" 发送测试邮件 ")]),_:1})]),_:1})]),_:1},8,["model"])),[[S,s.value]])}}});export{ie as default}; 2 | -------------------------------------------------------------------------------- /public/assets/js/ChangeMailConfig-DWXXcDjr.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/ChangeMailConfig-DWXXcDjr.js.gz -------------------------------------------------------------------------------- /public/assets/js/ChangeMainConfig-DBsWGwM3.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/ChangeMainConfig-DBsWGwM3.js.gz -------------------------------------------------------------------------------- /public/assets/js/DownloadLinks-0QpbYdeQ.js: -------------------------------------------------------------------------------- 1 | import{E as r,d as M,n as R,m as G,p as H,o as I,k as P}from"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";import{i as D,a as x}from"./index-DYV93AZk.js";import{u as q}from"./aria2Store-Eper8YQt.js";import{u as J}from"./fileListStore-BL5xDhSX.js";import{c as A}from"./copy-By2guqEs.js";import{s as E}from"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import{d as K,o as c,G as f,H as a,i as o,L as s,c as O,F as Q,a as k}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";import{r as W,u as _,a as X}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import{L as C}from"./@vue_shared@3.4.32-CaCWPAm8.js";import"./@vue_runtime-dom@3.4.32-DNdjNMzo.js";import"./lodash-es@4.17.21-BB-zMWwC.js";import"./async-validator@4.2.5-DKvM95Vc.js";import"./@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js";import"./@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js";import"./dayjs@1.11.11-Ct2Knyoi.js";import"./@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js";import"./@ctrl_tinycolor@3.6.1-r5W6hzzQ.js";import"./@sxzz_popperjs-es@2.11.7-D9SI2xQl.js";import"./normalize-wheel-es@1.2.0-B6fDCfyv.js";import"./axios@1.7.2-B4uVmeYG.js";import"./@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js";import"./tslib@2.6.3-CPxunF3b.js";import"./vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js";import"./vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js";const Y=h=>new Promise(u=>setTimeout(u,h)),Z=k("h3",null,[s("下载请推荐使用Aria2下载器,如 "),k("a",{href:"https://motrix.app/",target:"_blank"},"Motrix")],-1),w=k("h3",null,"IDM下载需要手动指定UA,点击即可复制",-1),ee=k("h3",null,"如果当前链接下载失败,请尝试更换链接,如果全部不可用可以单独重新解析单个文件",-1),xe=K({__name:"DownloadLinks",setup(h){const u=J(),{downloadLinks:g,dialogVisible:y}=E(u),v=W([]),L=t=>v.value=t,V=q(),{aria2ConfigForm:i,aria2ConfigDialogVisible:F}=E(V),b=async t=>{try{await D.post(`${i.value.host}:${i.value.port}/jsonrpc`,{jsonrpc:"2.0",id:x(),method:"aria2.getVersion",params:[`token:${i.value.token}`]})}catch{return r.error("检查 Aria2 服务状态失败")}try{await D.post(`${i.value.host}:${i.value.port}/jsonrpc`,{jsonrpc:"2.0",id:x(),method:"aria2.addUri",params:[`token:${i.value.token}`,[t.urls?t.urls[t.index]:t.url],{out:t.filename,header:[`User-Agent: ${t.ua}`]}]})}catch{return r.error("发送失败, 请检查控制台输出, 自行谷歌搜索或提交issue")}r.success(`已把${t.filename}任务发送给下载器`)},S=async()=>{r.error("请确保最大同时下载文件数在5及以下,否则可能出现下载失败!"),await Y(3e3),r.success("开始下载"),v.value.forEach(t=>b(t))},U=()=>F.value=!0,$=async(t,l)=>{const n=await u.getDownloadLinks(l,!0);if(!n)return r.error("重新解析失败");g.value[t]=n[0]},z=t=>{g.value[t].index++};return(t,l)=>{const n=M,B=R,p=G,T=H,j=I,N=P;return c(),f(N,{title:"链接列表",modelValue:_(y),"onUpdate:modelValue":l[2]||(l[2]=e=>X(y)?y.value=e:null),"align-center":"","show-close":"","close-on-click-modal":!1},{default:a(()=>[Z,w,ee,o(B,null,{default:a(()=>[o(n,{type:"primary",disabled:v.value.length<=0,onClick:l[0]||(l[0]=e=>S())},{default:a(()=>[s(" 批量下载 ")]),_:1},8,["disabled"]),o(n,{type:"primary",onClick:l[1]||(l[1]=e=>U())},{default:a(()=>[s("下载配置")]),_:1})]),_:1}),o(j,{border:"","show-overflow-tooltip":"",class:"table",data:_(g),onSelectionChange:L},{default:a(()=>[o(p,{type:"selection",width:"40"}),o(p,{prop:"ua",label:"UA"},{default:a(({row:e})=>[o(T,{type:"danger",onClick:m=>_(A)(e.ua,"已复制UA")},{default:a(()=>[s(C(e.ua??e.url),1)]),_:2},1032,["onClick"])]),_:1}),o(p,{prop:"filename",label:"文件名"}),o(p,{prop:"url",label:"下载链接"},{default:a(({row:e})=>[s(C(e.urls?e.urls[e.index]:e.url),1)]),_:1}),o(p,{label:"操作",width:"400"},{default:a(({row:e,$index:m})=>[o(n,{type:"primary",size:"small",onClick:d=>_(A)(e.urls?e.urls[e.index]:e.url,"已将链接复制到粘贴板内")},{default:a(()=>[s(" 复制链接 ")]),_:2},1032,["onClick"]),o(n,{type:"primary",size:"small",onClick:d=>b(e)},{default:a(()=>[s(" 发送Aria2 ")]),_:2},1032,["onClick"]),e.urls?(c(),O(Q,{key:0},[e.indexz(m)},{default:a(()=>[s(" 更换链接 (当前第"+C(e.index+1)+"条链接) ",1)]),_:2},1032,["onClick"])):(c(),f(n,{key:1,type:"danger",size:"small",onClick:d=>$(m,e.fs_id)},{default:a(()=>[s(" 重新解析 ")]),_:2},1032,["onClick"]))],64)):(c(),f(n,{key:1,type:"danger",size:"small",onClick:d=>$(m,e.fs_id)},{default:a(()=>[s(" 重新解析 ")]),_:2},1032,["onClick"]))]),_:1})]),_:1},8,["data"])]),_:1},8,["modelValue"])}}});export{xe as default}; 2 | -------------------------------------------------------------------------------- /public/assets/js/DownloadLinks-0QpbYdeQ.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/DownloadLinks-0QpbYdeQ.js.gz -------------------------------------------------------------------------------- /public/assets/js/GetFileList-ClRPbksc.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/GetFileList-ClRPbksc.js.gz -------------------------------------------------------------------------------- /public/assets/js/GroupManagement-wC6WYaei.js: -------------------------------------------------------------------------------- 1 | import{E as M,b as w,c as J,r as P,e as Q,d as R,k as W,v as T,m as X,o as Y,s as Z}from"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";import{v as z}from"./@vue_runtime-dom@3.4.32-DNdjNMzo.js";import{i as U}from"./index-DYV93AZk.js";import{d as O,_ as h,$ as ee,o as C,G as E,H as a,i as t,L as m,I as v,m as te,c as ae,a as L,K as q,F as le}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";import{r as _}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import{L as $}from"./@vue_shared@3.4.32-CaCWPAm8.js";import{_ as oe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./lodash-es@4.17.21-BB-zMWwC.js";import"./async-validator@4.2.5-DKvM95Vc.js";import"./@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js";import"./@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js";import"./dayjs@1.11.11-Ct2Knyoi.js";import"./@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js";import"./@ctrl_tinycolor@3.6.1-r5W6hzzQ.js";import"./@sxzz_popperjs-es@2.11.7-D9SI2xQl.js";import"./normalize-wheel-es@1.2.0-B6fDCfyv.js";import"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import"./vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js";import"./axios@1.7.2-B4uVmeYG.js";import"./@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js";import"./tslib@2.6.3-CPxunF3b.js";import"./vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js";const ne=n=>U.post("/admin/group",n),ue=n=>U.get(`/admin/group?page=${n.page}&size=${n.size}`),se=n=>U.patch(`/admin/group/${n.id}`,n),de=n=>U.delete("/admin/group",{data:{group_ids:[n.id]}}),ie=n=>U.delete("/admin/group",{data:{group_ids:n}}),re=O({__name:"AddGroup",props:{modelValue:{},modelModifiers:{}},emits:h(["getGroups"],["update:modelValue"]),setup(n,{emit:i}){const b=i,y=ee(n,"modelValue"),f=_(!1),s=_({name:"",count:0,size:0}),r=_(null),S={name:[{required:!0,message:"请输入组名",trigger:"blur"}],count:[{required:!0,message:"请输入可解析文件个数",trigger:"blur"}],size:[{required:!0,message:"请输入可解析大小",trigger:"blur"}]},x=async V=>{if(!(!V||!await V.validate()))try{f.value=!0,await ne(s.value),M.success("添加成功")}finally{f.value=!1}},F=V=>{b("getGroups"),V()},D=()=>{y.value=!1,b("getGroups")};return(V,u)=>{const G=w,k=J,l=P,o=Q,c=R,p=W,I=T;return C(),E(p,{title:"添加用户组",width:"60%",modelValue:y.value,"onUpdate:modelValue":u[5]||(u[5]=d=>y.value=d),"before-close":F},{footer:a(()=>[t(c,{type:"info",onClick:u[3]||(u[3]=d=>D())},{default:a(()=>[m("取消")]),_:1}),t(c,{type:"primary",onClick:u[4]||(u[4]=d=>x(r.value))},{default:a(()=>[m("添加")]),_:1})]),default:a(()=>[v((C(),E(o,{ref_key:"addGroupFormRef",ref:r,model:s.value,rules:S,"label-width":"auto"},{default:a(()=>[t(k,{label:"组名",prop:"name"},{default:a(()=>[t(G,{modelValue:s.value.name,"onUpdate:modelValue":u[0]||(u[0]=d=>s.value.name=d)},null,8,["modelValue"])]),_:1}),t(k,{label:"可解析文件个数",prop:"count"},{default:a(()=>[t(l,{modelValue:s.value.count,"onUpdate:modelValue":u[1]||(u[1]=d=>s.value.count=d)},null,8,["modelValue"])]),_:1}),t(k,{label:"可解析大小",prop:"size"},{default:a(()=>[t(l,{modelValue:s.value.size,"onUpdate:modelValue":u[2]||(u[2]=d=>s.value.size=d)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])),[[I,f.value]])]),_:1},8,["modelValue"])}}}),pe=O({__name:"GroupManagement",setup(n){const i=_(!1),b=_(15),y=_(1),f=_(),s=_([]),r=async()=>{try{i.value=!0;const l=await ue({page:y.value,size:b.value});f.value=l.data}finally{i.value=!1}},S=async l=>{l.edit=!(l.edit??!1)},x=async l=>{l.edit=!(l.edit??!0),await F(l)},F=async l=>{try{i.value=!0,await se(l),M.success("修改用户组成功")}finally{i.value=!1,await r()}},D=async l=>{try{i.value=!0,await de(l),M.success("删除用户组成功")}finally{i.value=!1,await r()}},V=async()=>{try{i.value=!0;const l=s.value.map(o=>o.id);await ie(l),M.success("批量删除用户组成功")}finally{i.value=!1,await r()}},u=l=>s.value=l;te(r);const G=_(!1),k=()=>G.value=!G.value;return(l,o)=>{var B,N,A;const c=R,p=X,I=w,d=P,j=Y,H=Z,K=T;return C(),ae(le,null,[t(re,{onGetGroups:r,modelValue:G.value,"onUpdate:modelValue":o[0]||(o[0]=e=>G.value=e)},null,8,["modelValue"]),t(c,{type:"primary",onClick:o[1]||(o[1]=e=>r())},{default:a(()=>[m("刷新列表")]),_:1}),t(c,{type:"primary",onClick:o[2]||(o[2]=e=>k())},{default:a(()=>[m("添加用户组")]),_:1}),t(c,{type:"danger",disabled:s.value.length<=0,onClick:o[3]||(o[3]=e=>V())},{default:a(()=>[m(" 批量删除 ")]),_:1},8,["disabled"]),v((C(),E(j,{data:((B=f.value)==null?void 0:B.data)??[],border:"","show-overflow-tooltip":"",class:"table",onSelectionChange:u},{default:a(()=>[t(p,{type:"selection",width:"40"}),t(p,{prop:"id",label:"ID"}),t(p,{prop:"name",label:"组名"},{default:a(({row:e})=>[v(L("span",null,$(e.name),513),[[z,!e.edit]]),v(t(I,{modelValue:e.name,"onUpdate:modelValue":g=>e.name=g},null,8,["modelValue","onUpdate:modelValue"]),[[z,e.edit]])]),_:1}),t(p,{prop:"count",label:"可解析文件数量"},{default:a(({row:e})=>[v(L("span",null,$(e.count),513),[[z,!e.edit]]),v(t(d,{modelValue:e.count,"onUpdate:modelValue":g=>e.count=g},null,8,["modelValue","onUpdate:modelValue"]),[[z,e.edit]])]),_:1}),t(p,{prop:"size",label:"可解析大小"},{default:a(({row:e})=>[v(L("span",null,$(e.size),513),[[z,!e.edit]]),v(t(d,{modelValue:e.size,"onUpdate:modelValue":g=>e.size=g},null,8,["modelValue","onUpdate:modelValue"]),[[z,e.edit]])]),_:1}),t(p,{prop:"created_at",label:"创建时间"},{default:a(({row:e})=>[m($(new Date(e.created_at).toLocaleString()),1)]),_:1}),t(p,{prop:"updated_at",label:"更新时间"},{default:a(({row:e})=>[m($(new Date(e.updated_at).toLocaleString()),1)]),_:1}),t(p,{width:"150",label:"操作",fixed:"right"},{default:a(({row:e})=>[e.edit?q("",!0):(C(),E(c,{key:0,size:"small",type:"primary",onClick:g=>S(e)},{default:a(()=>[m(" 编辑 ")]),_:2},1032,["onClick"])),e.edit?(C(),E(c,{key:1,size:"small",type:"primary",onClick:g=>x(e)},{default:a(()=>[m(" 保存 ")]),_:2},1032,["onClick"])):q("",!0),t(c,{size:"small",type:"danger",onClick:g=>D(e)},{default:a(()=>[m("删除")]),_:2},1032,["onClick"])]),_:1})]),_:1},8,["data"])),[[K,i.value]]),t(H,{"current-page":y.value,"onUpdate:currentPage":o[4]||(o[4]=e=>y.value=e),"page-size":b.value,"onUpdate:pageSize":o[5]||(o[5]=e=>b.value=e),"page-sizes":[15,50,100,500,((N=f.value)==null?void 0:N.total)??100],total:((A=f.value)==null?void 0:A.total)??100,layout:"total, sizes, prev, pager, next, jumper",onSizeChange:r,onCurrentChange:r},null,8,["current-page","page-size","page-sizes","total"])],64)}}}),Le=oe(pe,[["__scopeId","data-v-6ac724f9"]]);export{Le as default}; 2 | -------------------------------------------------------------------------------- /public/assets/js/GroupManagement-wC6WYaei.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/GroupManagement-wC6WYaei.js.gz -------------------------------------------------------------------------------- /public/assets/js/InstallView-1zGjJR37.js: -------------------------------------------------------------------------------- 1 | import{a as F,E as I,d as C,b as U,c as x,i as N,j as B,e as R}from"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";import{i as $,a as h}from"./index-DYV93AZk.js";import{f as A}from"./favicon-BrYC5Vmz.js";import{u as H}from"./vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js";import{d as j,c as b,i as e,H as o,o as c,a as u,L as f,K as y,F as D,Y as K,Z as O}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";import{r as d,u as S}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import{L as T}from"./@vue_shared@3.4.32-CaCWPAm8.js";import{_ as Y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./@vue_runtime-dom@3.4.32-DNdjNMzo.js";import"./lodash-es@4.17.21-BB-zMWwC.js";import"./async-validator@4.2.5-DKvM95Vc.js";import"./@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js";import"./@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js";import"./dayjs@1.11.11-Ct2Knyoi.js";import"./@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js";import"./@ctrl_tinycolor@3.6.1-r5W6hzzQ.js";import"./@sxzz_popperjs-es@2.11.7-D9SI2xQl.js";import"./normalize-wheel-es@1.2.0-B6fDCfyv.js";import"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import"./vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js";import"./axios@1.7.2-B4uVmeYG.js";import"./@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js";import"./tslib@2.6.3-CPxunF3b.js";const Z=r=>$.post("/install",r),z=r=>(K("data-v-c77698d2"),r=r(),O(),r),G={class:"container"},J=["src"],P={key:0},W=z(()=>u("p",null,"您的后台登录账号密码均为:admin,请及时登录修改!",-1)),X=j({__name:"InstallView",setup(r){const a=d({db_connection:"mysql",db_host:"localhost",db_port:"3306",db_database:"94list-laravel",db_username:"94list-laravel",db_password:"",app_name:"94list-laravel"}),v=d(null),L={db_connection:[{required:!0,message:"请选择安装方式",trigger:"change"}],db_host:[{required:!0,message:"请输入MySQL 数据库地址",trigger:"blur"}],db_port:[{required:!0,message:"请输入MySQL 端口",trigger:"blur"}],db_database:[{required:!0,message:"请输入MySQL 数据库名",trigger:"blur"}],db_username:[{required:!0,message:"请输入MySQL 用户名",trigger:"blur"}],app_name:[{required:!0,message:"请输入网站名称",trigger:"blur"}]},m=d(!1),p=d(!1),w=async i=>{if(!(!i||!await i.validate()))try{m.value=!0,await Z(a.value),I.success("安装成功!"),p.value=!0}finally{m.value=!1}},g=H(),M=()=>g.push("/"),Q=()=>g.push("/login");return(i,l)=>{const _=C,n=U,s=x,V=N,q=B,E=R,k=F;return c(),b("div",G,[e(k,null,{default:o(()=>[u("h1",null,[u("img",{src:S(A),alt:"logo"},null,8,J)]),u("h2",null,"安装 | "+T(S(h)()),1),p.value?(c(),b("h3",P,[W,e(_,{type:"primary",onClick:l[0]||(l[0]=t=>M())},{default:o(()=>[f("访问首页")]),_:1}),e(_,{type:"success",onClick:l[1]||(l[1]=t=>Q())},{default:o(()=>[f("访问后台")]),_:1})])):y("",!0),e(E,{ref_key:"installFormRef",ref:v,model:a.value,rules:L,disabled:p.value,"label-width":"auto"},{default:o(()=>[e(s,{label:"网站名称",prop:"app_name"},{default:o(()=>[e(n,{modelValue:a.value.app_name,"onUpdate:modelValue":l[2]||(l[2]=t=>a.value.app_name=t)},null,8,["modelValue"])]),_:1}),e(s,{label:"数据库驱动",prop:"db_connection"},{default:o(()=>[e(q,{modelValue:a.value.db_connection,"onUpdate:modelValue":l[3]||(l[3]=t=>a.value.db_connection=t),placeholder:"请选择数据库驱动"},{default:o(()=>[e(V,{label:"MySQL",value:"mysql"}),e(V,{label:"SQLite",value:"sqlite"})]),_:1},8,["modelValue"])]),_:1}),a.value.db_connection==="mysql"?(c(),b(D,{key:0},[e(s,{label:"MySQL 数据库地址",prop:"db_host"},{default:o(()=>[e(n,{modelValue:a.value.db_host,"onUpdate:modelValue":l[4]||(l[4]=t=>a.value.db_host=t)},null,8,["modelValue"])]),_:1}),e(s,{label:"MySQL 端口",prop:"db_port"},{default:o(()=>[e(n,{modelValue:a.value.db_port,"onUpdate:modelValue":l[5]||(l[5]=t=>a.value.db_port=t)},null,8,["modelValue"])]),_:1}),e(s,{label:"MySQL 数据库名",prop:"db_database"},{default:o(()=>[e(n,{modelValue:a.value.db_database,"onUpdate:modelValue":l[6]||(l[6]=t=>a.value.db_database=t)},null,8,["modelValue"])]),_:1}),e(s,{label:"MySQL 用户名",prop:"db_username"},{default:o(()=>[e(n,{modelValue:a.value.db_username,"onUpdate:modelValue":l[7]||(l[7]=t=>a.value.db_username=t)},null,8,["modelValue"])]),_:1}),e(s,{label:"MySQL 密码",prop:"db_password"},{default:o(()=>[e(n,{modelValue:a.value.db_password,"onUpdate:modelValue":l[8]||(l[8]=t=>a.value.db_password=t)},null,8,["modelValue"])]),_:1})],64)):y("",!0),e(s,{class:"center"},{default:o(()=>[e(_,{type:"primary",onClick:l[9]||(l[9]=t=>w(v.value)),loading:m.value},{default:o(()=>[f(" 安装 ")]),_:1},8,["loading"])]),_:1})]),_:1},8,["model","disabled"])]),_:1})])}}}),we=Y(X,[["__scopeId","data-v-c77698d2"]]);export{we as default}; 2 | -------------------------------------------------------------------------------- /public/assets/js/InstallView-1zGjJR37.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/InstallView-1zGjJR37.js.gz -------------------------------------------------------------------------------- /public/assets/js/InvCodeManagement-Dsqp0U7A.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/InvCodeManagement-Dsqp0U7A.js.gz -------------------------------------------------------------------------------- /public/assets/js/IpManagement-CNmIbwyM.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/IpManagement-CNmIbwyM.js.gz -------------------------------------------------------------------------------- /public/assets/js/LoginView-BoL3i2YX.js: -------------------------------------------------------------------------------- 1 | import{a as F,v as k,E as R,b as x,c as B,d as C,e as $}from"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";import{c as _}from"./@vue_runtime-dom@3.4.32-DNdjNMzo.js";import{g as I,a as N,l as K,s as S,b as q}from"./index-DYV93AZk.js";import{f as D}from"./favicon-BrYC5Vmz.js";import{u as U}from"./vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js";import{d as A,c as G,I as H,G as M,H as s,o as g,a as d,i as o,L as v}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";import{r as f,u as w}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import{L as T}from"./@vue_shared@3.4.32-CaCWPAm8.js";import{_ as h}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./lodash-es@4.17.21-BB-zMWwC.js";import"./async-validator@4.2.5-DKvM95Vc.js";import"./@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js";import"./@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js";import"./dayjs@1.11.11-Ct2Knyoi.js";import"./@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js";import"./@ctrl_tinycolor@3.6.1-r5W6hzzQ.js";import"./@sxzz_popperjs-es@2.11.7-D9SI2xQl.js";import"./normalize-wheel-es@1.2.0-B6fDCfyv.js";import"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import"./vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js";import"./axios@1.7.2-B4uVmeYG.js";import"./@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js";import"./tslib@2.6.3-CPxunF3b.js";const j={class:"container"},z=["src"],J=A({__name:"LoginView",setup(O){const n=U();I()==="1"&&n.push("/admin");const y=()=>n.push("/register"),i=f(!1),t=f({username:"",password:""}),l=f(null),V={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]},m=async u=>{if(!(!u||!await u.validate()))try{i.value=!0;const e=await K({username:t.value.username,password:t.value.password});R.success("登陆成功"),S("1");const a=e.data.role;q(a),n.push(`/${a}`)}finally{i.value=!1}};return(u,e)=>{const a=x,p=B,c=C,b=$,L=F,E=k;return g(),G("div",j,[H((g(),M(L,null,{default:s(()=>[d("h1",null,[d("img",{src:w(D),alt:"logo"},null,8,z)]),d("h2",null,"登陆 | "+T(w(N)()),1),o(b,{ref_key:"loginFormRef",ref:l,model:t.value,rules:V,"label-width":"auto"},{default:s(()=>[o(p,{label:"用户名",prop:"username"},{default:s(()=>[o(a,{modelValue:t.value.username,"onUpdate:modelValue":e[0]||(e[0]=r=>t.value.username=r),onKeyup:e[1]||(e[1]=_(r=>m(l.value),["enter"]))},null,8,["modelValue"])]),_:1}),o(p,{label:"密码",prop:"password"},{default:s(()=>[o(a,{modelValue:t.value.password,"onUpdate:modelValue":e[2]||(e[2]=r=>t.value.password=r),type:"password",onKeyup:e[3]||(e[3]=_(r=>m(l.value),["enter"]))},null,8,["modelValue"])]),_:1}),o(p,{class:"center"},{default:s(()=>[o(c,{type:"primary",onClick:e[4]||(e[4]=r=>y())},{default:s(()=>[v("注册")]),_:1}),o(c,{type:"primary",onClick:e[5]||(e[5]=r=>m(l.value))},{default:s(()=>[v("登陆")]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})),[[E,i.value]])])}}}),ve=h(J,[["__scopeId","data-v-76f977eb"]]);export{ve as default}; 2 | -------------------------------------------------------------------------------- /public/assets/js/LoginView-BoL3i2YX.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/LoginView-BoL3i2YX.js.gz -------------------------------------------------------------------------------- /public/assets/js/NotFoundView-D8J8xe3g.js: -------------------------------------------------------------------------------- 1 | import{u as i}from"./vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js";import{d as r,m as l,v as d,c as _,a as s,o as p}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";import{r as c,u}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import{L as m}from"./@vue_shared@3.4.32-CaCWPAm8.js";const h="/assets/png/qrcode-39AXYHGT.png",v={class:"page"},f={class:"container"},g=s("div",{class:"font-h1"},":(",-1),B=s("div",{class:"tip"},"你的电脑遇到问题, 需要重新启动",-1),x=s("div",{class:"tip"},"我们只收集某些错误信息, 然后自动为你重新启动",-1),L={class:"complete"},M={class:"percentage"},R=s("span",null,"% 完成",-1),T={class:"details"},k={class:"qr-image"},q=["src"],w=s("div",{class:"stopcode"},[s("div",{class:"stopcode-text"}," 有关问题的详细信息和可能的解决方法, 请访问 https://cutt.ly/kwErLg0w "),s("div",{class:"stopcode-text"},[s("p",null,"如需致电支持人员, 请向他们提供以下信息:"),s("p",null,"终止代码: TRICKED BY RICKROLL")])],-1),V=r({__name:"NotFoundView",setup(C){const a=i(),t=c(0),o=c(0);function n(){t.value+=Math.floor(Math.random()*25),t.value>=100?(t.value=100,a.push("/")):e()}const e=()=>o.value=setTimeout(n,Math.random()*500+500);return l(()=>e()),d(()=>clearTimeout(o.value)),(E,I)=>(p(),_("div",v,[s("div",f,[g,B,x,s("div",L,[s("span",M,m(t.value),1),R]),s("div",T,[s("div",k,[s("img",{src:u(h)},null,8,q)]),w])])]))}});export{V as default}; 2 | -------------------------------------------------------------------------------- /public/assets/js/NotFoundView-D8J8xe3g.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/NotFoundView-D8J8xe3g.js.gz -------------------------------------------------------------------------------- /public/assets/js/RecordManagement-BjaPKNfj.js: -------------------------------------------------------------------------------- 1 | import{E as x,d as j,g as A,i as H,j as O,m as G,o as J,s as q,v as K}from"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";import{i as v}from"./index-DYV93AZk.js";import{f as w}from"./format-CyW-QbYa.js";import{u as Q}from"./changeConfigForm-D___ED7J.js";import{c as W}from"./copy-By2guqEs.js";import{d as X,m as Y,o as E,c as Z,i as e,H as l,L as r,I as ee,G as te,a as ae,F as oe}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";import{r as m,u as h}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import{L as d}from"./@vue_shared@3.4.32-CaCWPAm8.js";import{_ as le}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./@vue_runtime-dom@3.4.32-DNdjNMzo.js";import"./lodash-es@4.17.21-BB-zMWwC.js";import"./async-validator@4.2.5-DKvM95Vc.js";import"./@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js";import"./@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js";import"./dayjs@1.11.11-Ct2Knyoi.js";import"./@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js";import"./@ctrl_tinycolor@3.6.1-r5W6hzzQ.js";import"./@sxzz_popperjs-es@2.11.7-D9SI2xQl.js";import"./normalize-wheel-es@1.2.0-B6fDCfyv.js";import"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import"./vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js";import"./axios@1.7.2-B4uVmeYG.js";import"./@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js";import"./tslib@2.6.3-CPxunF3b.js";import"./vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js";const ne=p=>v.get(`/admin/record?page=${p.page}&size=${p.size}&orderBy=${p.orderBy}`),re=()=>v.get("/admin/record/count"),se=p=>v.delete("/admin/record",{data:{record_ids:[p.id]}}),ie=p=>v.delete("/admin/record",{data:{record_ids:p}}),de=X({__name:"RecordManagement",setup(p){const s=m(!1),y=m(15),b=m(1),C=m("id"),_=m(),z=m([]),g=m({today:{count:0,size:0},total:{count:0,size:0}}),c=async()=>{try{s.value=!0;const o=await ne({page:b.value,size:y.value,orderBy:C.value});_.value=o.data}finally{s.value=!1,await B()}},B=async()=>{try{s.value=!0;const o=await re();g.value=o.data}finally{s.value=!1}},D=async o=>{try{s.value=!0,await se(o),x.success("删除记录成功")}finally{s.value=!1,await c()}},$=async()=>{try{s.value=!0;const o=z.value.map(t=>t.id);await ie(o),x.success("删除记录成功")}finally{s.value=!1,await c()}},I=o=>z.value=o;Y(c);function L(o){return o.map(t=>t.toString(16).padStart(2,"0")).join("")}function F(o,t){const i=t.length,f=[];for(let u=0;u{const t=Q(),i=t.changeConfigForm.proxy_server;if(!i)return x.warning("未配置代理服务器");W(i+"?data="+F(JSON.stringify({url:o.url,ua:o.ua}),t.changeConfigForm.proxy_password))};return(o,t)=>{var k,R,S;const i=j,f=A,u=H,P=O,n=G,T=J,M=q,N=K;return E(),Z(oe,null,[e(i,{type:"primary",onClick:t[0]||(t[0]=a=>c())},{default:l(()=>[r("刷新列表")]),_:1}),e(i,{type:"danger",disabled:z.value.length<=0,onClick:t[1]||(t[1]=a=>$())},{default:l(()=>[r(" 批量删除 ")]),_:1},8,["disabled"]),e(f,{style:{"margin-left":"20px"}},{default:l(()=>[r(" 累计解析: "+d(g.value.total.count)+" ("+d(h(w)(g.value.total.size??0))+") ",1)]),_:1}),e(f,null,{default:l(()=>[r(" 今日解析: "+d(g.value.today.count)+" ("+d(h(w)(g.value.today.size??0))+") ",1)]),_:1}),e(f,{style:{"margin-left":"20px"}},{default:l(()=>[r(" 按照 "),e(P,{modelValue:C.value,"onUpdate:modelValue":t[2]||(t[2]=a=>C.value=a),onChange:c,style:{width:"100px"}},{default:l(()=>[e(u,{key:"id",label:"时间",value:"id"}),e(u,{key:"size",label:"文件大小",value:"size"})]),_:1},8,["modelValue"]),r(" 排序 ")]),_:1}),ee((E(),te(T,{data:((k=_.value)==null?void 0:k.data)??[],border:"","show-overflow-tooltip":"",class:"table",onSelectionChange:I},{default:l(()=>[e(n,{type:"selection",width:"40"}),e(n,{prop:"id",label:"ID"}),e(n,{prop:"ip",label:"IP"}),e(n,{prop:"fs_id",label:"文件ID"}),e(n,{prop:"file.filename",label:"文件名"}),e(n,{prop:"fs_id",label:"文件大小"},{default:l(({row:a})=>[ae("span",null,d(h(w)(a.file.size)),1)]),_:1}),e(n,{prop:"url",label:"下载链接"}),e(n,{prop:"ua",label:"UA"}),e(n,{prop:"user_id",label:"用户ID"},{default:l(({row:a})=>[r(d(a.user_id??"非用戶解析"),1)]),_:1}),e(n,{prop:"token_id",label:"卡密ID"},{default:l(({row:a})=>[r(d(a.token_id??"非卡密解析"),1)]),_:1}),e(n,{prop:"account_id",label:"解析账号ID"}),e(n,{prop:"created_at",label:"创建时间"},{default:l(({row:a})=>[r(d(new Date(a.created_at).toLocaleString()),1)]),_:1}),e(n,{prop:"updated_at",label:"更新时间"},{default:l(({row:a})=>[r(d(new Date(a.updated_at).toLocaleString()),1)]),_:1}),e(n,{width:"220",label:"操作",fixed:"right"},{default:l(({row:a})=>[e(i,{size:"small",type:"primary",onClick:U=>V(a)},{default:l(()=>[r(" 获取代理服务器链接 ")]),_:2},1032,["onClick"]),e(i,{size:"small",type:"danger",onClick:U=>D(a)},{default:l(()=>[r("删除")]),_:2},1032,["onClick"])]),_:1})]),_:1},8,["data"])),[[N,s.value]]),e(M,{"current-page":b.value,"onUpdate:currentPage":t[3]||(t[3]=a=>b.value=a),"page-size":y.value,"onUpdate:pageSize":t[4]||(t[4]=a=>y.value=a),"page-sizes":[15,50,100,500,((R=_.value)==null?void 0:R.total)??100],total:((S=_.value)==null?void 0:S.total)??100,layout:"total, sizes, prev, pager, next, jumper",onSizeChange:c,onCurrentChange:c},null,8,["current-page","page-size","page-sizes","total"])],64)}}}),Ve=le(de,[["__scopeId","data-v-f57bd9b1"]]);export{Ve as default}; 2 | -------------------------------------------------------------------------------- /public/assets/js/RecordManagement-BjaPKNfj.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/RecordManagement-BjaPKNfj.js.gz -------------------------------------------------------------------------------- /public/assets/js/RegisterView-BB1Y1TFY.js: -------------------------------------------------------------------------------- 1 | import{a as R,v as x,E as B,b as K,c as L,d as N,e as $}from"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";import{c as d}from"./@vue_runtime-dom@3.4.32-DNdjNMzo.js";import{g as I,u as S,a as q,r as U}from"./index-DYV93AZk.js";import{f as D}from"./favicon-BrYC5Vmz.js";import{u as M}from"./vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js";import{d as A,c as G,I as H,G as V,H as a,o as f,a as v,i as r,K as T,L as b}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";import{r as _,u as c}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import{L as j}from"./@vue_shared@3.4.32-CaCWPAm8.js";import{_ as z}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./lodash-es@4.17.21-BB-zMWwC.js";import"./async-validator@4.2.5-DKvM95Vc.js";import"./@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js";import"./@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js";import"./dayjs@1.11.11-Ct2Knyoi.js";import"./@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js";import"./@ctrl_tinycolor@3.6.1-r5W6hzzQ.js";import"./@sxzz_popperjs-es@2.11.7-D9SI2xQl.js";import"./normalize-wheel-es@1.2.0-B6fDCfyv.js";import"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import"./vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js";import"./axios@1.7.2-B4uVmeYG.js";import"./@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js";import"./tslib@2.6.3-CPxunF3b.js";const J={class:"container"},O=["src"],P=A({__name:"RegisterView",setup(Q){const i=M();I()==="1"&&i.push("/admin");const k=()=>i.push("/login"),u=_(!1),o=_({username:"",password:"",inv_code:""}),s=_(null),g={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]},w=S();w.config.need_inv_code&&(g.inv_code=[{required:!0,message:"请输入邀请码",trigger:"blur"}]);const n=async m=>{if(!(!m||!await m.validate()))try{u.value=!0,await U({username:o.value.username,password:o.value.password,inv_code:o.value.inv_code}),B.success("注册成功"),i.push("/login")}finally{u.value=!1}};return(m,e)=>{const p=K,l=L,y=N,E=$,F=R,C=x;return f(),G("div",J,[H((f(),V(F,null,{default:a(()=>[v("h1",null,[v("img",{src:c(D),alt:"logo"},null,8,O)]),v("h2",null,"注册 | "+j(c(q)()),1),r(E,{ref_key:"registerFormRef",ref:s,model:o.value,rules:g,"label-width":"auto"},{default:a(()=>[r(l,{label:"用户名",prop:"username"},{default:a(()=>[r(p,{modelValue:o.value.username,"onUpdate:modelValue":e[0]||(e[0]=t=>o.value.username=t),onKeyup:e[1]||(e[1]=d(t=>n(s.value),["enter"]))},null,8,["modelValue"])]),_:1}),r(l,{label:"密码",prop:"password"},{default:a(()=>[r(p,{modelValue:o.value.password,"onUpdate:modelValue":e[2]||(e[2]=t=>o.value.password=t),type:"password",onKeyup:e[3]||(e[3]=d(t=>n(s.value),["enter"]))},null,8,["modelValue"])]),_:1}),c(w).config.need_inv_code?(f(),V(l,{key:0,label:"邀请码",prop:"inv_code"},{default:a(()=>[r(p,{modelValue:o.value.inv_code,"onUpdate:modelValue":e[4]||(e[4]=t=>o.value.inv_code=t),onKeyup:e[5]||(e[5]=d(t=>n(s.value),["enter"]))},null,8,["modelValue"])]),_:1})):T("",!0),r(l,{class:"center"},{default:a(()=>[r(y,{type:"primary",onClick:e[6]||(e[6]=t=>k())},{default:a(()=>[b("登陆")]),_:1}),r(y,{type:"primary",onClick:e[7]||(e[7]=t=>n(s.value))},{default:a(()=>[b("注册")]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})),[[C,u.value]])])}}}),we=z(P,[["__scopeId","data-v-da197fbf"]]);export{we as default}; 2 | -------------------------------------------------------------------------------- /public/assets/js/RegisterView-BB1Y1TFY.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/RegisterView-BB1Y1TFY.js.gz -------------------------------------------------------------------------------- /public/assets/js/ShowFileList-DoTSeEKx.js: -------------------------------------------------------------------------------- 1 | import{m as w,n as D,o as u,a as L,v as Z}from"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";import"./index-DYV93AZk.js";import{u as F}from"./fileListStore-BL5xDhSX.js";import{a as U,f as x}from"./format-CyW-QbYa.js";import{i as r}from"./isMobile-BD0f7XPI.js";import{s as y}from"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import{d as N,I as M,o as T,G as V,H as a,i,a as c,L as l,K as Y,Y as J,Z as b}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";import{r as j,u as t}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import{L as g}from"./@vue_shared@3.4.32-CaCWPAm8.js";import{_ as G}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./@vue_runtime-dom@3.4.32-DNdjNMzo.js";import"./lodash-es@4.17.21-BB-zMWwC.js";import"./async-validator@4.2.5-DKvM95Vc.js";import"./@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js";import"./@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js";import"./dayjs@1.11.11-Ct2Knyoi.js";import"./@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js";import"./@ctrl_tinycolor@3.6.1-r5W6hzzQ.js";import"./@sxzz_popperjs-es@2.11.7-D9SI2xQl.js";import"./normalize-wheel-es@1.2.0-B6fDCfyv.js";import"./axios@1.7.2-B4uVmeYG.js";import"./@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js";import"./tslib@2.6.3-CPxunF3b.js";import"./vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js";import"./vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js";const O="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAAXNSR0IArs4c6QAACRlJREFUeF7tnUFuGzcUhkmrm/YStRHlGEWtRQx0F9jZJ7pBb9D4BD1CnH3kZlcgWcTpEdplG2QK9Boqi7HkQk7ihHzDmfk17zMQuGjImcfv5weSGkmJgR8IQOBOAhE2EIDA3QQQhNkBgc8QQBCmBwQQhDkAARsBVhAbN3o5IYAgToJmmDYCCGLjRi8nBBDESdAM00YAQWzc6OWEAII4CZph2gggiI0bvZwQQBAnQTNMGwEEsXGjlxMCCOIkaIZpI4AgNm70ckIAQZwEzTBtBBDExo1eTgggiJOgGaaNAILYuNHLCQEEcRI0w7QRQBAbN3o5IYAgToJmmDYCCGLjRi8nBBDESdAM00ZgUEHSrw8Pw1cHj0OKhyGE9k/7c2wr3X2vZkvgavM7vb3+FQ+a+ODF9v+5Z9QZQO+C7EjRioAMnSPLukATQjqPJ5cXWa1pdCeBXgVJr09/Cik+hf9oBNpV5irE+JxVxZZBL4Kk14+OQ0rPdrZRturoVZPARTxZLWte0MO1qgvCqiE9bdh6FcZTVZD06uwN54zCBMZoHtPT+ODyfIxb79s9qwmCHPsWfWjCer2IP7y8eTVs7wYwRMFVBEmvztrzxpMhCuYeVQk08WR1VPWKE7tYZ0G2B/J2a8XPfhK4iierxX6W3n/VnQS5fsYxm73vv0zu0DMBXuG6A3A3QTiU9zxvB7w8B/dPwjYLwtZqwMk7zK2aEOOSB4q3YdsFYfUYZtoOexcO7R/w7iJIGjY77jYQAc4jO6BNgqRXp09CiO1Lu/xMkUCMC7Zam2CNgvDcY4pe7IyJrdYWhlUQtlcTNySEwFbLsoLw7GP6ZmxHyKtaJkE2b2XnybkPT9xvtYq3WBzQfZixM0rXWy0EcTffiwfseqtVLggfoy2eYRPo4HarhSATmL2DDMHpe7UQZJDZNYmbuNxqlQvy2+nPYR1/nETkDKKMQAz/hG/X35V1+nzreKT9icZyQX4/exO+4futak4SrhVuPvbb/t78d4rP4/3xvwAPQZidygQ23+sV0ts4H+dL8BBEeXpQ2y6BJsR0Ee8N+20sCMIk3DcCg4qCIPs2Paj3hsDmS/B63nohCBNunwn0vpqUC/LH2S/h6/Bwn6lS+8QItA8xezqblAvyjm9sn9j0mspwmjBbL2o/V0GQqUwPxtESaOK87jdFIggTa2oELuK83j/zgCBTmx6MJ4SKZxIEYUJNk0AlSRBkmtODUbXv6apwaEcQptKUCXQ+jyDIlKcHY2tCissu7wpGECbR1Alcxbn93z9BkKlPD8bXfrZkYV1FEIQJ5IGA+SyCIB6mB2M0P2FHECaPDwLGbRaC+JgejNL44BBBmDpeCJi2WQjiZXowzhDnq+L5Xtwh8XkQptq+Epitj0o/L4Ig+xo2dZcTMBzUEaQcMz32lQCC7Gty1D0IAcMrWawggyTDTSQIIIhEDBShSgBBVJOhLgkCCCIRA0WoEkAQ1WSoS4IAgkjEQBGqBBBENRnqkiCAIBIxUIQqAQRRTYa6JAggiEQMFKFKAEFUk6EuCQIIIhEDRagSQBDVZKhLggCCSMRAEaoEEEQ1GeqSIIAgEjFQhCoBBFFNhrokCCCIRAwUoUoAQVSToS4JAggiEQNFqBJAENVkqEuCAIJIxEARqgQQRDUZ6pIggCASMVCEKgEEUU2GuiQIIIhEDBShSgBBVJOhLgkCCCIRA0WoEkAQ1WSoS4IAgkjEQBGqBBBENRnqkiCAIBIxUIQqAQRRTYa6JAggiEQMFKFKAEFUk6EuCQIIIhEDRagSQBDVZKhLggCCSMRAEaoEEEQ1GeqSIIAgEjFQhCoBBFFNhrokCCCIRAwUoUoAQVSToS4JAggiEQNFqBJAENVkqEuCAIJIxEARqgQQRDUZ6pIggCASMVCEKgEEUU2GuiQIIIhEDBShSgBBVJOhLgkCCCIRA0WoEkAQ1WSoS4IAgkjEQBGqBBBENRnqkiCAIBIxUIQqAQRRTYa6JAggiEQMFKFKAEFUk6EuCQIIIhEDRagSQBDVZKhLggCCSMRAEaoEEEQ1GeqSIIAgEjFQhCoBBFFNhrokCCCIRAwUoUoAQVSToS4JAggiEQNFqBJAENVkqEuCAIJIxEARqgQQRDUZ6pIgMIggfz46DjG9kRgwRUCgiEBaxvnlRUmXWNK4bZsQpBQZ7WUIDCHI+4eHYT17LzNmCoFALoHZ+igevWxym7ftylcQBCnhS1slAkMIcr3N+ussKY2bWiCQQyDOV8ULQnGHrSDtIf04pyjaQECEwEWcr5altRgFOX0SQnxWejPaQ2A8AuUHdNMZ5HoF4RwyXs7c2UbAcP4wC8I2y5YRvcYjYDl/dBPk3elPIcWn4w2ZO0Mgm4Dp/NFNELZZ2enQcGQCxu1VJ0E22ywO6yNHz+2/TMC8enQXZLOKtC/5Hn65TlpAYAQCHVaPzoKwiowQOLfMJ2B49+6HFzc9B9m9yPYl3/aZCA8O86OjZf8EmjhfHXW9TWdBrlcRDuxdc6B/bQIpLuL9F1ddL1tFELZaXWOgf1UCleSocga5td3i2UjVnLmYgUCFc8fuXautIDcXTUhiSJUulQhcxflqUela15epL0h7Hvn34DFP2WvGxLUyCHR63nHX9asLwkqSESVN6hKovK3qdYt160zCg8S6E4GrfUyg4oH8U3h7W0H+X0nYcjGt+yFwFWbrZelnzEtL6V2QW6KsZzxQLE2I9h8SaEKKyxrPOHLQDiYIouTEQZvPEGhCSOel32vVlejggtwW5eA4hPiYt6l0jXGy/ZsQ00W8d3k+1ghHE+Tjw3wrS/sTv9/+XfsOYd4lPNbMGPa+7XdVtTJsvrMqhb+HXinuGq6EIMNmwd0gkE8AQfJZ0dIhAQRxGDpDzieAIPmsaOmQAII4DJ0h5xNAkHxWtHRIAEEchs6Q8wkgSD4rWjokgCAOQ2fI+QQQJJ8VLR0SQBCHoTPkfAIIks+Klg4JIIjD0BlyPgEEyWdFS4cEEMRh6Aw5nwCC5LOipUMCCOIwdIacTwBB8lnR0iEBBHEYOkPOJ4Ag+axo6ZAAgjgMnSHnE0CQfFa0dEgAQRyGzpDzCSBIPitaOiSAIA5DZ8j5BP4DGhIEBS0yns0AAAAASUVORK5CYII=",_="/assets/png/unknownfile-BBXNi05M.png",q=s=>(J("data-v-a8be935c"),s=s(),b(),s),v=q(()=>c("h2",null,"文件列表",-1)),P=["src"],W=N({__name:"ShowFileList",setup(s){const A=F(),{pending:Q,fileList:n,selectedRows:C,getFileListForm:B}=y(A),m=j(null),p=e=>C.value=e,I=async e=>{B.value.dir=e,await A.getFileList()},S=async e=>{if(r())try{e.isdir===1?await I(e.path):await A.getDownloadLinks(e.fs_id)}finally{Q.value=!1}},f=async e=>{if(!r())try{e.isdir===1?await I(e.path):await A.getDownloadLinks(e.fs_id)}finally{Q.value=!1}};return(e,H)=>{const E=w,h=D,R=u,d=L,k=Z;return t(n).list.length>0?M((T(),V(d,{key:0,class:"card"},{default:a(()=>[v,i(R,{border:"",stripe:"",ref_key:"fileListTableRef",ref:m,data:t(n).list,onRowClick:S,onRowDblclick:f,onSelectionChange:p,class:"table"},{default:a(()=>[i(E,{type:"selection",width:"40"}),i(E,{label:"文件名"},{default:a(({row:o})=>[i(h,{wrap:""},{default:a(()=>[c("img",{src:o.isdir===1?t(O):t(_)},null,8,P),l(" "+g(o.server_filename),1)]),_:2},1024)]),_:1}),i(E,{label:"修改时间"},{default:a(({row:o})=>[l(g(t(U)(o.server_mtime)),1)]),_:1}),i(E,{label:"大小"},{default:a(({row:o})=>[l(g(t(x)(o.size)),1)]),_:1})]),_:1},8,["data"])]),_:1})),[[k,t(Q)]]):Y("",!0)}}}),he=G(W,[["__scopeId","data-v-a8be935c"]]);export{he as default}; 2 | -------------------------------------------------------------------------------- /public/assets/js/ShowFileList-DoTSeEKx.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/ShowFileList-DoTSeEKx.js.gz -------------------------------------------------------------------------------- /public/assets/js/TokenManagement-BJdgmlbt.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/TokenManagement-BJdgmlbt.js.gz -------------------------------------------------------------------------------- /public/assets/js/UserManagement-C-9GJbGk.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/UserManagement-C-9GJbGk.js.gz -------------------------------------------------------------------------------- /public/assets/js/UserView-DXrxeYoX.js: -------------------------------------------------------------------------------- 1 | const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/js/AnnounceDialog-C3AXj005.js","assets/js/element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js","assets/js/@vue_runtime-dom@3.4.32-DNdjNMzo.js","assets/js/@vue_runtime-core@3.4.32-BofAHbgu.js","assets/js/@vue_reactivity@3.4.32-DksAu7zd.js","assets/js/@vue_shared@3.4.32-CaCWPAm8.js","assets/js/lodash-es@4.17.21-BB-zMWwC.js","assets/js/async-validator@4.2.5-DKvM95Vc.js","assets/js/@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js","assets/js/@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js","assets/js/dayjs@1.11.11-Ct2Knyoi.js","assets/js/@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js","assets/js/@ctrl_tinycolor@3.6.1-r5W6hzzQ.js","assets/js/@sxzz_popperjs-es@2.11.7-D9SI2xQl.js","assets/js/normalize-wheel-es@1.2.0-B6fDCfyv.js","assets/css/element-plus@2.7.7_vue@3.4.32_typescript@5.5-YF1DmkJl.css","assets/js/index-DYV93AZk.js","assets/js/pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js","assets/js/vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js","assets/js/axios@1.7.2-B4uVmeYG.js","assets/js/@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js","assets/js/tslib@2.6.3-CPxunF3b.js","assets/js/vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js","assets/css/index-qsVAQOGj.css","assets/js/GetFileList-ClRPbksc.js","assets/js/fileListStore-BL5xDhSX.js","assets/js/copy-By2guqEs.js","assets/js/format-CyW-QbYa.js","assets/js/isMobile-BD0f7XPI.js","assets/js/_plugin-vue_export-helper-DlAUqK2U.js","assets/css/GetFileList-D8J9e0M0.css","assets/js/ShowFileList-DoTSeEKx.js","assets/css/ShowFileList-CbcFgyZ7.css","assets/js/DownloadLinks-0QpbYdeQ.js","assets/js/aria2Store-Eper8YQt.js","assets/js/Aria2Dialog-BoClX_iS.js"])))=>i.map(i=>d[i]); 2 | import{_ as o}from"./index-DYV93AZk.js";import{d as n,c as a,i as t,o as c,X as r}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";import{u as i}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import{_ as d}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";import"./@vue_runtime-dom@3.4.32-DNdjNMzo.js";import"./@vue_shared@3.4.32-CaCWPAm8.js";import"./lodash-es@4.17.21-BB-zMWwC.js";import"./async-validator@4.2.5-DKvM95Vc.js";import"./@vueuse_core@9.13.0_vue@3.4.32_typescript@5.5.3_-DkVRVfGD.js";import"./@vueuse_shared@9.13.0_vue@3.4.32_typescript@5.5.3_-BbpdFR9m.js";import"./dayjs@1.11.11-Ct2Knyoi.js";import"./@element-plus_icons-vue@2.3.1_vue@3.4.32_typescript@5.5.3_-x2o2c_8n.js";import"./@ctrl_tinycolor@3.6.1-r5W6hzzQ.js";import"./@sxzz_popperjs-es@2.11.7-D9SI2xQl.js";import"./normalize-wheel-es@1.2.0-B6fDCfyv.js";import"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import"./vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js";import"./axios@1.7.2-B4uVmeYG.js";import"./@fingerprintjs_fingerprintjs@4.5.1-5RNCfJbQ.js";import"./tslib@2.6.3-CPxunF3b.js";import"./vue-router@4.4.0_vue@3.4.32_typescript@5.5.3_-ByijA4Eg.js";const f={class:"container"},u=n({__name:"UserView",setup(l){const _=r(()=>o(()=>import("./AnnounceDialog-C3AXj005.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]))),e=r(()=>o(()=>import("./GetFileList-ClRPbksc.js"),__vite__mapDeps([24,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,25,16,17,18,19,20,21,22,23,26,27,28,29,30]))),m=r(()=>o(()=>import("./ShowFileList-DoTSeEKx.js"),__vite__mapDeps([31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,27,28,29,32]))),p=r(()=>o(()=>import("./DownloadLinks-0QpbYdeQ.js"),__vite__mapDeps([33,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,34,25,26]))),s=r(()=>o(()=>import("./Aria2Dialog-BoClX_iS.js"),__vite__mapDeps([35,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,34,16,17,18,19,20,21,22,23])));return(E,v)=>(c(),a("div",f,[t(i(_)),t(i(s)),t(i(e)),t(i(m)),t(i(p))]))}}),S=d(u,[["__scopeId","data-v-afbfa6b1"]]);export{S as default}; 3 | -------------------------------------------------------------------------------- /public/assets/js/UserView-DXrxeYoX.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/UserView-DXrxeYoX.js.gz -------------------------------------------------------------------------------- /public/assets/js/_plugin-vue_export-helper-DlAUqK2U.js: -------------------------------------------------------------------------------- 1 | const s=(t,r)=>{const o=t.__vccOpts||t;for(const[c,e]of r)o[c]=e;return o};export{s as _}; 2 | -------------------------------------------------------------------------------- /public/assets/js/aria2Store-Eper8YQt.js: -------------------------------------------------------------------------------- 1 | import{k as e,m as s}from"./index-DYV93AZk.js";import{d as t}from"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import{E as f}from"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";import{r}from"./@vue_reactivity@3.4.32-DksAu7zd.js";const c=t("aria2Store",()=>{const o=r(!1),i=r(e()),a=r(null);return{aria2ConfigDialogVisible:o,aria2ConfigForm:i,aria2ConfigFormRef:a,saveAria2Config:async()=>{!a.value||!await a.value.validate()||(s(i.value),f.success("保存成功"),o.value=!1)}}});export{c as u}; 2 | -------------------------------------------------------------------------------- /public/assets/js/async-validator@4.2.5-DKvM95Vc.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/async-validator@4.2.5-DKvM95Vc.js.gz -------------------------------------------------------------------------------- /public/assets/js/axios@1.7.2-B4uVmeYG.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/axios@1.7.2-B4uVmeYG.js.gz -------------------------------------------------------------------------------- /public/assets/js/changeConfigForm-D___ED7J.js: -------------------------------------------------------------------------------- 1 | import"./index-DYV93AZk.js";import{d as e}from"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import{r as o}from"./@vue_reactivity@3.4.32-DksAu7zd.js";const a=e("changeConfigForm",()=>({changeConfigForm:o({version:"",front_end_version:"",sleep:0,max_once:0,password:"",announce:"",user_agent:"",need_inv_code:!1,whitelist_mode:!1,show_copyright:!1,custom_copyright:"",main_server:"",code:"",parse_mode:0,max_filesize:0,min_single_filesize:0,max_single_filesize:0,token_mode:!1,button_link:"",limit_cn:!1,limit_prov:!1,debug:!1,name:"",show_login_button:!1,token_bind_ip:!1,proxy_server:"",proxy_password:""})}));export{a as u}; 2 | -------------------------------------------------------------------------------- /public/assets/js/copy-By2guqEs.js: -------------------------------------------------------------------------------- 1 | import{E as c}from"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";const r=async(a,t="复制成功")=>{if(navigator.clipboard)try{await navigator.clipboard.writeText(a)}catch{const e=document.createElement("textarea");e.value=a,document.body.appendChild(e),e.select(),document.execCommand("copy"),document.body.removeChild(e)}c({message:t,type:"success"})};export{r as c}; 2 | -------------------------------------------------------------------------------- /public/assets/js/dayjs@1.11.11-Ct2Knyoi.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/dayjs@1.11.11-Ct2Knyoi.js.gz -------------------------------------------------------------------------------- /public/assets/js/element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js.gz -------------------------------------------------------------------------------- /public/assets/js/favicon-BrYC5Vmz.js: -------------------------------------------------------------------------------- 1 | const o="/assets/ico/favicon-fA9CtK1z.ico";export{o as f}; 2 | -------------------------------------------------------------------------------- /public/assets/js/fileListStore-BL5xDhSX.js: -------------------------------------------------------------------------------- 1 | import{u as $,e as D,f as M,h as P,j}from"./index-DYV93AZk.js";import{d as E}from"./pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js";import{E as s}from"./element-plus@2.7.7_vue@3.4.32_typescript@5.5.3_-4orX1JGZ.js";import{r}from"./@vue_reactivity@3.4.32-DksAu7zd.js";const v=$(),A=E("fileListStore",()=>{const l=r(!1),a=r({surl:"",url:"",pwd:"",dir:"/",password:"",token:"",account_ids:""}),g=r(null),F=()=>{const i=a.value.dir.split("/");i.pop();const f=i.join("/");return f===""?"/":f},x=async()=>{if(!(!g.value||!await g.value.validate())){if(a.value.surl==="")return s.error("获取链接surl失败");try{u.value=[],l.value=!0;const i=await D(a.value);n.value=i.data,a.value.dir!=="/"&&n.value.list.unshift({category:-1,fs_id:0,isdir:1,local_ctime:0,local_mtime:0,server_ctime:0,server_mtime:0,size:0,md5:"",path:F(),server_filename:"..",dlink:""}),s.success("获取文件列表成功")}finally{l.value=!1}}},o=r({hit_captcha:!1,vcode_str:"",vcode_img:"",vcode_input:""}),n=r({uk:0,shareid:0,randsk:"",list:[]}),u=r([]),p=r([]),S=async(i,f=!1)=>{if(l.value){s.info("请勿重复点击~");return}const k=v.config.min_single_filesize,L=v.config.max_single_filesize;let c=[];if(i){const e=n.value.list.find(t=>t.fs_id===i);if(!e)s.error("获取文件信息失败");else if(e.sizeL){s.error("文件过大不会被解析!");return}c=[i]}else{let e=u.value.filter(t=>t.isdir!==1);e.length!==u.value.length&&s.error("文件夹不会被解析!"),e=e.filter(t=>t.size>k),e.length!==u.value.length&&s.error("文件过小不会被解析!"),e=e.filter(t=>t.sizet.fs_id)}if(c.length>v.config.max_once){s.error(`一次最多解析${v.config.max_once}个文件`);return}if(c.length===0){s.error("满足要求的文件数量为0");return}let d;try{l.value=!0;const e={uk:n.value.uk,shareid:n.value.shareid,randsk:n.value.randsk,fs_ids:c,password:a.value.password,token:a.value.token,url:a.value.url,surl:a.value.surl,dir:a.value.dir,pwd:a.value.pwd,account_ids:a.value.account_ids};if(o.value.hit_captcha){if(!o.value.vcode_str||!o.value.vcode_input){s.error("请先输入验证码");return}e.vcode_str=o.value.vcode_str,e.vcode_input=o.value.vcode_input}if(d=await M(e),d.data?s.success("解析成功"):(s.success("解析可能失败,请打开控制台查看是否存在报错"),console.log(d)),o.value={hit_captcha:!1,vcode_str:"",vcode_img:"",vcode_input:""},f)return l.value=!1,await _(),d.data.map(t=>({...t,index:0}));w.value=!0,p.value=d.data.map(t=>({...t,index:0}))}catch(e){const{code:t,message:y}=e;if(t&&y&&y.includes("验证码")){const z=await P({password:a.value.password});o.value={hit_captcha:!0,vcode_str:z.data.vcode,vcode_img:z.data.img,vcode_input:""}}}finally{l.value=!1,await _(),await v.getConfig(!1)}},h=r({group_name:"",count:0,size:0}),m=r(""),_=async()=>{try{l.value=!0;const i=await j({token:a.value.token});h.value=i.data,m.value=""}catch(i){m.value=i.message}finally{l.value=!1}},w=r(!1);return{pending:l,fileList:n,getFileList:x,getFileListForm:a,getFileListFormRef:g,selectedRows:u,downloadLinks:p,getDownloadLinks:S,limitForm:h,getLimit:_,limitMessage:m,vcode:o,dialogVisible:w}});export{A as u}; 2 | -------------------------------------------------------------------------------- /public/assets/js/fileListStore-BL5xDhSX.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/fileListStore-BL5xDhSX.js.gz -------------------------------------------------------------------------------- /public/assets/js/format-CyW-QbYa.js: -------------------------------------------------------------------------------- 1 | const n=t=>new Date(t*1e3).toLocaleDateString(void 0,{year:"numeric",month:"long",day:"numeric"}),s=(t,o=2)=>{if(typeof t=="string"&&(t=parseFloat(t)),t===0)return"0 Bytes";const a=1024,r=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"],e=Math.floor(Math.log(t)/Math.log(a));return parseFloat((t/Math.pow(a,e)).toFixed(o))+" "+r[e]};export{n as a,s as f}; 2 | -------------------------------------------------------------------------------- /public/assets/js/index-DYV93AZk.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/index-DYV93AZk.js.gz -------------------------------------------------------------------------------- /public/assets/js/isMobile-BD0f7XPI.js: -------------------------------------------------------------------------------- 1 | const i=()=>/Mobi|Android|iPhone/i.test(navigator.userAgent);export{i}; 2 | -------------------------------------------------------------------------------- /public/assets/js/lodash-es@4.17.21-BB-zMWwC.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/lodash-es@4.17.21-BB-zMWwC.js.gz -------------------------------------------------------------------------------- /public/assets/js/lodash-unified@1.0.3_@types_lodash-es@4.17.12_lodash-es@4.17.21_lodash@4.17.21-l0sNRNKZ.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/assets/js/memoize-one@6.0.0-l0sNRNKZ.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/assets/js/normalize-wheel-es@1.2.0-B6fDCfyv.js: -------------------------------------------------------------------------------- 1 | var N=!1,o,s,f,u,c,b,l,p,w,m,E,v,x,O,X;function a(){if(!N){N=!0;var e=navigator.userAgent,n=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),t=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(v=/\b(iPhone|iP[ao]d)/.exec(e),x=/\b(iP[ao]d)/.exec(e),m=/Android/i.exec(e),O=/FBAN\/\w+;/i.exec(e),X=/Mobile/i.exec(e),E=!!/Win64/.exec(e),n){o=n[1]?parseFloat(n[1]):n[5]?parseFloat(n[5]):NaN,o&&document&&document.documentMode&&(o=document.documentMode);var r=/(?:Trident\/(\d+.\d+))/.exec(e);b=r?parseFloat(r[1])+4:o,s=n[2]?parseFloat(n[2]):NaN,f=n[3]?parseFloat(n[3]):NaN,u=n[4]?parseFloat(n[4]):NaN,u?(n=/(?:Chrome\/(\d+\.\d+))/.exec(e),c=n&&n[1]?parseFloat(n[1]):NaN):c=NaN}else o=s=f=c=u=NaN;if(t){if(t[1]){var i=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);l=i?parseFloat(i[1].replace("_",".")):!0}else l=!1;p=!!t[2],w=!!t[3]}else l=p=w=!1}}var h={ie:function(){return a()||o},ieCompatibilityMode:function(){return a()||b>o},ie64:function(){return h.ie()&&E},firefox:function(){return a()||s},opera:function(){return a()||f},webkit:function(){return a()||u},safari:function(){return h.webkit()},chrome:function(){return a()||c},windows:function(){return a()||p},osx:function(){return a()||l},linux:function(){return a()||w},iphone:function(){return a()||v},mobile:function(){return a()||v||x||m||X},nativeApp:function(){return a()||O},android:function(){return a()||m},ipad:function(){return a()||x}},I=h,d=!!(typeof window<"u"&&window.document&&window.document.createElement),S={canUseDOM:d,canUseWorkers:typeof Worker<"u",canUseEventListeners:d&&!!(window.addEventListener||window.attachEvent),canUseViewport:d&&!!window.screen,isInWorker:!d},A=S,U;A.canUseDOM&&(U=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0);function W(e,n){if(!A.canUseDOM||n&&!("addEventListener"in document))return!1;var t="on"+e,r=t in document;if(!r){var i=document.createElement("div");i.setAttribute(t,"return;"),r=typeof i[t]=="function"}return!r&&U&&e==="wheel"&&(r=document.implementation.hasFeature("Events.wheel","3.0")),r}var k=W,M=10,F=40,D=800;function Y(e){var n=0,t=0,r=0,i=0;return"detail"in e&&(t=e.detail),"wheelDelta"in e&&(t=-e.wheelDelta/120),"wheelDeltaY"in e&&(t=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(n=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(n=t,t=0),r=n*M,i=t*M,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(r=e.deltaX),(r||i)&&e.deltaMode&&(e.deltaMode==1?(r*=F,i*=F):(r*=D,i*=D)),r&&!n&&(n=r<1?-1:1),i&&!t&&(t=i<1?-1:1),{spinX:n,spinY:t,pixelX:r,pixelY:i}}Y.getEventType=function(){return I.firefox()?"DOMMouseScroll":k("wheel")?"wheel":"mousewheel"};var y=Y;/** 2 | * Checks if an event is supported in the current execution environment. 3 | * 4 | * NOTE: This will not work correctly for non-generic events such as `change`, 5 | * `reset`, `load`, `error`, and `select`. 6 | * 7 | * Borrows from Modernizr. 8 | * 9 | * @param {string} eventNameSuffix Event name, e.g. "click". 10 | * @param {?boolean} capture Check if the capture phase is supported. 11 | * @return {boolean} True if the event is supported. 12 | * @internal 13 | * @license Modernizr 3.0.0pre (Custom Build) | MIT 14 | */export{y as Y}; 15 | -------------------------------------------------------------------------------- /public/assets/js/normalize-wheel-es@1.2.0-B6fDCfyv.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/normalize-wheel-es@1.2.0-B6fDCfyv.js.gz -------------------------------------------------------------------------------- /public/assets/js/package-DAW1B3SR.js: -------------------------------------------------------------------------------- 1 | const e="94list-frontend",s="1.3.23",t="module",i={dev:"vite",build:"pnpm type-check & pnpm build-only","remove-css":"tsx ./scripts/remove-css.js","revoer-css":"tsx ./scripts/recover-css.js",preview:"vite preview","build-only":"vite build","type-check":"vue-tsc --build --force",lint:"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",format:"prettier --write src/"},n={"@fingerprintjs/fingerprintjs":"^4.5.1",axios:"^1.7.2","element-plus":"2.7.7",pinia:"^2.1.7",vue:"^3.4.32","vue-demi":"^0.14.8","vue-router":"^4.4.0"},p={"@rushstack/eslint-patch":"^1.10.3","@tsconfig/node20":"^20.1.4","@types/node":"^20.14.11","@vitejs/plugin-vue":"^5.0.5","@vue/eslint-config-prettier":"^9.0.0","@vue/eslint-config-typescript":"^13.0.0","@vue/tsconfig":"^0.5.1","async-validator":"^4.2.5",eslint:"^8.57.0","eslint-plugin-vue":"^9.27.0","npm-run-all2":"^6.2.2",prettier:"^3.3.3","rollup-plugin-visualizer":"^5.12.0",sass:"^1.77.8",tsx:"^4.16.2",typescript:"~5.5.3","unplugin-auto-import":"^0.18.0","unplugin-vue-components":"^0.27.3",vite:"^5.3.4","vite-plugin-cdn-import":"^1.0.1","vite-plugin-compression":"^0.5.1","vue-tsc":"^2.0.26"},r={name:e,version:s,type:t,scripts:i,dependencies:n,devDependencies:p};export{r as default,n as dependencies,p as devDependencies,e as name,i as scripts,t as type,s as version}; 2 | -------------------------------------------------------------------------------- /public/assets/js/package-DAW1B3SR.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/package-DAW1B3SR.js.gz -------------------------------------------------------------------------------- /public/assets/js/pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js: -------------------------------------------------------------------------------- 1 | import{i as Z}from"./vue-demi@0.14.8_vue@3.4.32_typescript@5.5.3_-Dq6ymT-8.js";import{y as V,r as H,m as B,g as G,a as R,c as L,h as D,n as $,v as A,w as T,x as tt}from"./@vue_reactivity@3.4.32-DksAu7zd.js";import{x as et,w as st,W as nt,n as ot,t as ct}from"./@vue_runtime-core@3.4.32-BofAHbgu.js";/*! 2 | * pinia v2.1.7 3 | * (c) 2023 Eduardo San Martin Morote 4 | * @license MIT 5 | */let J;const k=t=>J=t,N=Symbol();function E(t){return t&&typeof t=="object"&&Object.prototype.toString.call(t)==="[object Object]"&&typeof t.toJSON!="function"}var C;(function(t){t.direct="direct",t.patchObject="patch object",t.patchFunction="patch function"})(C||(C={}));function vt(){const t=V(!0),n=t.run(()=>H({}));let s=[],e=[];const r=B({install(u){k(r),r._a=u,u.provide(N,r),u.config.globalProperties.$pinia=r,e.forEach(a=>s.push(a)),e=[]},use(u){return!this._a&&!Z?e.push(u):s.push(u),this},_p:s,_a:null,_e:t,_s:new Map,state:n});return r}const q=()=>{};function F(t,n,s,e=q){t.push(n);const r=()=>{const u=t.indexOf(n);u>-1&&(t.splice(u,1),e())};return!s&&$()&&A(r),r}function P(t,...n){t.slice().forEach(s=>{s(...n)})}const rt=t=>t();function I(t,n){t instanceof Map&&n instanceof Map&&n.forEach((s,e)=>t.set(e,s)),t instanceof Set&&n instanceof Set&&n.forEach(t.add,t);for(const s in n){if(!n.hasOwnProperty(s))continue;const e=n[s],r=t[s];E(r)&&E(e)&&t.hasOwnProperty(s)&&!R(e)&&!L(e)?t[s]=I(r,e):t[s]=e}return t}const ut=Symbol();function ft(t){return!E(t)||!t.hasOwnProperty(ut)}const{assign:y}=Object;function at(t){return!!(R(t)&&t.effect)}function it(t,n,s,e){const{state:r,actions:u,getters:a}=n,f=s.state.value[t];let g;function b(){f||(s.state.value[t]=r?r():{});const v=tt(s.state.value[t]);return y(v,u,Object.keys(a||{}).reduce((m,_)=>(m[_]=B(ct(()=>{k(s);const d=s._s.get(t);return a[_].call(d,d)})),m),{}))}return g=z(t,b,n,s,e,!0),g}function z(t,n,s={},e,r,u){let a;const f=y({actions:{}},s),g={deep:!0};let b,v,m=[],_=[],d;const j=e.state.value[t];!u&&!j&&(e.state.value[t]={}),H({});let W;function O(c){let o;b=v=!1,typeof c=="function"?(c(e.state.value[t]),o={type:C.patchFunction,storeId:t,events:d}):(I(e.state.value[t],c),o={type:C.patchObject,payload:c,storeId:t,events:d});const h=W=Symbol();ot().then(()=>{W===h&&(b=!0)}),v=!0,P(m,o,e.state.value[t])}const K=u?function(){const{state:o}=s,h=o?o():{};this.$patch(S=>{y(S,h)})}:q;function M(){a.stop(),m=[],_=[],e._s.delete(t)}function Q(c,o){return function(){k(e);const h=Array.from(arguments),S=[],x=[];function X(i){S.push(i)}function Y(i){x.push(i)}P(_,{args:h,name:c,store:l,after:X,onError:Y});let p;try{p=o.apply(this&&this.$id===t?this:l,h)}catch(i){throw P(x,i),i}return p instanceof Promise?p.then(i=>(P(S,i),i)).catch(i=>(P(x,i),Promise.reject(i))):(P(S,p),p)}}const U={_p:e,$id:t,$onAction:F.bind(null,_),$patch:O,$reset:K,$subscribe(c,o={}){const h=F(m,c,o.detached,()=>S()),S=a.run(()=>st(()=>e.state.value[t],x=>{(o.flush==="sync"?v:b)&&c({storeId:t,type:C.direct,events:d},x)},y({},g,o)));return h},$dispose:M},l=G(U);e._s.set(t,l);const w=(e._a&&e._a.runWithContext||rt)(()=>e._e.run(()=>(a=V()).run(n)));for(const c in w){const o=w[c];if(R(o)&&!at(o)||L(o))u||(j&&ft(o)&&(R(o)?o.value=j[c]:I(o,j[c])),e.state.value[t][c]=o);else if(typeof o=="function"){const h=Q(c,o);w[c]=h,f.actions[c]=o}}return y(l,w),y(D(l),w),Object.defineProperty(l,"$state",{get:()=>e.state.value[t],set:c=>{O(o=>{y(o,c)})}}),e._p.forEach(c=>{y(l,a.run(()=>c({store:l,app:e._a,pinia:e,options:f})))}),j&&u&&s.hydrate&&s.hydrate(l.$state,j),b=!0,v=!0,l}function St(t,n,s){let e,r;const u=typeof n=="function";typeof t=="string"?(e=t,r=u?s:n):(r=t,e=t.id);function a(f,g){const b=nt();return f=f||(b?et(N,null):null),f&&k(f),f=J,f._s.has(e)||(u?z(e,n,r,f):it(e,r,f)),f._s.get(e)}return a.$id=e,a}function mt(t){{t=D(t);const n={};for(const s in t){const e=t[s];(R(e)||L(e))&&(n[s]=T(t,s))}return n}}export{vt as c,St as d,mt as s}; 6 | -------------------------------------------------------------------------------- /public/assets/js/pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/assets/js/pinia@2.1.7_typescript@5.5.3_vue@3.4.32_typescript@5.5.3_-BSzeUtha.js.gz -------------------------------------------------------------------------------- /public/assets/js/tslib@2.6.3-CPxunF3b.js: -------------------------------------------------------------------------------- 1 | var y=function(){return y=Object.assign||function(u){for(var r,t=1,a=arguments.length;t0&&e[e.length-1])&&(n[0]===6||n[0]===2)){r=0;continue}if(n[0]===3&&(!e||n[1]>e[0]&&n[1] 2 | 3 | 4 | 5 | 6 | 7 | 8 | 94list-laravel 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
35 | 36 | 37 | -------------------------------------------------------------------------------- /public/index.html.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/public/index.html.gz -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | handleRequest(Request::capture()); 18 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /resources/views/App.blade.php: -------------------------------------------------------------------------------- 1 | 2 | {{config('app.name')}} 3 | @php 4 | try { 5 | echo \Illuminate\Support\Facades\File::get(public_path('index.html')); 6 | }catch (Exception $e){ 7 | echo '未获取到页面内容,请检查public目录下是否存在编译后的前端项目!!!'; 8 | } 9 | @endphp -------------------------------------------------------------------------------- /routes/api.php: -------------------------------------------------------------------------------- 1 | group(function () { 19 | Route::prefix("/parse")->middleware("IpFilter")->group(function () { 20 | Route::get("/config", [ParseController::class, "getConfig"]); 21 | Route::get("/limit", [ParseController::class, "checkLimit"]); 22 | Route::prefix("/")->middleware(["NeedPassword"])->group(function () { 23 | Route::post("/get_file_list", [ParseController::class, "getFileList"]); 24 | Route::post("/get_vcode", [ParseController::class, "getVcode"]); 25 | Route::post("/get_download_links", [ParseController::class, "getDownloadLinks"]); 26 | }); 27 | }); 28 | 29 | Route::prefix("/user")->group(function () { 30 | Route::post("/login", [UserController::class, "login"]); 31 | Route::post("/register", [UserController::class, "register"]); 32 | Route::delete("/", [UserController::class, "logout"]); 33 | }); 34 | 35 | Route::prefix("/admin")->middleware("RoleFilter:admin")->group(function () { 36 | Route::pattern("id", "[0-9]+"); 37 | 38 | Route::prefix("/user")->group(function () { 39 | Route::get("/", [UserController::class, "getUsers"]); 40 | Route::post("/", [UserController::class, "addUser"]); 41 | Route::patch("/{id}", [UserController::class, "updateUser"]); 42 | Route::delete("/", [UserController::class, "removeUsers"]); 43 | }); 44 | 45 | Route::prefix("/group")->group(function () { 46 | Route::get("/", [GroupController::class, "getGroups"]); 47 | Route::post("/", [GroupController::class, "addGroup"]); 48 | Route::patch("/{id}", [GroupController::class, "updateGroup"]); 49 | Route::delete("/", [GroupController::class, "removeGroups"]); 50 | }); 51 | 52 | Route::prefix("/record")->group(function () { 53 | Route::get("/", [RecordController::class, "getRecords"]); 54 | Route::get('/count', [RecordController::class, 'getRecordsCount']); 55 | Route::delete("/", [RecordController::class, "removeRecords"]); 56 | }); 57 | 58 | Route::prefix("/account")->group(function () { 59 | Route::get("/", [AccountController::class, "getAccounts"]); 60 | Route::post("/", [AccountController::class, "addAccount"]); 61 | Route::patch("/{id}", [AccountController::class, "updateAccount"]); 62 | Route::patch("/info", [AccountController::class, "updateAccountsInfo"]); 63 | Route::get("/ban", [AccountController::class, "getAccountsBan"]); 64 | Route::patch("/switch", [AccountController::class, "switchAccounts"]); 65 | Route::patch("/ban", [AccountController::class, "switchBanAccounts"]); 66 | Route::delete("/", [AccountController::class, "removeAccounts"]); 67 | }); 68 | 69 | Route::prefix("/inv_code")->group(function () { 70 | Route::get("/", [InvCodeController::class, "getInvCodes"]); 71 | Route::post("/", [InvCodeController::class, "addInvCode"]); 72 | Route::post("/generate", [InvCodeController::class, "generateInvCode"]); 73 | Route::patch("/{id}", [InvCodeController::class, "updateInvCode"]); 74 | Route::delete("/", [InvCodeController::class, "removeInvCodes"]); 75 | }); 76 | 77 | Route::prefix("/ip")->group(function () { 78 | Route::get("/", [IpController::class, "getIps"]); 79 | Route::post("/", [IpController::class, "addIp"]); 80 | Route::patch("/{id}", [IpController::class, "updateIp"]); 81 | Route::delete("/", [IpController::class, "removeIps"]); 82 | }); 83 | 84 | Route::prefix("/token")->group(function () { 85 | Route::get("/", [TokenController::class, "getTokens"]); 86 | Route::post("/", [TokenController::class, "addToken"]); 87 | Route::post("/generate", [TokenController::class, "generateToken"]); 88 | Route::patch("/{id}", [TokenController::class, "updateToken"]); 89 | Route::delete("/", [TokenController::class, "removeTokens"]); 90 | }); 91 | 92 | Route::prefix("/config")->group(function () { 93 | Route::prefix("/main")->group(function () { 94 | Route::get("/", [MainConfigController::class, "getConfig"]); 95 | Route::patch("/", [MainConfigController::class, "updateConfig"]); 96 | Route::post("/testAuth", [MainConfigController::class, "testAuth"]); 97 | }); 98 | 99 | Route::prefix("/mail")->group(function () { 100 | Route::get("/", [MailConfigController::class, "getMailConfig"]); 101 | Route::post("/", [MailConfigController::class, "sendTestMail"]); 102 | Route::patch("/", [MailConfigController::class, "updateMailConfig"]); 103 | }); 104 | }); 105 | }); 106 | }); -------------------------------------------------------------------------------- /routes/console.php: -------------------------------------------------------------------------------- 1 | view("App")) 6 | ->middleware("NeedInstall") 7 | ->where("any", ".*"); 8 | -------------------------------------------------------------------------------- /storage/app/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !public/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /storage/app/public/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/.gitignore: -------------------------------------------------------------------------------- 1 | compiled.php 2 | config.php 3 | down 4 | events.scanned.php 5 | maintenance.php 6 | routes.php 7 | routes.scanned.php 8 | schedule-* 9 | services.json 10 | -------------------------------------------------------------------------------- /storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !data/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /storage/framework/cache/data/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/testing/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /tests/Feature/ExampleTest.php: -------------------------------------------------------------------------------- 1 | get('/'); 5 | 6 | $response->assertStatus(200); 7 | }); 8 | -------------------------------------------------------------------------------- /tests/Pest.php: -------------------------------------------------------------------------------- 1 | in('Feature'); 18 | 19 | /* 20 | |-------------------------------------------------------------------------- 21 | | Expectations 22 | |-------------------------------------------------------------------------- 23 | | 24 | | When you're writing tests, you often need to check that values meet certain conditions. The 25 | | "expect()" function gives you access to a set of "expectations" methods that you can use 26 | | to assert different things. Of course, you may extend the Expectation API at any time. 27 | | 28 | */ 29 | 30 | expect()->extend('toBeOne', function () { 31 | return $this->toBe(1); 32 | }); 33 | 34 | /* 35 | |-------------------------------------------------------------------------- 36 | | Functions 37 | |-------------------------------------------------------------------------- 38 | | 39 | | While Pest is very powerful out-of-the-box, you may have some testing code specific to your 40 | | project that you don't want to repeat in every file. Here you can also expose helpers as 41 | | global functions to help you to reduce the number of lines of code in your test files. 42 | | 43 | */ 44 | 45 | function something() 46 | { 47 | // .. 48 | } 49 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | toBeTrue(); 5 | }); 6 | -------------------------------------------------------------------------------- /vendor.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HkList/HkList-laravel/089d3a81d9c7d075b927e800b40c6dc370f73757/vendor.zip --------------------------------------------------------------------------------