@nger/fk-upload 1.0.201 → 1.0.204

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/dist/{templates → controllers}/code.d.ts +0 -0
  2. package/dist/{templates → controllers}/code.js +2 -1
  3. package/dist/controllers/relogin.d.ts +8 -0
  4. package/dist/controllers/relogin.js +42 -0
  5. package/dist/{templates → controllers}/verify.d.ts +0 -0
  6. package/dist/{templates → controllers}/verify.js +0 -0
  7. package/dist/entities/check-task.d.ts +13 -0
  8. package/dist/entities/check-task.js +221 -0
  9. package/dist/entities/download-task.d.ts +23 -0
  10. package/dist/entities/download-task.js +445 -0
  11. package/dist/entities/effect-task.d.ts +12 -0
  12. package/dist/entities/effect-task.js +207 -0
  13. package/dist/entities/fk-account.d.ts +16 -0
  14. package/dist/entities/fk-account.js +295 -0
  15. package/dist/entities/fk-jiqun.d.ts +5 -0
  16. package/dist/entities/fk-jiqun.js +56 -0
  17. package/dist/entities/upload-task.d.ts +15 -0
  18. package/dist/entities/upload-task.js +333 -0
  19. package/dist/entities/w7-account.d.ts +11 -0
  20. package/dist/entities/w7-account.js +126 -0
  21. package/dist/entities/w7.d.ts +10 -0
  22. package/dist/entities/w7.js +107 -0
  23. package/dist/entities/w7_chat_topic.d.ts +9 -0
  24. package/dist/entities/w7_chat_topic.js +58 -0
  25. package/dist/entities/w7_uni_account.d.ts +4 -0
  26. package/dist/entities/w7_uni_account.js +23 -0
  27. package/dist/fk-upload.module.d.ts +5 -0
  28. package/dist/fk-upload.module.js +76 -43
  29. package/dist/main.d.ts +1 -0
  30. package/dist/main.js +18 -29
  31. package/dist/services/check.service.d.ts +6 -0
  32. package/dist/services/check.service.js +32 -0
  33. package/dist/services/client.service.d.ts +6 -0
  34. package/dist/services/client.service.js +29 -0
  35. package/dist/services/download.service.d.ts +15 -0
  36. package/dist/services/download.service.js +139 -0
  37. package/dist/services/effect.service.d.ts +7 -0
  38. package/dist/services/effect.service.js +34 -0
  39. package/dist/services/fk.service.d.ts +24 -0
  40. package/dist/services/fk.service.js +323 -0
  41. package/dist/services/login.service.d.ts +17 -0
  42. package/dist/services/login.service.js +95 -0
  43. package/dist/services/upload.service.d.ts +13 -0
  44. package/dist/services/upload.service.js +100 -0
  45. package/dist/tasks/actions.d.ts +28 -0
  46. package/dist/tasks/actions.js +12 -0
  47. package/dist/{templates/tasks/schedule-task.d.ts → tasks/check-task.d.ts} +3 -5
  48. package/dist/tasks/check-task.js +205 -0
  49. package/dist/tasks/download-continue-task.d.ts +9 -0
  50. package/dist/tasks/download-continue-task.js +127 -0
  51. package/dist/{templates/tasks → tasks}/download-task.d.ts +0 -1
  52. package/dist/tasks/download-task.js +128 -0
  53. package/dist/{templates/tasks → tasks}/effect-task.d.ts +1 -1
  54. package/dist/tasks/effect-task.js +111 -0
  55. package/dist/{templates/tasks → tasks}/providers.d.ts +0 -0
  56. package/dist/{templates/tasks → tasks}/providers.js +11 -5
  57. package/dist/tasks/upload-continue-task.d.ts +8 -0
  58. package/dist/tasks/upload-continue-task.js +114 -0
  59. package/dist/{templates/tasks → tasks}/upload-task.d.ts +0 -0
  60. package/dist/tasks/upload-task.js +114 -0
  61. package/package.json +18 -14
  62. package/pnpm-lock.yaml +36 -1435
  63. package/dist/electon.d.ts +0 -3
  64. package/dist/electon.js +0 -80
  65. package/dist/entities/fk-download-task.entity.d.ts +0 -18
  66. package/dist/entities/fk-download-task.entity.js +0 -142
  67. package/dist/entities/fk-login-cookie.entity.d.ts +0 -7
  68. package/dist/entities/fk-login-cookie.entity.js +0 -46
  69. package/dist/entities/fk-login.entity.d.ts +0 -12
  70. package/dist/entities/fk-login.entity.js +0 -80
  71. package/dist/entities/index.d.ts +0 -3
  72. package/dist/entities/index.js +0 -6
  73. package/dist/login.controller.d.ts +0 -14
  74. package/dist/login.controller.js +0 -197
  75. package/dist/mq-runner.d.ts +0 -5
  76. package/dist/mq-runner.js +0 -19
  77. package/dist/static/task-manage.d.ts +0 -6
  78. package/dist/static/task-manage.js +0 -34
  79. package/dist/templates/add-fk-login.d.ts +0 -12
  80. package/dist/templates/add-fk-login.js +0 -93
  81. package/dist/templates/add-task.d.ts +0 -13
  82. package/dist/templates/add-task.js +0 -78
  83. package/dist/templates/check-upload.d.ts +0 -38
  84. package/dist/templates/check-upload.js +0 -195
  85. package/dist/templates/component.d.ts +0 -10
  86. package/dist/templates/component.js +0 -39
  87. package/dist/templates/error.d.ts +0 -4
  88. package/dist/templates/error.js +0 -27
  89. package/dist/templates/help.d.ts +0 -7
  90. package/dist/templates/help.js +0 -52
  91. package/dist/templates/player.d.ts +0 -4
  92. package/dist/templates/player.js +0 -23
  93. package/dist/templates/setting.d.ts +0 -13
  94. package/dist/templates/setting.js +0 -65
  95. package/dist/templates/task-manage.d.ts +0 -21
  96. package/dist/templates/task-manage.js +0 -314
  97. package/dist/templates/tasks/actions.d.ts +0 -44
  98. package/dist/templates/tasks/actions.js +0 -9
  99. package/dist/templates/tasks/check-task.d.ts +0 -8
  100. package/dist/templates/tasks/check-task.js +0 -89
  101. package/dist/templates/tasks/download-task.js +0 -130
  102. package/dist/templates/tasks/effect-task.js +0 -76
  103. package/dist/templates/tasks/fk.service.d.ts +0 -28
  104. package/dist/templates/tasks/fk.service.js +0 -254
  105. package/dist/templates/tasks/schedule-task.js +0 -94
  106. package/dist/templates/tasks/task.service.d.ts +0 -11
  107. package/dist/templates/tasks/task.service.js +0 -114
  108. package/dist/templates/tasks/upload-task.js +0 -97
  109. package/dist/templates/tasks/yasuo-task.d.ts +0 -0
  110. package/dist/templates/tasks/yasuo-task.js +0 -0
  111. package/dist/templates/upload-task.d.ts +0 -9
  112. package/dist/templates/upload-task.js +0 -141
  113. package/dist/templates/upload.d.ts +0 -16
  114. package/dist/templates/upload.js +0 -232
  115. package/dist/urlSafeBase64Decode.d.ts +0 -3
  116. package/dist/urlSafeBase64Decode.js +0 -32
  117. package/electron/.env +0 -32
  118. package/electron/package.json +0 -31
  119. package/electron/pnpm-lock.yaml +0 -2878
  120. package/fk-upload-pc/.vscode/extensions.json +0 -3
  121. package/fk-upload-pc/README.md +0 -16
  122. package/fk-upload-pc/index.html +0 -13
  123. package/fk-upload-pc/package.json +0 -19
  124. package/fk-upload-pc/pnpm-lock.yaml +0 -489
  125. package/fk-upload-pc/public/favicon.ico +0 -0
  126. package/fk-upload-pc/tsconfig.json +0 -18
  127. package/fk-upload-pc/tsconfig.node.json +0 -8
  128. package/fk-upload-pc/vite.config.ts +0 -7
