├── .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
--------------------------------------------------------------------------------