@nger/fk-upload 1.0.201 → 1.0.204

Sign up to get free protection for your applications and to get access to all the features.
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;