@cicctencent/midwayjs-base 1.0.20 → 1.0.21
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/dist/base/base.controller.d.ts +5 -0
- package/dist/base/base.controller.js +28 -0
- package/dist/base/base.model.service.d.ts +29 -0
- package/dist/base/base.model.service.js +86 -0
- package/dist/base/base.service.d.ts +30 -0
- package/dist/base/base.service.js +86 -0
- package/dist/config/config.default.d.ts +3 -0
- package/dist/config/config.default.js +153 -0
- package/dist/config/env.d.ts +1 -0
- package/dist/config/env.js +19 -0
- package/dist/configuration.d.ts +5 -0
- package/dist/configuration.js +79 -0
- package/dist/filter/default.filter.d.ts +7 -0
- package/dist/filter/default.filter.js +24 -0
- package/dist/filter/notfound.filter.d.ts +5 -0
- package/dist/filter/notfound.filter.js +22 -0
- package/dist/guard/api.d.ts +16 -0
- package/dist/guard/api.js +88 -0
- package/dist/guard/auth.d.ts +19 -0
- package/dist/guard/auth.js +184 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +37 -0
- package/dist/lib/decorator.d.ts +36 -0
- package/dist/lib/decorator.js +79 -0
- package/dist/lib/request.d.ts +7 -0
- package/dist/lib/request.js +7 -0
- package/dist/lib/utils.d.ts +15 -0
- package/dist/lib/utils.js +100 -0
- package/dist/middleware/apiResultFormatter.d.ts +8 -0
- package/dist/middleware/apiResultFormatter.js +84 -0
- package/dist/middleware/detect.middleware.d.ts +5 -0
- package/dist/middleware/detect.middleware.js +61 -0
- package/dist/middleware/requestInit.d.ts +8 -0
- package/dist/middleware/requestInit.js +100 -0
- package/dist/service/session.service.d.ts +39 -0
- package/dist/service/session.service.js +93 -0
- package/dist/service/tencent.service.d.ts +38 -0
- package/dist/service/tencent.service.js +87 -0
- package/package.json +2 -2
- package/typings/midway.d.ts +54 -54
|
@@ -0,0 +1,88 @@
|
|
|
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.ApiGuard = void 0;
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
const core_1 = require("@midwayjs/core");
|
|
15
|
+
const decorator_1 = require("../lib/decorator");
|
|
16
|
+
const api_1 = require("@fefeding/common/dist/utils/api");
|
|
17
|
+
/**
|
|
18
|
+
* 对于需要token的接口,从query或body或cookie中取token,是否跟本服务的一致
|
|
19
|
+
*/
|
|
20
|
+
let ApiGuard = class ApiGuard {
|
|
21
|
+
// 登陆态验证配置
|
|
22
|
+
apiOption;
|
|
23
|
+
ipOption;
|
|
24
|
+
async canActivate(context, supplierClz, methodName) {
|
|
25
|
+
// 检查是否有IP白名单限制
|
|
26
|
+
const needIP = (0, decorator_1.getCheckIP)(supplierClz, methodName);
|
|
27
|
+
if (needIP) {
|
|
28
|
+
//console.log('check ip ', needIP);
|
|
29
|
+
this.checkIPInWhiteList(context);
|
|
30
|
+
}
|
|
31
|
+
// 获取是否需要检查token
|
|
32
|
+
const needToken = (0, decorator_1.getApiToken)(supplierClz, methodName);
|
|
33
|
+
if (needToken) {
|
|
34
|
+
await this.checkApiToken(context);
|
|
35
|
+
}
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
// 校验是否有带api token
|
|
39
|
+
async checkApiToken(context) {
|
|
40
|
+
const body = (context.request.body || {});
|
|
41
|
+
const reqToken = context.URL.searchParams.get('api_token') ||
|
|
42
|
+
context.request.header['x-api-token'] ||
|
|
43
|
+
body.api_token ||
|
|
44
|
+
context.cookies.get('api_token');
|
|
45
|
+
const timestamp = Number(context.URL.searchParams.get('timestamp') ||
|
|
46
|
+
context.request.header['x-api-timestamp'] ||
|
|
47
|
+
body.timestamp ||
|
|
48
|
+
context.cookies.get('timestamp'));
|
|
49
|
+
if (!reqToken || !timestamp) {
|
|
50
|
+
context.logger.error(`token为空,非法请求, token: ${reqToken}, timestamp: ${timestamp}`);
|
|
51
|
+
throw Error('token为空,非法请求');
|
|
52
|
+
}
|
|
53
|
+
//const time = new Date(timestamp);
|
|
54
|
+
console.log('token time', reqToken, timestamp);
|
|
55
|
+
// 如果超过一定时间,则失效
|
|
56
|
+
if (timestamp < Date.now() - 5 * 60 * 1000) {
|
|
57
|
+
throw Error('timestamp已超过有效时间');
|
|
58
|
+
}
|
|
59
|
+
const thisToken = api_1.default.createApiToken(this.apiOption.key, timestamp);
|
|
60
|
+
if (reqToken !== thisToken.sign) {
|
|
61
|
+
context.logger.error(`输入token:${reqToken} 本地: ${thisToken.sign} 不一致`);
|
|
62
|
+
throw Error('token输入错误');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// 检查IP白名单
|
|
66
|
+
checkIPInWhiteList(context) {
|
|
67
|
+
const requestIp = context.detect?.REQUESTIP;
|
|
68
|
+
if (this.ipOption?.whiteList && !this.ipOption.whiteList.includes('*')) {
|
|
69
|
+
if (!this.ipOption.whiteList.includes(requestIp)) {
|
|
70
|
+
context.logger.error(`IP:${requestIp} 不在白名单内`);
|
|
71
|
+
throw Error(`IP:${requestIp} 不在白名单内`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
exports.ApiGuard = ApiGuard;
|
|
77
|
+
__decorate([
|
|
78
|
+
(0, core_1.Config)('apiOption'),
|
|
79
|
+
__metadata("design:type", Object)
|
|
80
|
+
], ApiGuard.prototype, "apiOption", void 0);
|
|
81
|
+
__decorate([
|
|
82
|
+
(0, core_1.Config)('ipOption'),
|
|
83
|
+
__metadata("design:type", Object)
|
|
84
|
+
], ApiGuard.prototype, "ipOption", void 0);
|
|
85
|
+
exports.ApiGuard = ApiGuard = __decorate([
|
|
86
|
+
(0, core_1.Guard)()
|
|
87
|
+
], ApiGuard);
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2d1YXJkL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxhQUFhO0FBQ2IseUNBQXVEO0FBRXZELGdEQUEyRDtBQUMzRCx5REFBa0Q7QUFFbEQ7O0dBRUc7QUFFSSxJQUFNLFFBQVEsR0FBZCxNQUFNLFFBQVE7SUFDakIsVUFBVTtJQUVWLFNBQVMsQ0FFUDtJQUdGLFFBQVEsQ0FFTjtJQUVGLEtBQUssQ0FBQyxXQUFXLENBQ2IsT0FBZ0IsRUFDaEIsV0FBZ0IsRUFDaEIsVUFBa0I7UUFFbEIsZUFBZTtRQUNmLE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQVUsRUFBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkQsSUFBRyxNQUFNLEVBQUUsQ0FBQztZQUNSLG1DQUFtQztZQUNuQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELGdCQUFnQjtRQUNoQixNQUFNLFNBQVMsR0FBRyxJQUFBLHVCQUFXLEVBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXZELElBQUksU0FBUyxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFnQjtRQUNoQyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBUSxDQUFDO1FBQ2pELE1BQU0sUUFBUSxHQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7WUFDekMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxTQUFTO1lBQ2QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1lBQ3pDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1lBQ3JDLElBQUksQ0FBQyxTQUFTO1lBQ2QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQ3ZDLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2hCLHdCQUF3QixRQUFRLGdCQUFnQixTQUFTLEVBQUUsQ0FDOUQsQ0FBQztZQUNGLE1BQU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxtQ0FBbUM7UUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLGVBQWU7UUFDZixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUN6QyxNQUFNLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxhQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXBFLElBQUksUUFBUSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDaEIsV0FBVyxRQUFRLFNBQVMsU0FBUyxDQUFDLElBQUksTUFBTSxDQUNuRCxDQUFDO1lBQ0YsTUFBTSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO0lBQ1Ysa0JBQWtCLENBQUMsT0FBZ0I7UUFDL0IsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUM7UUFDNUMsSUFBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BFLElBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxTQUFTLFNBQVMsQ0FBQyxDQUFDO2dCQUMvQyxNQUFNLEtBQUssQ0FBQyxNQUFNLFNBQVMsU0FBUyxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0NBQ0osQ0FBQTtBQWhGWSw0QkFBUTtBQUdqQjtJQURDLElBQUEsYUFBTSxFQUFDLFdBQVcsQ0FBQzs7MkNBR2xCO0FBR0Y7SUFEQyxJQUFBLGFBQU0sRUFBQyxVQUFVLENBQUM7OzBDQUdqQjttQkFWTyxRQUFRO0lBRHBCLElBQUEsWUFBSyxHQUFFO0dBQ0ssUUFBUSxDQWdGcEIifQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { IGuard } from '@midwayjs/core';
|
|
2
|
+
import { Context } from '@midwayjs/koa';
|
|
3
|
+
import { SessionService } from '../service/session.service';
|
|
4
|
+
/**
|
|
5
|
+
* 校验请求的登陆态
|
|
6
|
+
*/
|
|
7
|
+
export declare class AuthGuard implements IGuard<Context> {
|
|
8
|
+
sessionService: SessionService;
|
|
9
|
+
ssoOption: any;
|
|
10
|
+
authOption: {
|
|
11
|
+
ignores?: string | Array<RegExp | string>;
|
|
12
|
+
};
|
|
13
|
+
apiOption: any;
|
|
14
|
+
koa: any;
|
|
15
|
+
checkNeedAuth(context: Context, supplierClz: any, methodName: string): any;
|
|
16
|
+
canActivate(context: Context, supplierClz: any, methodName: string): Promise<boolean>;
|
|
17
|
+
checkAuth(context: Context, token: string, needAuth?: boolean): Promise<boolean>;
|
|
18
|
+
authError(context: Context, error?: any): void;
|
|
19
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
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.AuthGuard = void 0;
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
const core_1 = require("@midwayjs/core");
|
|
15
|
+
const session_service_1 = require("../service/session.service");
|
|
16
|
+
const decorator_1 = require("../lib/decorator");
|
|
17
|
+
const utils_1 = require("../lib/utils");
|
|
18
|
+
/**
|
|
19
|
+
* 校验请求的登陆态
|
|
20
|
+
*/
|
|
21
|
+
let AuthGuard = class AuthGuard {
|
|
22
|
+
sessionService;
|
|
23
|
+
ssoOption;
|
|
24
|
+
authOption;
|
|
25
|
+
apiOption;
|
|
26
|
+
koa;
|
|
27
|
+
// 检查是否需要验证登陆态
|
|
28
|
+
checkNeedAuth(context, supplierClz, methodName) {
|
|
29
|
+
// 如果有配置忽略验证,则直接返回false
|
|
30
|
+
if (this.authOption?.ignores) {
|
|
31
|
+
if (this.authOption.ignores === '*' || this.authOption.ignores === context.path) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (Array.isArray(this.authOption.ignores)) {
|
|
35
|
+
if (this.authOption.ignores.includes('*'))
|
|
36
|
+
return false;
|
|
37
|
+
for (const t of this.authOption.ignores) {
|
|
38
|
+
if (t instanceof RegExp) {
|
|
39
|
+
if (t.test(context.path))
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
else if (typeof t === 'string') {
|
|
43
|
+
if (t === context.path)
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// 获取是否需要检查登陆态
|
|
50
|
+
const needAuth = (0, decorator_1.getCheckLogin)(supplierClz, methodName);
|
|
51
|
+
return needAuth;
|
|
52
|
+
}
|
|
53
|
+
async canActivate(context, supplierClz, methodName) {
|
|
54
|
+
// 获取是否需要检查登陆态
|
|
55
|
+
const needAuth = this.checkNeedAuth(context, supplierClz, methodName);
|
|
56
|
+
const token = (0, utils_1.getAuthToken)(context);
|
|
57
|
+
if (token)
|
|
58
|
+
context.auth_token = token;
|
|
59
|
+
const ret = await this.checkAuth(context, token, needAuth);
|
|
60
|
+
return ret;
|
|
61
|
+
}
|
|
62
|
+
// 校验是否有带api token
|
|
63
|
+
async checkAuth(context, token, needAuth) {
|
|
64
|
+
this.sessionService.ctx = context;
|
|
65
|
+
const authRet = 50001;
|
|
66
|
+
//console.log('check auth', token, needAuth);
|
|
67
|
+
let errRes = null;
|
|
68
|
+
try {
|
|
69
|
+
let session = null;
|
|
70
|
+
// 如果是从登陆回来,则验证监时码
|
|
71
|
+
const authCode = context.URL.searchParams.get('auth_code');
|
|
72
|
+
if (authCode) {
|
|
73
|
+
const res = await this.sessionService.loginByCode(authCode);
|
|
74
|
+
if (res.ret === 0) {
|
|
75
|
+
session = res.data;
|
|
76
|
+
// 登陆写入cookie
|
|
77
|
+
(0, utils_1.setAuthToken)(context, session.id);
|
|
78
|
+
}
|
|
79
|
+
context.URL.searchParams.delete('auth_code'); // 移除auth_code参数
|
|
80
|
+
context.URL.hostname = context.detect?.HOSTNAME || context.hostname;
|
|
81
|
+
const url = context.URL.toString();
|
|
82
|
+
context.redirect(url);
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
if (token && !errRes && !session) {
|
|
86
|
+
// jwt签名
|
|
87
|
+
if (token.startsWith('Bearer ')) {
|
|
88
|
+
session = (0, utils_1.decodeJWT)(token.replace('Bearer ', ''), this.sessionService?.sessionOption?.secretKey || 'fefeding');
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
session = await this.sessionService.getLoginSession(token);
|
|
92
|
+
}
|
|
93
|
+
if (!session || !session.id) {
|
|
94
|
+
(0, utils_1.setAuthToken)(context, '');
|
|
95
|
+
//context.status = 403;
|
|
96
|
+
errRes = {
|
|
97
|
+
ret: authRet,
|
|
98
|
+
msg: 'token不存在或已过期',
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (!session) {
|
|
103
|
+
errRes = {
|
|
104
|
+
ret: authRet,
|
|
105
|
+
msg: '需要登陆态',
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// 登陆态挂载到当前上下文
|
|
109
|
+
context.currentSession = session;
|
|
110
|
+
// @ts-ignore 登陆态挂载到logger
|
|
111
|
+
if (session && context.logger?.setOptions) {
|
|
112
|
+
// @ts-ignore
|
|
113
|
+
context.logger.setOptions({
|
|
114
|
+
loginId: session?.loginId || '',
|
|
115
|
+
userId: (session?.userId || '').toString(),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
if (errRes && needAuth) {
|
|
119
|
+
this.authError(context, errRes);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
console.error(e);
|
|
124
|
+
errRes = {
|
|
125
|
+
ret: authRet,
|
|
126
|
+
msg: e.message || 'auth error',
|
|
127
|
+
};
|
|
128
|
+
if (needAuth)
|
|
129
|
+
this.authError(context, errRes);
|
|
130
|
+
}
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
// 异常处理
|
|
134
|
+
authError(context, error) {
|
|
135
|
+
const isApi = this.apiOption?.reg?.test(context.path);
|
|
136
|
+
if (isApi) {
|
|
137
|
+
context.status = 200;
|
|
138
|
+
context.res.write('', 'utf8');
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
const loginUrl = `${this.ssoOption?.baseUrl || this.koa?.globalPrefix || ''}/login`;
|
|
143
|
+
// 如果本来就以/login结尾,则直跳
|
|
144
|
+
if (!/\/login\/?(\?|$|#)/.test(context.URL.pathname)) {
|
|
145
|
+
const URL = context.URL;
|
|
146
|
+
if (context.detect?.HOSTNAME && URL.hostname !== context.detect?.HOSTNAME)
|
|
147
|
+
URL.hostname = context.detect.HOSTNAME;
|
|
148
|
+
URL.searchParams.delete('jv_auth_code');
|
|
149
|
+
URL.searchParams.delete('token');
|
|
150
|
+
URL.searchParams.delete('auth_code'); // 移除auth_code参数
|
|
151
|
+
const redirectUrl = context.URL.toString();
|
|
152
|
+
context.redirect(`${loginUrl}?url=${encodeURIComponent(redirectUrl)}&appid=${this.ssoOption?.appId || 0}`);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
context.redirect(loginUrl);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
exports.AuthGuard = AuthGuard;
|
|
161
|
+
__decorate([
|
|
162
|
+
(0, core_1.Inject)(),
|
|
163
|
+
__metadata("design:type", session_service_1.SessionService)
|
|
164
|
+
], AuthGuard.prototype, "sessionService", void 0);
|
|
165
|
+
__decorate([
|
|
166
|
+
(0, core_1.Config)('sso'),
|
|
167
|
+
__metadata("design:type", Object)
|
|
168
|
+
], AuthGuard.prototype, "ssoOption", void 0);
|
|
169
|
+
__decorate([
|
|
170
|
+
(0, core_1.Config)('auth'),
|
|
171
|
+
__metadata("design:type", Object)
|
|
172
|
+
], AuthGuard.prototype, "authOption", void 0);
|
|
173
|
+
__decorate([
|
|
174
|
+
(0, core_1.Config)('apiOption'),
|
|
175
|
+
__metadata("design:type", Object)
|
|
176
|
+
], AuthGuard.prototype, "apiOption", void 0);
|
|
177
|
+
__decorate([
|
|
178
|
+
(0, core_1.Config)('koa'),
|
|
179
|
+
__metadata("design:type", Object)
|
|
180
|
+
], AuthGuard.prototype, "koa", void 0);
|
|
181
|
+
exports.AuthGuard = AuthGuard = __decorate([
|
|
182
|
+
(0, core_1.Guard)()
|
|
183
|
+
], AuthGuard);
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ndWFyZC9hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGFBQWE7QUFDYix5Q0FBK0Q7QUFFL0QsZ0VBQTREO0FBQzVELGdEQUFpRDtBQUNqRCx3Q0FBcUU7QUFFckU7O0dBRUc7QUFFSSxJQUFNLFNBQVMsR0FBZixNQUFNLFNBQVM7SUFFbEIsY0FBYyxDQUFpQjtJQUcvQixTQUFTLENBQU07SUFHZixVQUFVLENBRVI7SUFHRixTQUFTLENBQU07SUFHZixHQUFHLENBQU07SUFFVCxjQUFjO0lBQ2QsYUFBYSxDQUFDLE9BQWdCLEVBQzFCLFdBQWdCLEVBQ2hCLFVBQWtCO1FBQ2QsdUJBQXVCO1FBQzNCLElBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMxQixJQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzdFLE9BQU8sS0FBSyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxJQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxJQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7b0JBQUUsT0FBTyxLQUFLLENBQUM7Z0JBRXZELEtBQUksTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDckMsSUFBRyxDQUFDLFlBQVksTUFBTSxFQUFFLENBQUM7d0JBQ3JCLElBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDOzRCQUFFLE9BQU8sS0FBSyxDQUFDO29CQUMxQyxDQUFDO3lCQUNJLElBQUcs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
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export * as koa from '@midwayjs/koa';
|
|
2
|
+
export { BaseConfiguration as Configuration } from './configuration';
|
|
3
|
+
export * as utils from './lib/utils';
|
|
4
|
+
export * as decorators from './lib/decorator';
|
|
5
|
+
export * from '@fefeding/common/dist/models/base/enumType';
|
|
6
|
+
export { BaseORM as BaseEntity } from '@fefeding/common/dist/models/base/baseORM';
|
|
7
|
+
export * from './middleware/apiResultFormatter';
|
|
8
|
+
export * from './middleware/requestInit';
|
|
9
|
+
export * from './middleware/detect.middleware';
|
|
10
|
+
export * from './guard/api';
|
|
11
|
+
export * from './guard/auth';
|
|
12
|
+
export * from './base/base.service';
|
|
13
|
+
export * from './base/base.model.service';
|
|
14
|
+
export * from './service/session.service';
|
|
15
|
+
export * from './service/tencent.service';
|
|
16
|
+
export * from './base/base.controller';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.BaseEntity = exports.decorators = exports.utils = exports.Configuration = exports.koa = void 0;
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
exports.koa = require("@midwayjs/koa");
|
|
20
|
+
var configuration_1 = require("./configuration");
|
|
21
|
+
Object.defineProperty(exports, "Configuration", { enumerable: true, get: function () { return configuration_1.BaseConfiguration; } });
|
|
22
|
+
exports.utils = require("./lib/utils");
|
|
23
|
+
exports.decorators = require("./lib/decorator");
|
|
24
|
+
__exportStar(require("@fefeding/common/dist/models/base/enumType"), exports);
|
|
25
|
+
var baseORM_1 = require("@fefeding/common/dist/models/base/baseORM");
|
|
26
|
+
Object.defineProperty(exports, "BaseEntity", { enumerable: true, get: function () { return baseORM_1.BaseORM; } });
|
|
27
|
+
__exportStar(require("./middleware/apiResultFormatter"), exports);
|
|
28
|
+
__exportStar(require("./middleware/requestInit"), exports);
|
|
29
|
+
__exportStar(require("./middleware/detect.middleware"), exports);
|
|
30
|
+
__exportStar(require("./guard/api"), exports);
|
|
31
|
+
__exportStar(require("./guard/auth"), exports);
|
|
32
|
+
__exportStar(require("./base/base.service"), exports);
|
|
33
|
+
__exportStar(require("./base/base.model.service"), exports);
|
|
34
|
+
__exportStar(require("./service/session.service"), exports);
|
|
35
|
+
__exportStar(require("./service/tencent.service"), exports);
|
|
36
|
+
__exportStar(require("./base/base.controller"), exports);
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxhQUFhO0FBQ2IsdUNBQXFDO0FBRXJDLGlEQUFxRTtBQUE1RCw4R0FBQSxpQkFBaUIsT0FBaUI7QUFFM0MsdUNBQXFDO0FBQ3JDLGdEQUE4QztBQUc5Qyw2RUFBMkQ7QUFDM0QscUVBQWtGO0FBQXpFLHFHQUFBLE9BQU8sT0FBYztBQUc5QixrRUFBZ0Q7QUFDaEQsMkRBQXlDO0FBQ3pDLGlFQUErQztBQUUvQyw4Q0FBNEI7QUFDNUIsK0NBQTZCO0FBRTdCLHNEQUFvQztBQUNwQyw0REFBMEM7QUFDMUMsNERBQTBDO0FBQzFDLDREQUEwQztBQUUxQyx5REFBdUMifQ==
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 判断是否校验token的api装饰器
|
|
3
|
+
* @param need 是否要
|
|
4
|
+
* @returns
|
|
5
|
+
*/
|
|
6
|
+
export declare function checkApiToken(need?: boolean): MethodDecorator;
|
|
7
|
+
/**
|
|
8
|
+
* 获取装饰的是否需要toke验证
|
|
9
|
+
* @param target 对象
|
|
10
|
+
* @param propertyKey 属性或方法名
|
|
11
|
+
*/
|
|
12
|
+
export declare function getApiToken(target: any, propertyKey: any): any;
|
|
13
|
+
/**
|
|
14
|
+
* 判断是否校验登陆态
|
|
15
|
+
* @param need 是否要
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
export declare function checkLogin(need?: boolean): MethodDecorator;
|
|
19
|
+
/**
|
|
20
|
+
* 获取装饰的是否需要校验登陆态
|
|
21
|
+
* @param target 对象
|
|
22
|
+
* @param propertyKey 属性或方法名
|
|
23
|
+
*/
|
|
24
|
+
export declare function getCheckLogin(target: any, propertyKey: any): any;
|
|
25
|
+
/**
|
|
26
|
+
* 判断是否校验在IP白名单内
|
|
27
|
+
* @param need 是否要
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
export declare function checkIP(need?: boolean): MethodDecorator;
|
|
31
|
+
/**
|
|
32
|
+
* 获取装饰的是否需要校验IP白名单
|
|
33
|
+
* @param target 对象
|
|
34
|
+
* @param propertyKey 属性或方法名
|
|
35
|
+
*/
|
|
36
|
+
export declare function getCheckIP(target: any, propertyKey: any): any;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkApiToken = checkApiToken;
|
|
4
|
+
exports.getApiToken = getApiToken;
|
|
5
|
+
exports.checkLogin = checkLogin;
|
|
6
|
+
exports.getCheckLogin = getCheckLogin;
|
|
7
|
+
exports.checkIP = checkIP;
|
|
8
|
+
exports.getCheckIP = getCheckIP;
|
|
9
|
+
// @ts-ignore
|
|
10
|
+
const core_1 = require("@midwayjs/core");
|
|
11
|
+
const decorator_1 = require("@fefeding/common/dist/utils/decorator");
|
|
12
|
+
const CheckIPKey = 'decorator:CheckIPKey';
|
|
13
|
+
/**
|
|
14
|
+
* 判断是否校验token的api装饰器
|
|
15
|
+
* @param need 是否要
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
function checkApiToken(need = true) {
|
|
19
|
+
return (target, propertyKey) => {
|
|
20
|
+
// 只保存元数据
|
|
21
|
+
(0, core_1.savePropertyMetadata)(decorator_1.default.apiTokenMetadataKey, need, target, propertyKey);
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 获取装饰的是否需要toke验证
|
|
26
|
+
* @param target 对象
|
|
27
|
+
* @param propertyKey 属性或方法名
|
|
28
|
+
*/
|
|
29
|
+
function getApiToken(target, propertyKey) {
|
|
30
|
+
try {
|
|
31
|
+
const value = (0, core_1.getPropertyMetadata)(decorator_1.default.apiTokenMetadataKey, target, propertyKey);
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
console.log(e);
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 判断是否校验登陆态
|
|
41
|
+
* @param need 是否要
|
|
42
|
+
* @returns
|
|
43
|
+
*/
|
|
44
|
+
function checkLogin(need = true) {
|
|
45
|
+
return (target, propertyKey) => {
|
|
46
|
+
// 只保存元数据
|
|
47
|
+
(0, core_1.savePropertyMetadata)(decorator_1.default.apiAuthMetadataKey, need, target, propertyKey);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 获取装饰的是否需要校验登陆态
|
|
52
|
+
* @param target 对象
|
|
53
|
+
* @param propertyKey 属性或方法名
|
|
54
|
+
*/
|
|
55
|
+
function getCheckLogin(target, propertyKey) {
|
|
56
|
+
const value = (0, core_1.getPropertyMetadata)(decorator_1.default.apiAuthMetadataKey, target, propertyKey);
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 判断是否校验在IP白名单内
|
|
61
|
+
* @param need 是否要
|
|
62
|
+
* @returns
|
|
63
|
+
*/
|
|
64
|
+
function checkIP(need = true) {
|
|
65
|
+
return (target, propertyKey) => {
|
|
66
|
+
// 只保存元数据
|
|
67
|
+
(0, core_1.savePropertyMetadata)(CheckIPKey, need, target, propertyKey);
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 获取装饰的是否需要校验IP白名单
|
|
72
|
+
* @param target 对象
|
|
73
|
+
* @param propertyKey 属性或方法名
|
|
74
|
+
*/
|
|
75
|
+
function getCheckIP(target, propertyKey) {
|
|
76
|
+
const value = (0, core_1.getPropertyMetadata)(CheckIPKey, target, propertyKey);
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFXQSxzQ0FVQztBQU9ELGtDQWFDO0FBT0QsZ0NBVUM7QUFPRCxzQ0FPQztBQVNELDBCQVVDO0FBT0QsZ0NBT0M7QUF6R0QsYUFBYTtBQUNiLHlDQUEyRTtBQUMzRSxxRUFBK0Q7QUFFL0QsTUFBTSxVQUFVLEdBQUcsc0JBQXNCLENBQUM7QUFFMUM7Ozs7R0FJRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxJQUFJLEdBQUcsSUFBSTtJQUNyQyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFO1FBQzNCLFNBQVM7UUFDVCxJQUFBLDJCQUFvQixFQUNoQixtQkFBVSxDQUFDLG1CQUFtQixFQUM5QixJQUFJLEVBQ0osTUFBTSxFQUNOLFdBQVcsQ0FDZCxDQUFDO0lBQ04sQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVc7SUFDM0MsSUFBSSxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBQSwwQkFBbUIsRUFDN0IsbUJBQVUsQ0FBQyxtQkFBbUIsRUFDOUIsTUFBTSxFQUNOLFdBQVcsQ0FDZCxDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELE9BQU0sQ0FBQyxFQUFFLENBQUM7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJO0lBQ2xDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQUU7UUFDM0IsU0FBUztRQUNULElBQUEsMkJBQW9CLEVBQ2hCLG1CQUFVLENBQUMsa0JBQWtCLEVBQzdCLElBQUksRUFDSixNQUFNLEVBQ04sV0FBVyxDQUNkLENBQUM7SUFDTixDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxNQUFNLEVBQUUsV0FBVztJQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFBLDBCQUFtQixFQUM3QixtQkFBVSxDQUFDLGtCQUFrQixFQUM3QixNQUFNLEVBQ04sV0FBVyxDQUNkLENBQUM7SUFDRixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBSUQ7Ozs7R0FJRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSTtJQUMvQixPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFO1FBQzNCLFNBQVM7UUFDVCxJQUFBLDJCQUFvQixFQUNoQixVQUFVLEVBQ1YsSUFBSSxFQUNKLE1BQU0sRUFDTixXQUFXLENBQ2QsQ0FBQztJQUNOLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLE1BQU0sRUFBRSxXQUFXO0lBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUEsMEJBQW1CLEVBQzdCLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxDQUNkLENBQUM7SUFDRixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDIn0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requestServer = exports.requestApi = void 0;
|
|
4
|
+
const axios_1 = require("@fefeding/common/dist/utils/axios");
|
|
5
|
+
Object.defineProperty(exports, "requestApi", { enumerable: true, get: function () { return axios_1.requestApi; } });
|
|
6
|
+
Object.defineProperty(exports, "requestServer", { enumerable: true, get: function () { return axios_1.requestServer; } });
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2REFBOEU7QUFPckUsMkZBUEEsa0JBQVUsT0FPQTtBQUFFLDhGQVBBLHFCQUFhLE9BT0EifQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Context } from '@midwayjs/koa';
|
|
2
|
+
import { loadEnv } from '../config/env';
|
|
3
|
+
export declare function checkUrlHost(url: string, host: string | Array<string>): boolean;
|
|
4
|
+
/**
|
|
5
|
+
* render模板
|
|
6
|
+
* @param ctx
|
|
7
|
+
* @param file
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
export declare function getDefaultTemplate(ctx: Context, file?: string, data?: any): Promise<string>;
|
|
11
|
+
export declare function getAuthToken(ctx: Context): any;
|
|
12
|
+
export declare function setAuthToken(ctx: Context, token: string): void;
|
|
13
|
+
export declare function decodeJWT(token: string, secretKey: string): any;
|
|
14
|
+
export declare function encodeJWT(data: any, secretKey: string): any;
|
|
15
|
+
export { loadEnv };
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadEnv = void 0;
|
|
4
|
+
exports.checkUrlHost = checkUrlHost;
|
|
5
|
+
exports.getDefaultTemplate = getDefaultTemplate;
|
|
6
|
+
exports.getAuthToken = getAuthToken;
|
|
7
|
+
exports.setAuthToken = setAuthToken;
|
|
8
|
+
exports.decodeJWT = decodeJWT;
|
|
9
|
+
exports.encodeJWT = encodeJWT;
|
|
10
|
+
const jwt = require("jsonwebtoken");
|
|
11
|
+
const env_1 = require("../config/env");
|
|
12
|
+
Object.defineProperty(exports, "loadEnv", { enumerable: true, get: function () { return env_1.loadEnv; } });
|
|
13
|
+
//判断url是否是对应的域名
|
|
14
|
+
function checkUrlHost(url, host) {
|
|
15
|
+
if (/^\/[^\/]{1,}/.test(url))
|
|
16
|
+
return true;
|
|
17
|
+
if (Array.isArray(host)) {
|
|
18
|
+
for (const h of host) {
|
|
19
|
+
if (checkUrlHost(url, h))
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
const reg = new RegExp('^(http(s)?:)?//' + host);
|
|
25
|
+
return reg.test(url);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* render模板
|
|
29
|
+
* @param ctx
|
|
30
|
+
* @param file
|
|
31
|
+
* @returns
|
|
32
|
+
*/
|
|
33
|
+
function getDefaultTemplate(ctx, file = 'index.html', data = {}) {
|
|
34
|
+
// 前端端口,如果为空,说明就是开发环境了
|
|
35
|
+
const viteTarget = process.env.VITE_PORT;
|
|
36
|
+
const config = ctx.app.getConfig();
|
|
37
|
+
const prefix = config.koa.globalPrefix;
|
|
38
|
+
const option = {
|
|
39
|
+
data: {
|
|
40
|
+
config: {
|
|
41
|
+
prefix,
|
|
42
|
+
},
|
|
43
|
+
session: ctx.currentSession || null,
|
|
44
|
+
...data
|
|
45
|
+
},
|
|
46
|
+
title: data.title || '',
|
|
47
|
+
description: process.env.DESCRIPTION || '',
|
|
48
|
+
env: process.env,
|
|
49
|
+
prefix,
|
|
50
|
+
viteTarget: viteTarget ? `//${ctx.hostname}:${viteTarget}` : '',
|
|
51
|
+
};
|
|
52
|
+
//console.log(file, data);
|
|
53
|
+
return ctx.render(file, option);
|
|
54
|
+
}
|
|
55
|
+
// 从当前请求中获取登陆态token
|
|
56
|
+
function getAuthToken(ctx) {
|
|
57
|
+
const body = (ctx.request.body || {});
|
|
58
|
+
const token = ctx.URL.searchParams.get('token') ||
|
|
59
|
+
ctx.request.header['x-auth-token'] ||
|
|
60
|
+
ctx.cookies.get('token', {
|
|
61
|
+
signed: false,
|
|
62
|
+
}) ||
|
|
63
|
+
ctx.request.header['authorization'] ||
|
|
64
|
+
body.token;
|
|
65
|
+
return token;
|
|
66
|
+
}
|
|
67
|
+
// 种登陆态token
|
|
68
|
+
function setAuthToken(ctx, token) {
|
|
69
|
+
ctx.cookies.set('token', token, {
|
|
70
|
+
httpOnly: true,
|
|
71
|
+
maxAge: 1000 * 60 * 60 * 24 * 30,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
// 验证jwt
|
|
75
|
+
function decodeJWT(token, secretKey) {
|
|
76
|
+
try {
|
|
77
|
+
const decoded = jwt.verify(token, secretKey);
|
|
78
|
+
return decoded;
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
console.error('Token 验证失败:', err.message); // 如过期、篡改等
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/*
|
|
86
|
+
id: string;
|
|
87
|
+
code?: string;
|
|
88
|
+
loginId: string;
|
|
89
|
+
userId?: number;
|
|
90
|
+
user?: User;
|
|
91
|
+
account?: Account;
|
|
92
|
+
appId?: number;
|
|
93
|
+
status?: EStatus;
|
|
94
|
+
lastDate: Date;
|
|
95
|
+
*/
|
|
96
|
+
function encodeJWT(data, secretKey) {
|
|
97
|
+
const token = jwt.sign(data, secretKey, { algorithm: 'HS256' });
|
|
98
|
+
return token;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLG9DQVVDO0FBUUQsZ0RBcUJDO0FBR0Qsb0NBV0M7QUFHRCxvQ0FLQztBQUdELDhCQVFDO0FBYUQsOEJBR0M7QUE1RkQsb0NBQW9DO0FBQ3BDLHVDQUF3QztBQThGcEMsd0ZBOUZLLGFBQU8sT0E4Rkw7QUE1RlgsZUFBZTtBQUNmLFNBQWdCLFlBQVksQ0FBQyxHQUFXLEVBQUUsSUFBMEI7SUFDaEUsSUFBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pDLElBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JCLEtBQUksTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEIsSUFBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztRQUN6QyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2pELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7O09BS087QUFDUCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFZLEVBQUUsSUFBSSxHQUFDLFlBQVksRUFBRSxPQUFZLEVBQUU7SUFDOUUsc0JBQXNCO0lBQ3RCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7SUFDdkMsTUFBTSxNQUFNLEdBQUc7UUFDWCxJQUFJLEVBQUU7WUFDRixNQUFNLEVBQUU7Z0JBQ0osTUFBTTthQUNUO1lBQ0QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxjQUFjLElBQUUsSUFBSTtZQUNqQyxHQUFHLElBQUk7U0FDVjtRQUNELEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDdkIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUU7UUFDMUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO1FBQ2hCLE1BQU07UUFDTixVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxRQUFRLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7S0FDbEUsQ0FBQztJQUNGLDBCQUEwQjtJQUMxQixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxtQkFBbUI7QUFDbkIsU0FBZ0IsWUFBWSxDQUFDLEdBQVk7SUFDckMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQVEsQ0FBQztJQUN6QyxNQUFNLEtBQUssR0FDWCxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUNsQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7WUFDckIsTUFBTSxFQUFFLEtBQUs7U0FDaEIsQ0FBQztRQUNGLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFFO0lBQ3BCLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxZQUFZO0FBQ1osU0FBZ0IsWUFBWSxDQUFDLEdBQVksRUFBRSxLQUFhO0lBQ3BELEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7UUFDNUIsUUFBUSxFQUFFLElBQUk7UUFDZCxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7S0FDbkMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELFFBQVE7QUFDUixTQUFnQixTQUFTLENBQUMsS0FBYSxFQUFFLFNBQWlCO0lBQ3RELElBQUksQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVTtRQUNyRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDUCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7RUFVRTtBQUNGLFNBQWdCLFNBQVMsQ0FBQyxJQUFTLEVBQUUsU0FBaUI7SUFDbEQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDaEUsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IMiddleware } from '@midwayjs/core';
|
|
2
|
+
import { NextFunction, Context } from '@midwayjs/koa';
|
|
3
|
+
export declare class ApiResultFormatterMiddleware implements IMiddleware<Context, NextFunction> {
|
|
4
|
+
apiOption: any;
|
|
5
|
+
ignore(ctx: Context): boolean;
|
|
6
|
+
resolve(): (ctx: Context, next: NextFunction) => Promise<void>;
|
|
7
|
+
canFormat(data: any): boolean;
|
|
8
|
+
}
|