@@ -1,114 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TaskService = void 0;
4
- const tslib_1 = require("tslib");
5
- const fk_service_1 = require("./fk.service");
6
- const fk_download_task_entity_1 = require("./../../entities/fk-download-task.entity");
7
- const typeorm_1 = require("@nger/typeorm");
8
- const cids_1 = tslib_1.__importDefault(require("cids"));
9
- const fs_extra_1 = require("fs-extra");
10
- const multihashing_async_1 = tslib_1.__importDefault(require("multihashing-async"));
11
- const core_1 = require("@nger/core");
12
- const path_1 = require("path");
13
- const actions_1 = require("./actions");
14
- const rabbitmq_1 = require("@nger/rabbitmq");
15
- let TaskService = class TaskService {
16
- injector;
17
- constructor(injector) {
18
- this.injector = injector;
19
- }
20
- async createEffectTask(filename, uploadUrl, topicId, path) {
21
- const effect = {
22
- filename,
23
- uploadUrl,
24
- topicId,
25
- path
26
- };
27
- const task = new rabbitmq_1.TaskEntity();
28
- task.topic = actions_1.EFFECT_ACTION;
29
- task.data = effect;
30
- return task;
31
- }
32
- async createScheduleTask(name, rule, id) {
33
- const schedule = {
34
- name,
35
- rule
36
- };
37
- const task = new rabbitmq_1.TaskEntity();
38
- if (id)
39
- task.taskId = id;
40
- task.topic = actions_1.SCHEDULE_ACTION;
41
- task.data = schedule;
42
- return task;
43
- }
44
- async createUploadTask(download, total, md5, injector) {
45
- const db = injector.get(typeorm_1.Db);
46
- await db.manager.update(fk_download_task_entity_1.FkDownloadTaskEntity, download.filename, { totalSize: total, fileMd5: md5, status: 1, size: total });
47
- const fk = injector.get(fk_service_1.FkService);
48
- const info = await fk.getUploadInfo(download.loginId, download.filename, md5, total);
49
- if (info) {
50
- const totalChunks = Math.ceil(total / info.splitSize) - 1;
51
- const uploadTask = new rabbitmq_1.TaskEntity();
52
- uploadTask.topic = actions_1.UPLOAD_ACTION;
53
- const data = {
54
- filename: download.filename,
55
- path: download.path,
56
- total: total,
57
- splitSize: info.splitSize,
58
- totalChunks,
59
- uploadUrl: info.uploadUrl,
60
- cookies: info.cookies,
61
- topicId: download.topicId,
62
- token: info.token,
63
- aid: info.aid,
64
- folderId: info.uploadGroupId,
65
- fileMd5: md5,
66
- start: info.uploadedSize,
67
- loginId: download.loginId,
68
- index: Math.ceil(info.uploadedSize / info.splitSize)
69
- };
70
- uploadTask.data = data;
71
- return uploadTask;
72
- }
73
- throw new Error(`get upload info fail`);
74
- }
75
- async createDownLoadTask(url, loginId, topicId) {
76
- const hash = await (0, multihashing_async_1.default)(Buffer.from(url), 'sha1', 16);
77
- const cid = new cids_1.default(1, 'raw', hash, 'base64');
78
- let filename = encodeURIComponent(cid.toString('base64'));
79
- const _url = new URL(url);
80
- const filePath = _url.pathname;
81
- let ext = (0, path_1.extname)(filePath);
82
- if (ext.length < 5) {
83
- filename += ext === '.' ? '.mp4' : ext;
84
- }
85
- else if (filename.indexOf('.jpg')) {
86
- filename += '.jpg';
87
- }
88
- else if (filename.indexOf('.png')) {
89
- filename += '.png';
90
- }
91
- else if (filename.indexOf('.mp4')) {
92
- filename += '.mp4';
93
- }
94
- const root = this.injector.get(core_1.APP_ROOT);
95
- (0, fs_extra_1.ensureDirSync)((0, path_1.join)(root, 'attachments/fk-upload'));
96
- const path = (0, path_1.join)('attachments/fk-upload', filename);
97
- const download = {
98
- filename: filename,
99
- path: path,
100
- url,
101
- topicId,
102
- loginId
103
- };
104
- const task = new rabbitmq_1.TaskEntity();
105
- task.topic = actions_1.DOWNLOAD_ACTION;
106
- task.data = download;
107
- return task;
108
- }
109
- };
110
- TaskService = tslib_1.__decorate([
111
- (0, core_1.Injectable)(),
112
- tslib_1.__metadata("design:paramtypes", [core_1.Injector])
113
- ], TaskService);
114
- exports.TaskService = TaskService;
@@ -1,97 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UploadTask = void 0;
4
- const rabbitmq_1 = require("@nger/rabbitmq");
5
- const core_1 = require("@nger/core");
6
- const actions_1 = require("./actions");
7
- const fk_service_1 = require("./fk.service");
8
- const task_service_1 = require("./task.service");
9
- const typeorm_1 = require("@nger/typeorm");
10
- const entities_1 = require("../../entities");
11
- const fs_1 = require("fs");
12
- const path_1 = require("path");
13
- class UploadTask extends rabbitmq_1.Task {
14
- constructor() {
15
- super(actions_1.UPLOAD_ACTION);
16
- }
17
- getLocalSize(path) {
18
- try {
19
- const stat = (0, fs_1.statSync)(path);
20
- return stat.size;
21
- }
22
- catch (e) {
23
- return 0;
24
- }
25
- }
26
- errorCount = 0;
27
- async handle(injector, next) {
28
- const task = injector.get(rabbitmq_1.DATA);
29
- const root = injector.get(core_1.APP_ROOT);
30
- const filePath = (0, path_1.join)(root, task.path);
31
- const complete = injector.get(rabbitmq_1.COMPLETE);
32
- const fk = injector.get(fk_service_1.FkService);
33
- const taskService = injector.get(task_service_1.TaskService);
34
- const manager = injector.get(rabbitmq_1.TaskManager);
35
- const db = injector.get(typeorm_1.Db);
36
- const fail = injector.get(rabbitmq_1.FAIL);
37
- // check file size
38
- const old = await db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename: task.filename } });
39
- // not exist
40
- if (!old) {
41
- await complete();
42
- return next && next();
43
- }
44
- if (!(0, fs_1.existsSync)(filePath)) {
45
- setTimeout(() => {
46
- fail();
47
- }, 1000);
48
- return next && next();
49
- }
50
- // > 1G give up
51
- if (task.total >= 1024 * 1024 * 1024) {
52
- await complete();
53
- return next && next();
54
- }
55
- const cloudSize = await fk.getSize(old.url);
56
- const localSize = fk.getLocalSize(filePath);
57
- if (cloudSize != localSize) {
58
- // not my task
59
- await db.manager.update(entities_1.FkDownloadTaskEntity, task.filename, { status: 0 });
60
- const download = await taskService.createDownLoadTask(old.url, old.loginId, old.topicId);
61
- await manager.send(download);
62
- await complete();
63
- return next && next();
64
- }
65
- console.log(`receive upload task`, { filename: task.filename, status: old.status });
66
- if (old.status == 1) {
67
- // upload
68
- await fk.startUploadFile(task).then(async (res) => {
69
- // create effect task
70
- console.log(`upload success`, res.filename);
71
- await db.manager.update(entities_1.FkDownloadTaskEntity, task.filename, { status: 2, uploadUrl: task.uploadUrl, uploadSize: task.total, uploadStatus: 1 });
72
- const effectTask = await taskService.createEffectTask(task.filename, task.uploadUrl, task.topicId, task.path);
73
- await manager.send(effectTask);
74
- await complete();
75
- }).catch(async (e) => {
76
- console.log(`upload error ${this.errorCount}`, e.message);
77
- if (e.message === 'to big') {
78
- await db.manager.update(entities_1.FkDownloadTaskEntity, task.filename, { isBigFile: true });
79
- return complete();
80
- }
81
- if (this.errorCount > 10) {
82
- this.errorCount = 0;
83
- }
84
- this.errorCount += 1;
85
- fail();
86
- return next && next();
87
- });
88
- }
89
- else {
90
- // check
91
- await complete();
92
- }
93
- if (next)
94
- await next();
95
- }
96
- }
97
- exports.UploadTask = UploadTask;
File without changes
File without changes
@@ -1,9 +0,0 @@
1
- import { Db } from '@nger/typeorm';
2
- export declare class UploadTaskController {
3
- private db;
4
- getUploadUrl(token: any, forceDirect?: boolean): string;
5
- constructor(db: Db);
6
- uploadTask(filename: string): Promise<{
7
- msg: string;
8
- }>;
9
- }
@@ -1,141 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UploadTaskController = void 0;
4
- const tslib_1 = require("tslib");
5
- const core_1 = require("@nger/core");
6
- const http_1 = require("@nger/http");
7
- const typeorm_1 = require("@nger/typeorm");
8
- const entities_1 = require("../entities");
9
- const form_data_1 = tslib_1.__importDefault(require("form-data"));
10
- const axios_1 = tslib_1.__importDefault(require("axios"));
11
- const fs_1 = require("fs");
12
- const path_1 = require("path");
13
- let UploadTaskController = class UploadTaskController {
14
- db;
15
- getUploadUrl(token, forceDirect = true) {
16
- if (forceDirect) {
17
- return `https://${token.url}/${token.visitType}/${token.app}/upload?cmd=${token.cmd}&token=${token.token}`;
18
- }
19
- else {
20
- return `https://${token.url}/${token.visitType}/${token.app}/advance?cmd=${token.cmd}&token=${token.token}`;
21
- }
22
- }
23
- constructor(db) {
24
- this.db = db;
25
- }
26
- async uploadTask(filename) {
27
- const task = await this.db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename } });
28
- if (task) {
29
- if (task.status === 0) {
30
- return {
31
- msg: 'downloading'
32
- };
33
- }
34
- if (task.status === 2) {
35
- return {
36
- msg: 'uploaded'
37
- };
38
- }
39
- const loginEntity = await this.db.manager.findOne(entities_1.FkLoginEntity, { where: { fkLoginId: task.loginId } });
40
- const cookies = await this.db.manager.find(entities_1.FkLoginCookieEntity, { where: { fkLoginId: task.loginId } });
41
- const cookie = cookies.map(cookie => `${cookie.key}=${cookie.value}`).join(';');
42
- // 00 take token
43
- const url = `https://i.vip.webportal.top/`;
44
- const iVipWebPortal = await axios_1.default.get(url, {
45
- headers: {
46
- Cookie: cookie
47
- }
48
- }).then(res => res.data);
49
- const items = iVipWebPortal.match(/<meta id='_TOKEN' value='(.*?)'\/>/);
50
- let token = ``;
51
- if (items && items.length === 2) {
52
- token = items[1];
53
- }
54
- if (token.length > 0) {
55
- // 01
56
- const url = `https://smr00.vip.webportal.top/cn/api/manage/advanceUpload/genAccessKey?_v=1651232099799&_TOKEN=${token}`;
57
- const accessKey = await axios_1.default.get(url).then(res => res.data);
58
- if (accessKey.success) {
59
- const accessTokenString = decode(accessKey.accessKey);
60
- if (accessTokenString) {
61
- const accessToken = JSON.parse(accessTokenString);
62
- const ext = (0, path_1.extname)(filename);
63
- const uploadUrl = this.getUploadUrl(accessToken, ['jpeg', 'jpg', 'png', 'svg'].includes(ext));
64
- const fileStream = (0, fs_1.createReadStream)(task.path, {});
65
- let length = 0;
66
- let size = 0;
67
- let index = 0;
68
- fileStream.on('data', (chunk) => {
69
- const totalChunks = (task.totalSize - length) / size;
70
- length += chunk.length;
71
- size = chunk.length;
72
- index += 1;
73
- const complete = length >= task.totalSize;
74
- const data = new form_data_1.default();
75
- data.append('ctrl', fileStream);
76
- data.append('isFreeVer', 'false');
77
- data.append('aid', loginEntity.aid);
78
- data.append('folderId', loginEntity.uploadGroupId);
79
- data.append('fileName', task.filename);
80
- // chunk
81
- data.append(`totalSize`, task.totalSize);
82
- data.append(`fileMd5`, task.fileMd5);
83
- data.append('index', index);
84
- data.append('chunkSize', chunk.length);
85
- data.append('totalChunks', totalChunks);
86
- data.append(`complete`, complete);
87
- const bssInfo = {
88
- fromSite: true, siteId: 0, groupId: 0, fileSizeLimit: 1024
89
- };
90
- data.append('bssInfo', JSON.stringify(bssInfo));
91
- const headers = data.getHeaders();
92
- axios_1.default.post(uploadUrl, data, {
93
- headers: {
94
- ...headers,
95
- Cookie: cookie
96
- },
97
- onUploadProgress: (upload) => {
98
- debugger;
99
- }
100
- }).then(res => res.data);
101
- });
102
- }
103
- }
104
- }
105
- return { msg: `error` };
106
- }
107
- }
108
- };
109
- tslib_1.__decorate([
110
- (0, http_1.Get)('upload-task'),
111
- tslib_1.__param(0, (0, http_1.Query)('filename')),
112
- tslib_1.__metadata("design:type", Function),
113
- tslib_1.__metadata("design:paramtypes", [String]),
114
- tslib_1.__metadata("design:returntype", Promise)
115
- ], UploadTaskController.prototype, "uploadTask", null);
116
- UploadTaskController = tslib_1.__decorate([
117
- (0, core_1.Controller)(`@nger/fk-upload`),
118
- tslib_1.__metadata("design:paramtypes", [typeorm_1.Db])
119
- ], UploadTaskController);
120
- exports.UploadTaskController = UploadTaskController;
121
- function decode(base64Str) {
122
- if (!base64Str)
123
- return;
124
- const t = base64Str.replace(/_/g, "/").replace(/-/g, "+");
125
- const f = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
126
- let l = 0;
127
- let p = 0;
128
- let h = [];
129
- do {
130
- const o = f.indexOf(t.charAt(l++));
131
- const u = f.indexOf(t.charAt(l++));
132
- const a = f.indexOf(t.charAt(l++));
133
- const c = f.indexOf(t.charAt(l++));
134
- const s = o << 18 | u << 12 | a << 6 | c;
135
- const e = s >> 16 & 255;
136
- const r = s >> 8 & 255;
137
- const n = 255 & s;
138
- h[p++] = 64 === a ? String.fromCharCode(e) : 64 === c ? String.fromCharCode(e, r) : String.fromCharCode(e, r, n);
139
- } while (l < t.length);
140
- return h.join('');
141
- }
@@ -1,16 +0,0 @@
1
- /// <reference types="react" />
2
- import { Db } from '@nger/typeorm';
3
- import { Context } from 'koa';
4
- export declare class UploadController {
5
- private db;
6
- constructor(db: Db);
7
- upload(): JSX.Element;
8
- postUpload(file: any, loginId: string, ctx: Context): Promise<any>;
9
- preview(src: string): JSX.Element;
10
- downloadFile(cloudUrl: string): Promise<{
11
- path: string;
12
- filename: string;
13
- }>;
14
- uploadCloud(loginId: string, cloudUrl: string, ctx: Context): Promise<any>;
15
- getUploadUrl(token: any): string;
16
- }
@@ -1,232 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UploadController = void 0;
4
- const tslib_1 = require("tslib");
5
- const core_1 = require("@nger/core");
6
- const http_1 = require("@nger/http");
7
- const form_data_1 = tslib_1.__importDefault(require("form-data"));
8
- const axios_1 = tslib_1.__importDefault(require("axios"));
9
- const typeorm_1 = require("@nger/typeorm");
10
- const entities_1 = require("../entities");
11
- const fs_1 = require("fs");
12
- const path_1 = require("path");
13
- const url_1 = require("url");
14
- const fs_extra_1 = require("fs-extra");
15
- const request_1 = tslib_1.__importDefault(require("request"));
16
- const component_1 = require("./component");
17
- const react_1 = tslib_1.__importDefault(require("react"));
18
- let UploadController = class UploadController {
19
- db;
20
- constructor(db) {
21
- this.db = db;
22
- }
23
- upload() {
24
- return react_1.default.createElement(component_1.Nav, { active: -1 },
25
- react_1.default.createElement("form", { action: "", method: "post", encType: 'multipart/form-data' },
26
- react_1.default.createElement("div", null,
27
- react_1.default.createElement("input", { className: 'form-control', type: "file", name: "file" })),
28
- react_1.default.createElement("div", { style: { marginTop: "20px" } },
29
- react_1.default.createElement("button", { className: "btn btn-primary", type: "submit" }, "\u63D0\u4EA4"))));
30
- }
31
- async postUpload(file, loginId, ctx) {
32
- const loginEntity = await this.db.manager.findOne(entities_1.FkLoginEntity, { where: { fkLoginId: Number(loginId) } });
33
- const cookies = await this.db.manager.find(entities_1.FkLoginCookieEntity, { where: { fkLoginId: Number(loginId) } });
34
- const cookie = cookies.map(cookie => `${cookie.key}=${cookie.value}`).join(';');
35
- // 00 take token
36
- const url = `https://i.vip.webportal.top/`;
37
- const iVipWebPortal = await axios_1.default.get(url, {
38
- headers: {
39
- Cookie: cookie
40
- }
41
- }).then(res => res.data);
42
- const items = iVipWebPortal.match(/<meta id='_TOKEN' value='(.*?)'\/>/);
43
- let token = ``;
44
- if (items && items.length === 2) {
45
- token = items[1];
46
- }
47
- if (token.length > 0) {
48
- // 01
49
- const url = `https://smr00.vip.webportal.top/cn/api/manage/advanceUpload/genAccessKey?_v=1651232099799&_TOKEN=${token}`;
50
- const accessKey = await axios_1.default.get(url).then(res => res.data);
51
- if (accessKey.success) {
52
- const accessTokenString = decode(accessKey.accessKey);
53
- if (accessTokenString) {
54
- const accessToken = JSON.parse(accessTokenString);
55
- const uploadUrl = this.getUploadUrl(accessToken);
56
- const data = new form_data_1.default();
57
- const fileStream = (0, fs_1.createReadStream)(file.path);
58
- data.append('ctrl', fileStream);
59
- data.append('isFreeVer', 'false');
60
- data.append('aid', loginEntity.aid);
61
- data.append('folderId', loginEntity.uploadGroupId);
62
- data.append('fileName', file.name);
63
- const bssInfo = {
64
- fromSite: true, siteId: 0, groupId: 0, fileSizeLimit: 1024
65
- };
66
- data.append('bssInfo', JSON.stringify(bssInfo));
67
- const headers = data.getHeaders();
68
- const res = await axios_1.default.post(uploadUrl, data, {
69
- headers: {
70
- ...headers,
71
- Cookie: cookie
72
- }
73
- }).then(res => res.data);
74
- if (res.data) {
75
- const data = res.data;
76
- const src = data.downUrl;
77
- ctx.redirect('/@nger/fk-upload/preview?src=https://' + src);
78
- return;
79
- }
80
- if (res.msg) {
81
- return res.msg;
82
- }
83
- }
84
- }
85
- }
86
- return `error`;
87
- }
88
- preview(src) {
89
- return react_1.default.createElement(component_1.Nav, { active: -1 },
90
- react_1.default.createElement("div", { className: "card", style: { width: '300px', marginTop: '10px' } },
91
- react_1.default.createElement("img", { src: src, style: { height: '300px' }, className: "card-img-top" }),
92
- react_1.default.createElement("div", { className: "card-body" },
93
- react_1.default.createElement("div", { className: "card-title" },
94
- react_1.default.createElement("p", null, src)))));
95
- }
96
- downloadFile(cloudUrl) {
97
- return new Promise((resolve, reject) => {
98
- const url = new url_1.URL(cloudUrl);
99
- const list = url.pathname.split('/');
100
- const filename = list.pop();
101
- const req = request_1.default.get(cloudUrl);
102
- (0, fs_extra_1.ensureDirSync)((0, path_1.join)(__dirname, 'dist'));
103
- const file = (0, path_1.join)(__dirname, 'dist', filename);
104
- const writeStream = (0, fs_1.createWriteStream)(file);
105
- req.pipe(writeStream);
106
- req.on('end', () => {
107
- resolve({
108
- path: file,
109
- filename
110
- });
111
- });
112
- });
113
- }
114
- async uploadCloud(loginId, cloudUrl, ctx) {
115
- const loginEntity = await this.db.manager.findOne(entities_1.FkLoginEntity, { where: { fkLoginId: Number(loginId) } });
116
- const cookies = await this.db.manager.find(entities_1.FkLoginCookieEntity, { where: { fkLoginId: Number(loginId) } });
117
- const cookie = cookies.map(cookie => `${cookie.key}=${cookie.value}`).join(';');
118
- // 00 take token
119
- const url = `https://i.vip.webportal.top/`;
120
- const iVipWebPortal = await axios_1.default.get(url, {
121
- headers: {
122
- Cookie: cookie
123
- }
124
- }).then(res => res.data);
125
- const items = iVipWebPortal.match(/<meta id='_TOKEN' value='(.*?)'\/>/);
126
- let token = ``;
127
- if (items && items.length === 2) {
128
- token = items[1];
129
- }
130
- if (token.length > 0) {
131
- // 01
132
- const url = `https://smr00.vip.webportal.top/cn/api/manage/advanceUpload/genAccessKey?_v=1651232099799&_TOKEN=${token}`;
133
- const accessKey = await axios_1.default.get(url).then(res => res.data);
134
- if (accessKey.success) {
135
- const accessTokenString = decode(accessKey.accessKey);
136
- if (accessTokenString) {
137
- const accessToken = JSON.parse(accessTokenString);
138
- const uploadUrl = this.getUploadUrl(accessToken);
139
- const data = new form_data_1.default();
140
- const file = await this.downloadFile(cloudUrl);
141
- const fileStream = (0, fs_1.createReadStream)(file.path);
142
- data.append('ctrl', fileStream);
143
- data.append('isFreeVer', 'false');
144
- data.append('aid', loginEntity.aid);
145
- data.append('folderId', loginEntity.uploadGroupId);
146
- data.append('fileName', file.filename);
147
- const bssInfo = {
148
- fromSite: true, siteId: 0, groupId: 0, fileSizeLimit: 1024
149
- };
150
- data.append('bssInfo', JSON.stringify(bssInfo));
151
- const headers = data.getHeaders();
152
- const res = await axios_1.default.post(uploadUrl, data, {
153
- headers: {
154
- ...headers,
155
- Cookie: cookie
156
- }
157
- }).then(res => res.data);
158
- if (res.data) {
159
- const data = res.data;
160
- const src = data.downUrl;
161
- ctx.redirect('/@nger/fk-upload/preview?src=https://' + src);
162
- return;
163
- }
164
- if (res.msg) {
165
- return res.msg;
166
- }
167
- }
168
- }
169
- }
170
- return `error`;
171
- }
172
- getUploadUrl(token) {
173
- return `https://${token.url}/${token.visitType}/${token.app}/upload?cmd=${token.cmd}&token=${token.token}`;
174
- }
175
- };
176
- tslib_1.__decorate([
177
- (0, http_1.Get)('upload'),
178
- tslib_1.__metadata("design:type", Function),
179
- tslib_1.__metadata("design:paramtypes", []),
180
- tslib_1.__metadata("design:returntype", void 0)
181
- ], UploadController.prototype, "upload", null);
182
- tslib_1.__decorate([
183
- (0, http_1.Post)('upload'),
184
- tslib_1.__param(0, (0, http_1.File)('file')),
185
- tslib_1.__param(1, (0, http_1.Query)('loginId')),
186
- tslib_1.__param(2, (0, core_1.Inject)(http_1.CONTEXT)),
187
- tslib_1.__metadata("design:type", Function),
188
- tslib_1.__metadata("design:paramtypes", [Object, String, Object]),
189
- tslib_1.__metadata("design:returntype", Promise)
190
- ], UploadController.prototype, "postUpload", null);
191
- tslib_1.__decorate([
192
- (0, http_1.Get)('preview'),
193
- tslib_1.__param(0, (0, http_1.Query)(`src`)),
194
- tslib_1.__metadata("design:type", Function),
195
- tslib_1.__metadata("design:paramtypes", [String]),
196
- tslib_1.__metadata("design:returntype", void 0)
197
- ], UploadController.prototype, "preview", null);
198
- tslib_1.__decorate([
199
- (0, http_1.Get)('upload_cloud'),
200
- tslib_1.__param(0, (0, http_1.Query)('loginId')),
201
- tslib_1.__param(1, (0, http_1.Query)('cloudUrl')),
202
- tslib_1.__param(2, (0, core_1.Inject)(http_1.CONTEXT)),
203
- tslib_1.__metadata("design:type", Function),
204
- tslib_1.__metadata("design:paramtypes", [String, String, Object]),
205
- tslib_1.__metadata("design:returntype", Promise)
206
- ], UploadController.prototype, "uploadCloud", null);
207
- UploadController = tslib_1.__decorate([
208
- (0, core_1.Controller)('@nger/fk-upload'),
209
- tslib_1.__metadata("design:paramtypes", [typeorm_1.Db])
210
- ], UploadController);
211
- exports.UploadController = UploadController;
212
- function decode(base64Str) {
213
- if (!base64Str)
214
- return;
215
- const t = base64Str.replace(/_/g, "/").replace(/-/g, "+");
216
- const f = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
217
- let l = 0;
218
- let p = 0;
219
- let h = [];
220
- do {
221
- const o = f.indexOf(t.charAt(l++));
222
- const u = f.indexOf(t.charAt(l++));
223
- const a = f.indexOf(t.charAt(l++));
224
- const c = f.indexOf(t.charAt(l++));
225
- const s = o << 18 | u << 12 | a << 6 | c;
226
- const e = s >> 16 & 255;
227
- const r = s >> 8 & 255;
228
- const n = 255 & s;
229
- h[p++] = 64 === a ? String.fromCharCode(e) : 64 === c ? String.fromCharCode(e, r) : String.fromCharCode(e, r, n);
230
- } while (l < t.length);
231
- return h.join('');
232
- }
@@ -1,3 +0,0 @@
1
- export declare class UrlSafeBase64 {
2
- decode(base64Str: string): string | void;
3
- }
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UrlSafeBase64 = void 0;
4
- const tslib_1 = require("tslib");
5
- const core_1 = require("@nger/core");
6
- let UrlSafeBase64 = class UrlSafeBase64 {
7
- decode(base64Str) {
8
- if (!base64Str)
9
- return;
10
- const t = base64Str.replace(/_/g, "/").replace(/-/g, "+");
11
- const f = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
12
- let l = 0;
13
- let p = 0;
14
- let h = [];
15
- do {
16
- const o = f.indexOf(t.charAt(l++));
17
- const u = f.indexOf(t.charAt(l++));
18
- const a = f.indexOf(t.charAt(l++));
19
- const c = f.indexOf(t.charAt(l++));
20
- const s = o << 18 | u << 12 | a << 6 | c;
21
- const e = s >> 16 & 255;
22
- const r = s >> 8 & 255;
23
- const n = 255 & s;
24
- h[p++] = 64 === a ? String.fromCharCode(e) : 64 === c ? String.fromCharCode(e, r) : String.fromCharCode(e, r, n);
25
- } while (l < t.length);
26
- return h.join('');
27
- }
28
- };
29
- UrlSafeBase64 = tslib_1.__decorate([
30
- (0, core_1.Injectable)()
31
- ], UrlSafeBase64);
32
- exports.UrlSafeBase64 = UrlSafeBase64;