create-ssnode-cli 0.2.2 → 0.2.3
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.
- package/package.json +1 -1
- package/templates/backend/config/config.develop.yaml +6 -4
- package/templates/backend/data/template.dev.sqlite-shm +0 -0
- package/templates/backend/data/template.dev.sqlite-wal +0 -0
- package/templates/backend/dist/app.module.js +85 -1
- package/templates/backend/dist/app.module.js.map +1 -1
- package/templates/backend/dist/common/all-exceptions.filter.js +47 -1
- package/templates/backend/dist/common/all-exceptions.filter.js.map +1 -1
- package/templates/backend/dist/common/app-crypto.js +119 -1
- package/templates/backend/dist/common/app-crypto.js.map +1 -1
- package/templates/backend/dist/common/app-sign.guard.js +72 -1
- package/templates/backend/dist/common/app-sign.guard.js.map +1 -1
- package/templates/backend/dist/common/app-sign.module.js +20 -1
- package/templates/backend/dist/common/app-sign.module.js.map +1 -1
- package/templates/backend/dist/common/response.js +23 -1
- package/templates/backend/dist/common/response.js.map +1 -1
- package/templates/backend/dist/common/throttle.guard.js +42 -1
- package/templates/backend/dist/common/throttle.guard.js.map +1 -1
- package/templates/backend/dist/common/transform.interceptor.js +28 -1
- package/templates/backend/dist/common/transform.interceptor.js.map +1 -1
- package/templates/backend/dist/config/config.interface.js +2 -1
- package/templates/backend/dist/config/config.interface.js.map +1 -1
- package/templates/backend/dist/config/configuration.js +91 -1
- package/templates/backend/dist/config/configuration.js.map +1 -1
- package/templates/backend/dist/database/migrations/0001-init.migration.js +69 -1
- package/templates/backend/dist/database/migrations/0001-init.migration.js.map +1 -1
- package/templates/backend/dist/database/sqlite.config.js +32 -1
- package/templates/backend/dist/database/sqlite.config.js.map +1 -1
- package/templates/backend/dist/entities/audit-log.entity.js +49 -1
- package/templates/backend/dist/entities/audit-log.entity.js.map +1 -1
- package/templates/backend/dist/entities/image.entity.js +50 -1
- package/templates/backend/dist/entities/image.entity.js.map +1 -1
- package/templates/backend/dist/entities/page-data.entity.js +60 -1
- package/templates/backend/dist/entities/page-data.entity.js.map +1 -1
- package/templates/backend/dist/entities/screen-config.entity.js +74 -1
- package/templates/backend/dist/entities/screen-config.entity.js.map +1 -1
- package/templates/backend/dist/entities/user.entity.js +59 -1
- package/templates/backend/dist/entities/user.entity.js.map +1 -1
- package/templates/backend/dist/main.js +56 -1
- package/templates/backend/dist/main.js.map +1 -1
- package/templates/backend/dist/modules/audit/audit.controller.js +51 -1
- package/templates/backend/dist/modules/audit/audit.controller.js.map +1 -1
- package/templates/backend/dist/modules/audit/audit.module.js +25 -1
- package/templates/backend/dist/modules/audit/audit.module.js.map +1 -1
- package/templates/backend/dist/modules/audit/audit.service.js +57 -1
- package/templates/backend/dist/modules/audit/audit.service.js.map +1 -1
- package/templates/backend/dist/modules/auth/auth.controller.js +74 -1
- package/templates/backend/dist/modules/auth/auth.controller.js.map +1 -1
- package/templates/backend/dist/modules/auth/auth.module.js +45 -1
- package/templates/backend/dist/modules/auth/auth.module.js.map +1 -1
- package/templates/backend/dist/modules/auth/auth.service.js +151 -1
- package/templates/backend/dist/modules/auth/auth.service.js.map +1 -1
- package/templates/backend/dist/modules/auth/captcha.service.js +56 -1
- package/templates/backend/dist/modules/auth/captcha.service.js.map +1 -1
- package/templates/backend/dist/modules/auth/jwt-auth.guard.js +17 -1
- package/templates/backend/dist/modules/auth/jwt-auth.guard.js.map +1 -1
- package/templates/backend/dist/modules/auth/jwt.strategy.js +37 -1
- package/templates/backend/dist/modules/auth/jwt.strategy.js.map +1 -1
- package/templates/backend/dist/modules/image/image.controller.js +75 -1
- package/templates/backend/dist/modules/image/image.controller.js.map +1 -1
- package/templates/backend/dist/modules/image/image.module.js +26 -1
- package/templates/backend/dist/modules/image/image.module.js.map +1 -1
- package/templates/backend/dist/modules/image/image.service.js +94 -1
- package/templates/backend/dist/modules/image/image.service.js.map +1 -1
- package/templates/backend/dist/modules/ops/backend-version.probe.js +58 -1
- package/templates/backend/dist/modules/ops/backend-version.probe.js.map +1 -1
- package/templates/backend/dist/modules/ops/ops-probe.interface.js +4 -1
- package/templates/backend/dist/modules/ops/ops-probe.interface.js.map +1 -1
- package/templates/backend/dist/modules/ops/ops.controller.js +52 -1
- package/templates/backend/dist/modules/ops/ops.controller.js.map +1 -1
- package/templates/backend/dist/modules/ops/ops.module.js +39 -1
- package/templates/backend/dist/modules/ops/ops.module.js.map +1 -1
- package/templates/backend/dist/modules/ops/ops.service.js +72 -1
- package/templates/backend/dist/modules/ops/ops.service.js.map +1 -1
- package/templates/backend/dist/modules/ops/sqlite-backup-list.probe.js +105 -1
- package/templates/backend/dist/modules/ops/sqlite-backup-list.probe.js.map +1 -1
- package/templates/backend/dist/modules/ops/sqlite-backup-log.probe.js +67 -1
- package/templates/backend/dist/modules/ops/sqlite-backup-log.probe.js.map +1 -1
- package/templates/backend/dist/modules/ops/sqlite-backup.probe.js +115 -1
- package/templates/backend/dist/modules/ops/sqlite-backup.probe.js.map +1 -1
- package/templates/backend/dist/modules/ops/version.controller.js +52 -1
- package/templates/backend/dist/modules/ops/version.controller.js.map +1 -1
- package/templates/backend/dist/modules/page-data/page-data.controller.js +109 -1
- package/templates/backend/dist/modules/page-data/page-data.controller.js.map +1 -1
- package/templates/backend/dist/modules/page-data/page-data.module.js +25 -1
- package/templates/backend/dist/modules/page-data/page-data.module.js.map +1 -1
- package/templates/backend/dist/modules/page-data/page-data.service.js +69 -1
- package/templates/backend/dist/modules/page-data/page-data.service.js.map +1 -1
- package/templates/backend/dist/modules/screen-config/screen-config.controller.js +61 -1
- package/templates/backend/dist/modules/screen-config/screen-config.controller.js.map +1 -1
- package/templates/backend/dist/modules/screen-config/screen-config.module.js +25 -1
- package/templates/backend/dist/modules/screen-config/screen-config.module.js.map +1 -1
- package/templates/backend/dist/modules/screen-config/screen-config.service.js +41 -1
- package/templates/backend/dist/modules/screen-config/screen-config.service.js.map +1 -1
- package/templates/backend/dist/modules/upload/upload.controller.js +65 -1
- package/templates/backend/dist/modules/upload/upload.controller.js.map +1 -1
- package/templates/backend/dist/modules/upload/upload.module.js +22 -1
- package/templates/backend/dist/modules/upload/upload.module.js.map +1 -1
- package/templates/backend/dist/modules/upload/upload.service.js +75 -1
- package/templates/backend/dist/modules/upload/upload.service.js.map +1 -1
- package/templates/backend/dist/modules/user/user.controller.js +149 -1
- package/templates/backend/dist/modules/user/user.controller.js.map +1 -1
- package/templates/backend/dist/modules/user/user.module.js +26 -1
- package/templates/backend/dist/modules/user/user.module.js.map +1 -1
- package/templates/backend/dist/modules/user/user.service.js +249 -1
- package/templates/backend/dist/modules/user/user.service.js.map +1 -1
- package/templates/backend/dist/modules/websocket/websocket.gateway.js +33 -1
- package/templates/backend/dist/modules/websocket/websocket.gateway.js.map +1 -1
- package/templates/backend/dist/modules/websocket/websocket.module.js +19 -1
- package/templates/backend/dist/modules/websocket/websocket.module.js.map +1 -1
- package/templates/backend/dist/tsconfig.build.tsbuildinfo +1 -1
- package/templates/backend/package.json +1 -1
- package/templates/backend/src/modules/auth/captcha.service.ts +6 -5
- package/templates/web/dist/assets/{AuthLayout-bcf98efb.js → AuthLayout-f1e8d110.js} +1 -1
- package/templates/web/dist/assets/{AuthLayout-legacy-6e7a8ae1.js → AuthLayout-legacy-f871651c.js} +1 -1
- package/templates/web/dist/assets/{Background-eb77ef54.js → Background-955d549f.js} +1 -1
- package/templates/web/dist/assets/{Background-legacy-50457007.js → Background-legacy-fbad6e76.js} +1 -1
- package/templates/web/dist/assets/{Screen-318c3fc2.js → Screen-b14b0813.js} +1 -1
- package/templates/web/dist/assets/{Screen-legacy-af123b0f.js → Screen-legacy-154c8ee6.js} +1 -1
- package/templates/web/dist/assets/{api-beff4a3e.js → api-4d80e36e.js} +1 -1
- package/templates/web/dist/assets/{api-legacy-9fe41d4b.js → api-legacy-054fd569.js} +1 -1
- package/templates/web/dist/assets/{component-89b5253e.js → component-9d9f33fa.js} +1 -1
- package/templates/web/dist/assets/{component-legacy-8c5a28ef.js → component-legacy-4445386a.js} +1 -1
- package/templates/web/dist/assets/{index-a79e448b.js → index-107a0e80.js} +1 -1
- package/templates/web/dist/assets/{index-b60badf7.js → index-5afb70be.js} +1 -1
- package/templates/web/dist/assets/{index-cba19800.js → index-7b807c2d.js} +1 -1
- package/templates/web/dist/assets/{index-86214b19.js → index-ab64cd34.js} +1 -1
- package/templates/web/dist/assets/{index-7277cbfb.js → index-d8bfffb3.js} +1 -1
- package/templates/web/dist/assets/{index-d70eb540.js → index-db169639.js} +1 -1
- package/templates/web/dist/assets/{index-bd4ed808.js → index-e08dc495.js} +1 -1
- package/templates/web/dist/assets/index-e31f4b7c.js +1 -0
- package/templates/web/dist/assets/{index-legacy-783129a7.js → index-legacy-5cf7be80.js} +1 -1
- package/templates/web/dist/assets/index-legacy-6f112001.js +1 -0
- package/templates/web/dist/assets/{index-legacy-b3bd40c1.js → index-legacy-91e012ac.js} +1 -1
- package/templates/web/dist/assets/{index-legacy-0da8de82.js → index-legacy-aa61cf72.js} +1 -1
- package/templates/web/dist/assets/{index-legacy-06483318.js → index-legacy-afba9135.js} +1 -1
- package/templates/web/dist/assets/{index-legacy-d510e318.js → index-legacy-da51c769.js} +1 -1
- package/templates/web/dist/assets/{index-legacy-993ef005.js → index-legacy-eec0ca6e.js} +1 -1
- package/templates/web/dist/assets/{index-legacy-feb54578.js → index-legacy-f732db29.js} +1 -1
- package/templates/web/dist/index.html +2 -2
- package/templates/web/node_modules/.vite/deps/@ant-design_icons.js +4 -4
- package/templates/web/node_modules/.vite/deps/_metadata.json +57 -57
- package/templates/web/node_modules/.vite/deps/antd.js +6 -6
- package/templates/web/node_modules/.vite/deps/antd_locale_zh_CN.js +1 -1
- package/templates/web/node_modules/.vite/deps/axios.js +2793 -1104
- package/templates/web/node_modules/.vite/deps/axios.js.map +4 -4
- package/templates/web/node_modules/.vite/deps/{chunk-FADIZLW4.js → chunk-3EE4ABTD.js} +3 -3
- package/templates/web/node_modules/.vite/deps/{chunk-5JEEJ3ET.js → chunk-3KXTUEQ5.js} +2 -2
- package/templates/web/node_modules/.vite/deps/{chunk-DSEUD2VO.js → chunk-622VOE6C.js} +28 -237
- package/templates/web/node_modules/.vite/deps/chunk-622VOE6C.js.map +7 -0
- package/templates/web/node_modules/.vite/deps/{chunk-PCLWPLHU.js → chunk-AX2S74EI.js} +4 -4
- package/templates/web/node_modules/.vite/deps/{chunk-UX3FVGZU.js → chunk-DXNXWKU4.js} +1670 -1309
- package/templates/web/node_modules/.vite/deps/chunk-DXNXWKU4.js.map +7 -0
- package/templates/web/node_modules/.vite/deps/{chunk-OTDKR2HU.js → chunk-GT2UP6M4.js} +2 -2
- package/templates/web/node_modules/.vite/deps/{chunk-5WWUZCGV.js → chunk-HM4MQYWN.js} +10 -2
- package/templates/web/node_modules/.vite/deps/{chunk-Z4XTF2JV.js → chunk-NDUAOA7M.js} +2 -2
- package/templates/web/node_modules/.vite/deps/{chunk-PIIG5WB7.js → chunk-OKY2XKJX.js} +14406 -12416
- package/templates/web/node_modules/.vite/deps/chunk-OKY2XKJX.js.map +7 -0
- package/templates/web/node_modules/.vite/deps/{chunk-UIM57Q7Y.js → chunk-SC6QO7UO.js} +6086 -4354
- package/templates/web/node_modules/.vite/deps/chunk-SC6QO7UO.js.map +7 -0
- package/templates/web/node_modules/.vite/deps/classnames.js +2 -2
- package/templates/web/node_modules/.vite/deps/dayjs.js +2 -2
- package/templates/web/node_modules/.vite/deps/dayjs_locale_zh-cn.js +2 -2
- package/templates/web/node_modules/.vite/deps/echarts_charts.js +7172 -6102
- package/templates/web/node_modules/.vite/deps/echarts_charts.js.map +4 -4
- package/templates/web/node_modules/.vite/deps/echarts_components.js +3363 -1326
- package/templates/web/node_modules/.vite/deps/echarts_components.js.map +4 -4
- package/templates/web/node_modules/.vite/deps/echarts_core.js +57 -42
- package/templates/web/node_modules/.vite/deps/echarts_core.js.map +3 -3
- package/templates/web/node_modules/.vite/deps/echarts_renderers.js +432 -334
- package/templates/web/node_modules/.vite/deps/echarts_renderers.js.map +4 -4
- package/templates/web/node_modules/.vite/deps/exceljs.js +25762 -0
- package/templates/web/node_modules/.vite/deps/exceljs.js.map +7 -0
- package/templates/web/node_modules/.vite/deps/lodash.js +28 -10
- package/templates/web/node_modules/.vite/deps/lodash.js.map +3 -3
- package/templates/web/node_modules/.vite/deps/path-browserify.js +1 -1
- package/templates/web/node_modules/.vite/deps/prop-types.js +1 -1
- package/templates/web/node_modules/.vite/deps/qs.js +405 -138
- package/templates/web/node_modules/.vite/deps/qs.js.map +4 -4
- package/templates/web/node_modules/.vite/deps/react-dom.js +3 -3
- package/templates/web/node_modules/.vite/deps/react-dom_client.js +3 -3
- package/templates/web/node_modules/.vite/deps/react-router-dom.js +3445 -1283
- package/templates/web/node_modules/.vite/deps/react-router-dom.js.map +4 -4
- package/templates/web/node_modules/.vite/deps/react.js +2 -2
- package/templates/web/node_modules/.vite/deps/react_jsx-dev-runtime.js +2 -2
- package/templates/web/node_modules/.vite/deps/recoil.js +3 -3
- package/templates/web/src/pages/Login/index.tsx +8 -1
- package/templates/web/src/services/api.ts +6 -1
- package/templates/web/vite.config.js +5 -5
- package/templates/web/dist/assets/index-e6071630.js +0 -1
- package/templates/web/dist/assets/index-legacy-028ed5d5.js +0 -1
- package/templates/web/node_modules/.vite/deps/chunk-DSEUD2VO.js.map +0 -7
- package/templates/web/node_modules/.vite/deps/chunk-PIIG5WB7.js.map +0 -7
- package/templates/web/node_modules/.vite/deps/chunk-UIM57Q7Y.js.map +0 -7
- package/templates/web/node_modules/.vite/deps/chunk-UX3FVGZU.js.map +0 -7
- package/templates/web/node_modules/.vite/deps/xlsx.js +0 -33827
- package/templates/web/node_modules/.vite/deps/xlsx.js.map +0 -7
- /package/templates/web/node_modules/.vite/deps/{chunk-FADIZLW4.js.map → chunk-3EE4ABTD.js.map} +0 -0
- /package/templates/web/node_modules/.vite/deps/{chunk-5JEEJ3ET.js.map → chunk-3KXTUEQ5.js.map} +0 -0
- /package/templates/web/node_modules/.vite/deps/{chunk-PCLWPLHU.js.map → chunk-AX2S74EI.js.map} +0 -0
- /package/templates/web/node_modules/.vite/deps/{chunk-OTDKR2HU.js.map → chunk-GT2UP6M4.js.map} +0 -0
- /package/templates/web/node_modules/.vite/deps/{chunk-5WWUZCGV.js.map → chunk-HM4MQYWN.js.map} +0 -0
- /package/templates/web/node_modules/.vite/deps/{chunk-Z4XTF2JV.js.map → chunk-NDUAOA7M.js.map} +0 -0
|
@@ -1,2 +1,152 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var AuthService_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.AuthService = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const jwt_1 = require("@nestjs/jwt");
|
|
19
|
+
const config_1 = require("@nestjs/config");
|
|
20
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
21
|
+
const typeorm_2 = require("typeorm");
|
|
22
|
+
const bcrypt = require("bcryptjs");
|
|
23
|
+
const crypto = require("crypto");
|
|
24
|
+
const user_entity_1 = require("../../entities/user.entity");
|
|
25
|
+
const captcha_service_1 = require("./captcha.service");
|
|
26
|
+
const audit_service_1 = require("../audit/audit.service");
|
|
27
|
+
const app_crypto_1 = require("../../common/app-crypto");
|
|
28
|
+
let AuthService = AuthService_1 = class AuthService {
|
|
29
|
+
userRepo;
|
|
30
|
+
jwtService;
|
|
31
|
+
config;
|
|
32
|
+
captchaService;
|
|
33
|
+
auditService;
|
|
34
|
+
logger = new common_1.Logger(AuthService_1.name);
|
|
35
|
+
constructor(userRepo, jwtService, config, captchaService, auditService) {
|
|
36
|
+
this.userRepo = userRepo;
|
|
37
|
+
this.jwtService = jwtService;
|
|
38
|
+
this.config = config;
|
|
39
|
+
this.captchaService = captchaService;
|
|
40
|
+
this.auditService = auditService;
|
|
41
|
+
}
|
|
42
|
+
async login(params, ip) {
|
|
43
|
+
if (!this.captchaService.verify(params.captchaId, params.verifycode)) {
|
|
44
|
+
await this.auditService.record({
|
|
45
|
+
actorName: params.username || 'unknown',
|
|
46
|
+
action: 'login_fail',
|
|
47
|
+
detail: { reason: '验证码错误或已过期' },
|
|
48
|
+
ip
|
|
49
|
+
});
|
|
50
|
+
throw new common_1.UnauthorizedException('验证码错误或已过期');
|
|
51
|
+
}
|
|
52
|
+
const user = await this.userRepo.findOne({
|
|
53
|
+
where: { username: params.username }
|
|
54
|
+
});
|
|
55
|
+
if (!user) {
|
|
56
|
+
await this.auditService.record({
|
|
57
|
+
actorName: params.username,
|
|
58
|
+
action: 'login_fail',
|
|
59
|
+
detail: { reason: '用户不存在' },
|
|
60
|
+
ip
|
|
61
|
+
});
|
|
62
|
+
throw new common_1.UnauthorizedException('用户名或密码错误');
|
|
63
|
+
}
|
|
64
|
+
const hashed = user.password.startsWith('$2');
|
|
65
|
+
const ok = hashed && (await bcrypt.compare(params.password, user.password));
|
|
66
|
+
if (!ok) {
|
|
67
|
+
if (!hashed) {
|
|
68
|
+
this.logger.warn(`用户 ${user.username} 密码非 bcrypt 哈希,请管理员重置`);
|
|
69
|
+
}
|
|
70
|
+
await this.auditService.record({
|
|
71
|
+
actorName: params.username,
|
|
72
|
+
action: 'login_fail',
|
|
73
|
+
detail: { reason: '密码错误' },
|
|
74
|
+
ip
|
|
75
|
+
});
|
|
76
|
+
throw new common_1.UnauthorizedException('用户名或密码错误');
|
|
77
|
+
}
|
|
78
|
+
if (user.status !== '1') {
|
|
79
|
+
await this.auditService.record({
|
|
80
|
+
actorName: params.username,
|
|
81
|
+
action: 'login_fail',
|
|
82
|
+
detail: { reason: '账号已禁用' },
|
|
83
|
+
ip
|
|
84
|
+
});
|
|
85
|
+
throw new common_1.UnauthorizedException('账号已禁用');
|
|
86
|
+
}
|
|
87
|
+
const payload = { sub: user.id, username: user.username, role: user.role };
|
|
88
|
+
await this.auditService.record({
|
|
89
|
+
actorName: user.username,
|
|
90
|
+
action: 'login_success',
|
|
91
|
+
detail: { role: user.role },
|
|
92
|
+
ip
|
|
93
|
+
});
|
|
94
|
+
return this.jwtService.sign(payload);
|
|
95
|
+
}
|
|
96
|
+
async ssoLogin(params, ip) {
|
|
97
|
+
const ssoCfg = this.config.get('sso');
|
|
98
|
+
const username = params?.username || '';
|
|
99
|
+
if (!ssoCfg.enabled) {
|
|
100
|
+
throw new common_1.NotFoundException('接口不存在');
|
|
101
|
+
}
|
|
102
|
+
const fail = async (reason) => {
|
|
103
|
+
await this.auditService.record({
|
|
104
|
+
actorName: username || 'sso',
|
|
105
|
+
action: 'login_fail',
|
|
106
|
+
detail: { reason },
|
|
107
|
+
ip
|
|
108
|
+
});
|
|
109
|
+
throw new common_1.UnauthorizedException(reason);
|
|
110
|
+
};
|
|
111
|
+
const tsNum = Number(params.ts);
|
|
112
|
+
const nowSec = Math.floor(Date.now() / 1000);
|
|
113
|
+
if (!username || !params.ts || !params.sign) {
|
|
114
|
+
await fail('缺少单点登录票据参数');
|
|
115
|
+
}
|
|
116
|
+
if (!Number.isFinite(tsNum) || tsNum <= 0) {
|
|
117
|
+
await fail('票据时间戳非法');
|
|
118
|
+
}
|
|
119
|
+
if (Math.abs(nowSec - tsNum) > ssoCfg.tsWindow) {
|
|
120
|
+
await fail('票据已过期');
|
|
121
|
+
}
|
|
122
|
+
const expected = crypto
|
|
123
|
+
.createHmac('sha256', ssoCfg.ticketKey)
|
|
124
|
+
.update(`${username}\n${params.ts}`, 'utf8')
|
|
125
|
+
.digest('hex');
|
|
126
|
+
if (!(0, app_crypto_1.safeEqualHex)(expected, String(params.sign).toLowerCase())) {
|
|
127
|
+
await fail('票据校验失败');
|
|
128
|
+
}
|
|
129
|
+
await this.auditService.record({
|
|
130
|
+
actorName: username,
|
|
131
|
+
action: 'login_success',
|
|
132
|
+
detail: { sso: true },
|
|
133
|
+
ip
|
|
134
|
+
});
|
|
135
|
+
const payload = { sub: 0, username, role: 'web' };
|
|
136
|
+
return this.jwtService.sign(payload);
|
|
137
|
+
}
|
|
138
|
+
hashPassword(plain) {
|
|
139
|
+
return bcrypt.hashSync(plain, 10);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
exports.AuthService = AuthService;
|
|
143
|
+
exports.AuthService = AuthService = AuthService_1 = __decorate([
|
|
144
|
+
(0, common_1.Injectable)(),
|
|
145
|
+
__param(0, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)),
|
|
146
|
+
__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
147
|
+
jwt_1.JwtService,
|
|
148
|
+
config_1.ConfigService,
|
|
149
|
+
captcha_service_1.CaptchaService,
|
|
150
|
+
audit_service_1.AuditService])
|
|
151
|
+
], AuthService);
|
|
2
152
|
//# sourceMappingURL=auth.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../src/modules/auth/auth.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,57 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.CaptchaService = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const svgCaptcha = require("svg-captcha");
|
|
12
|
+
let CaptchaService = class CaptchaService {
|
|
13
|
+
store = new Map();
|
|
14
|
+
ttl = 5 * 60 * 1000;
|
|
15
|
+
generate() {
|
|
16
|
+
const cap = svgCaptcha.create({
|
|
17
|
+
size: 5,
|
|
18
|
+
noise: 5,
|
|
19
|
+
color: true,
|
|
20
|
+
background: '#f8fafc',
|
|
21
|
+
ignoreChars: '0oO1lIi'
|
|
22
|
+
});
|
|
23
|
+
const captchaId = this.randId();
|
|
24
|
+
this.store.set(captchaId, {
|
|
25
|
+
text: String(cap.text).toLowerCase(),
|
|
26
|
+
expire: Date.now() + this.ttl
|
|
27
|
+
});
|
|
28
|
+
this.gc();
|
|
29
|
+
return { captchaId, svg: cap.data };
|
|
30
|
+
}
|
|
31
|
+
verify(captchaId, input) {
|
|
32
|
+
if (!captchaId || !input)
|
|
33
|
+
return false;
|
|
34
|
+
const entry = this.store.get(captchaId);
|
|
35
|
+
if (!entry)
|
|
36
|
+
return false;
|
|
37
|
+
this.store.delete(captchaId);
|
|
38
|
+
if (Date.now() > entry.expire)
|
|
39
|
+
return false;
|
|
40
|
+
return entry.text === input.toLowerCase();
|
|
41
|
+
}
|
|
42
|
+
randId() {
|
|
43
|
+
return `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 10)}`;
|
|
44
|
+
}
|
|
45
|
+
gc() {
|
|
46
|
+
const now = Date.now();
|
|
47
|
+
for (const [k, v] of this.store) {
|
|
48
|
+
if (v.expire < now)
|
|
49
|
+
this.store.delete(k);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
exports.CaptchaService = CaptchaService;
|
|
54
|
+
exports.CaptchaService = CaptchaService = __decorate([
|
|
55
|
+
(0, common_1.Injectable)()
|
|
56
|
+
], CaptchaService);
|
|
2
57
|
//# sourceMappingURL=captcha.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"version":3,"file":"captcha.service.js","sourceRoot":"","sources":["../../../src/modules/auth/captcha.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAmE;AACnE,0CAA0C;AAQnC,IAAM,cAAc,GAApB,MAAM,cAAc;IAEjB,KAAK,GAAG,IAAI,GAAG,EAA4C,CAAC;IACnD,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAGrC,QAAQ;QACN,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;YAC5B,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,SAAS;YACrB,WAAW,EAAE,SAAS;SACvB,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE;YACxB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;YACpC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAGD,MAAM,CAAC,SAAiB,EAAE,KAAa;QACrC,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC5C,OAAO,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC;IAEO,MAAM;QACZ,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC;IAEO,EAAE;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;CACF,CAAA;AA7CY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;GACA,cAAc,CA6C1B"}
|
|
@@ -1,2 +1,18 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.JwtAuthGuard = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const passport_1 = require("@nestjs/passport");
|
|
12
|
+
let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
|
|
13
|
+
};
|
|
14
|
+
exports.JwtAuthGuard = JwtAuthGuard;
|
|
15
|
+
exports.JwtAuthGuard = JwtAuthGuard = __decorate([
|
|
16
|
+
(0, common_1.Injectable)()
|
|
17
|
+
], JwtAuthGuard);
|
|
2
18
|
//# sourceMappingURL=jwt-auth.guard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"version":3,"file":"jwt-auth.guard.js","sourceRoot":"","sources":["../../../src/modules/auth/jwt-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,+CAA6C;AAOtC,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,IAAA,oBAAS,EAAC,KAAK,CAAC;CAAG,CAAA;AAAxC,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;GACA,YAAY,CAA4B"}
|
|
@@ -1,2 +1,38 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.JwtStrategy = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const config_1 = require("@nestjs/config");
|
|
15
|
+
const passport_1 = require("@nestjs/passport");
|
|
16
|
+
const passport_jwt_1 = require("passport-jwt");
|
|
17
|
+
let JwtStrategy = class JwtStrategy extends (0, passport_1.PassportStrategy)(passport_jwt_1.Strategy) {
|
|
18
|
+
constructor(config) {
|
|
19
|
+
super({
|
|
20
|
+
jwtFromRequest: passport_jwt_1.ExtractJwt.fromAuthHeaderAsBearerToken(),
|
|
21
|
+
ignoreExpiration: false,
|
|
22
|
+
secretOrKey: config.get('jwt').secret
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
validate(payload) {
|
|
26
|
+
return {
|
|
27
|
+
id: payload.sub,
|
|
28
|
+
username: payload.username,
|
|
29
|
+
role: payload.role
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
exports.JwtStrategy = JwtStrategy;
|
|
34
|
+
exports.JwtStrategy = JwtStrategy = __decorate([
|
|
35
|
+
(0, common_1.Injectable)(),
|
|
36
|
+
__metadata("design:paramtypes", [config_1.ConfigService])
|
|
37
|
+
], JwtStrategy);
|
|
2
38
|
//# sourceMappingURL=jwt.strategy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"version":3,"file":"jwt.strategy.js","sourceRoot":"","sources":["../../../src/modules/auth/jwt.strategy.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAA+C;AAC/C,+CAAoD;AACpD,+CAAoD;AAQ7C,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,IAAA,2BAAgB,EAAC,uBAAQ,CAAC;IACzD,YAAY,MAAgC;QAC1C,KAAK,CAAC;YACJ,cAAc,EAAE,yBAAU,CAAC,2BAA2B,EAAE;YACxD,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,MAAM,CAAC,GAAG,CAAmB,KAAK,CAAC,CAAC,MAAM;SACxD,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,OAAwD;QAC/D,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,GAAG;YACf,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC;IACJ,CAAC;CACF,CAAA;AAhBY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;qCAES,sBAAa;GADtB,WAAW,CAgBvB"}
|
|
@@ -1,2 +1,76 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ImageController = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
18
|
+
const jwt_auth_guard_1 = require("../auth/jwt-auth.guard");
|
|
19
|
+
const image_service_1 = require("./image.service");
|
|
20
|
+
let ImageController = class ImageController {
|
|
21
|
+
service;
|
|
22
|
+
constructor(service) {
|
|
23
|
+
this.service = service;
|
|
24
|
+
}
|
|
25
|
+
getList(query) {
|
|
26
|
+
return this.service.getList(query);
|
|
27
|
+
}
|
|
28
|
+
add(body, req) {
|
|
29
|
+
return this.service.add(body, { username: req?.user?.username || '' });
|
|
30
|
+
}
|
|
31
|
+
edit(body, req) {
|
|
32
|
+
return this.service.update(body, { username: req?.user?.username || '' });
|
|
33
|
+
}
|
|
34
|
+
deleteById(id, req) {
|
|
35
|
+
return this.service.deleteById(Number(id), { username: req?.user?.username || '' });
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
exports.ImageController = ImageController;
|
|
39
|
+
__decorate([
|
|
40
|
+
(0, common_1.Get)('getList'),
|
|
41
|
+
__param(0, (0, common_1.Query)()),
|
|
42
|
+
__metadata("design:type", Function),
|
|
43
|
+
__metadata("design:paramtypes", [Object]),
|
|
44
|
+
__metadata("design:returntype", void 0)
|
|
45
|
+
], ImageController.prototype, "getList", null);
|
|
46
|
+
__decorate([
|
|
47
|
+
(0, common_1.Post)('add'),
|
|
48
|
+
__param(0, (0, common_1.Body)()),
|
|
49
|
+
__param(1, (0, common_1.Request)()),
|
|
50
|
+
__metadata("design:type", Function),
|
|
51
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
52
|
+
__metadata("design:returntype", void 0)
|
|
53
|
+
], ImageController.prototype, "add", null);
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, common_1.Put)('edit'),
|
|
56
|
+
__param(0, (0, common_1.Body)()),
|
|
57
|
+
__param(1, (0, common_1.Request)()),
|
|
58
|
+
__metadata("design:type", Function),
|
|
59
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
60
|
+
__metadata("design:returntype", void 0)
|
|
61
|
+
], ImageController.prototype, "edit", null);
|
|
62
|
+
__decorate([
|
|
63
|
+
(0, common_1.Delete)('deleteById'),
|
|
64
|
+
__param(0, (0, common_1.Query)('id')),
|
|
65
|
+
__param(1, (0, common_1.Request)()),
|
|
66
|
+
__metadata("design:type", Function),
|
|
67
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
68
|
+
__metadata("design:returntype", void 0)
|
|
69
|
+
], ImageController.prototype, "deleteById", null);
|
|
70
|
+
exports.ImageController = ImageController = __decorate([
|
|
71
|
+
(0, swagger_1.ApiTags)('image 图片管理'),
|
|
72
|
+
(0, common_1.UseGuards)(jwt_auth_guard_1.JwtAuthGuard),
|
|
73
|
+
(0, common_1.Controller)('image'),
|
|
74
|
+
__metadata("design:paramtypes", [image_service_1.ImageService])
|
|
75
|
+
], ImageController);
|
|
2
76
|
//# sourceMappingURL=image.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"version":3,"file":"image.controller.js","sourceRoot":"","sources":["../../../src/modules/image/image.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAqG;AACrG,6CAA0C;AAC1C,2DAAsD;AACtD,mDAA+C;AAUxC,IAAM,eAAe,GAArB,MAAM,eAAe;IACG;IAA7B,YAA6B,OAAqB;QAArB,YAAO,GAAP,OAAO,CAAc;IAAG,CAAC;IAItD,OAAO,CAAU,KAA0D;QACzE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAID,GAAG,CAAS,IAAkD,EAAa,GAAQ;QACjF,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IAID,IAAI,CAAS,IAAkC,EAAa,GAAQ;QAClE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;IAID,UAAU,CAAc,EAAU,EAAa,GAAQ;QACrD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC;CACF,CAAA;AA1BY,0CAAe;AAK1B;IADC,IAAA,YAAG,EAAC,SAAS,CAAC;IACN,WAAA,IAAA,cAAK,GAAE,CAAA;;;;8CAEf;AAID;IADC,IAAA,aAAI,EAAC,KAAK,CAAC;IACP,WAAA,IAAA,aAAI,GAAE,CAAA;IAAsD,WAAA,IAAA,gBAAO,GAAE,CAAA;;;;0CAEzE;AAID;IADC,IAAA,YAAG,EAAC,MAAM,CAAC;IACN,WAAA,IAAA,aAAI,GAAE,CAAA;IAAsC,WAAA,IAAA,gBAAO,GAAE,CAAA;;;;2CAE1D;AAID;IADC,IAAA,eAAM,EAAC,YAAY,CAAC;IACT,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,gBAAO,GAAE,CAAA;;;;iDAE7C;0BAzBU,eAAe;IAH3B,IAAA,iBAAO,EAAC,YAAY,CAAC;IACrB,IAAA,kBAAS,EAAC,6BAAY,CAAC;IACvB,IAAA,mBAAU,EAAC,OAAO,CAAC;qCAEoB,4BAAY;GADvC,eAAe,CA0B3B"}
|
|
@@ -1,2 +1,27 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ImageModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
12
|
+
const image_entity_1 = require("../../entities/image.entity");
|
|
13
|
+
const image_controller_1 = require("./image.controller");
|
|
14
|
+
const image_service_1 = require("./image.service");
|
|
15
|
+
const upload_module_1 = require("../upload/upload.module");
|
|
16
|
+
const audit_module_1 = require("../audit/audit.module");
|
|
17
|
+
let ImageModule = class ImageModule {
|
|
18
|
+
};
|
|
19
|
+
exports.ImageModule = ImageModule;
|
|
20
|
+
exports.ImageModule = ImageModule = __decorate([
|
|
21
|
+
(0, common_1.Module)({
|
|
22
|
+
imports: [typeorm_1.TypeOrmModule.forFeature([image_entity_1.ImageEntity]), upload_module_1.UploadModule, audit_module_1.AuditModule],
|
|
23
|
+
controllers: [image_controller_1.ImageController],
|
|
24
|
+
providers: [image_service_1.ImageService]
|
|
25
|
+
})
|
|
26
|
+
], ImageModule);
|
|
2
27
|
//# sourceMappingURL=image.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"version":3,"file":"image.module.js","sourceRoot":"","sources":["../../../src/modules/image/image.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,8DAA0D;AAC1D,yDAAqD;AACrD,mDAA+C;AAC/C,2DAAuD;AACvD,wDAAoD;AAO7C,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IALvB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,CAAC,0BAAW,CAAC,CAAC,EAAE,4BAAY,EAAE,0BAAW,CAAC;QAC7E,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,SAAS,EAAE,CAAC,4BAAY,CAAC;KAC1B,CAAC;GACW,WAAW,CAAG"}
|
|
@@ -1,2 +1,95 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ImageService = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
18
|
+
const typeorm_2 = require("typeorm");
|
|
19
|
+
const image_entity_1 = require("../../entities/image.entity");
|
|
20
|
+
const upload_service_1 = require("../upload/upload.service");
|
|
21
|
+
const audit_service_1 = require("../audit/audit.service");
|
|
22
|
+
let ImageService = class ImageService {
|
|
23
|
+
repo;
|
|
24
|
+
uploadService;
|
|
25
|
+
auditService;
|
|
26
|
+
constructor(repo, uploadService, auditService) {
|
|
27
|
+
this.repo = repo;
|
|
28
|
+
this.uploadService = uploadService;
|
|
29
|
+
this.auditService = auditService;
|
|
30
|
+
}
|
|
31
|
+
async getList(params) {
|
|
32
|
+
const page = Number(params.page) || 1;
|
|
33
|
+
const pageSize = Number(params.pageSize) || 12;
|
|
34
|
+
const qb = this.repo.createQueryBuilder('image');
|
|
35
|
+
if (params.name) {
|
|
36
|
+
qb.andWhere('image.name LIKE :kw', { kw: `%${params.name}%` });
|
|
37
|
+
}
|
|
38
|
+
qb.orderBy('image.updateTime', 'DESC')
|
|
39
|
+
.skip((page - 1) * pageSize)
|
|
40
|
+
.take(pageSize);
|
|
41
|
+
const [list, total] = await qb.getManyAndCount();
|
|
42
|
+
return { list, total };
|
|
43
|
+
}
|
|
44
|
+
async add(params, operator) {
|
|
45
|
+
if (!params.name || !params.url) {
|
|
46
|
+
throw new Error('缺少 name 或 url');
|
|
47
|
+
}
|
|
48
|
+
const saved = await this.repo.save(this.repo.create({
|
|
49
|
+
name: params.name,
|
|
50
|
+
url: params.url,
|
|
51
|
+
size: Number(params.size) || 0
|
|
52
|
+
}));
|
|
53
|
+
await this.auditService.record({
|
|
54
|
+
actorName: operator.username,
|
|
55
|
+
action: 'image_add',
|
|
56
|
+
detail: { id: saved.id, name: saved.name, url: saved.url }
|
|
57
|
+
});
|
|
58
|
+
return saved;
|
|
59
|
+
}
|
|
60
|
+
async update(params, operator) {
|
|
61
|
+
if (!params.id || !params.name) {
|
|
62
|
+
throw new Error('缺少 id 或 name');
|
|
63
|
+
}
|
|
64
|
+
await this.repo.update(params.id, { name: params.name });
|
|
65
|
+
await this.auditService.record({
|
|
66
|
+
actorName: operator.username,
|
|
67
|
+
action: 'image_rename',
|
|
68
|
+
detail: { id: params.id, name: params.name }
|
|
69
|
+
});
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
async deleteById(id, operator) {
|
|
73
|
+
const target = await this.repo.findOne({ where: { id } });
|
|
74
|
+
if (!target)
|
|
75
|
+
throw new Error('图片记录不存在');
|
|
76
|
+
await this.repo.delete(id);
|
|
77
|
+
this.uploadService.delete(target.url);
|
|
78
|
+
await this.auditService.record({
|
|
79
|
+
actorName: operator.username,
|
|
80
|
+
action: 'image_delete',
|
|
81
|
+
detail: { id, name: target.name, url: target.url }
|
|
82
|
+
});
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
exports.ImageService = ImageService;
|
|
87
|
+
exports.ImageService = ImageService = __decorate([
|
|
88
|
+
(0, common_1.Injectable)(),
|
|
89
|
+
__param(0, (0, typeorm_1.InjectRepository)(image_entity_1.ImageEntity)),
|
|
90
|
+
__param(1, (0, common_1.Inject)((0, common_1.forwardRef)(() => upload_service_1.UploadService))),
|
|
91
|
+
__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
92
|
+
upload_service_1.UploadService,
|
|
93
|
+
audit_service_1.AuditService])
|
|
94
|
+
], ImageService);
|
|
2
95
|
//# sourceMappingURL=image.service.js.map
|