@eggjs/security 5.0.0-beta.19 → 5.0.0-beta.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/agent.d.ts +5 -9
- package/dist/agent.js +10 -14
- package/dist/app/extend/agent.d.ts +4 -8
- package/dist/app/extend/agent.js +8 -12
- package/dist/app/extend/application.d.ts +7 -11
- package/dist/app/extend/application.js +32 -32
- package/dist/app/extend/context.d.ts +52 -55
- package/dist/app/extend/context.js +241 -188
- package/dist/app/extend/helper.d.ts +10 -22
- package/dist/app/extend/helper.js +5 -7
- package/dist/app/extend/response.d.ts +34 -38
- package/dist/app/extend/response.js +82 -69
- package/dist/app/middleware/securities.d.ts +4 -8
- package/dist/app/middleware/securities.js +52 -38
- package/dist/app.d.ts +5 -9
- package/dist/app.js +24 -22
- package/dist/config/config.default.d.ts +784 -787
- package/dist/config/config.default.js +356 -156
- package/dist/config/config.local.d.ts +2 -5
- package/dist/config/config.local.js +8 -5
- package/dist/index.d.ts +4 -1
- package/dist/index.js +2 -2
- package/dist/lib/extend/safe_curl.d.ts +9 -13
- package/dist/lib/extend/safe_curl.js +23 -17
- package/dist/lib/helper/cliFilter.d.ts +1 -4
- package/dist/lib/helper/cliFilter.js +15 -16
- package/dist/lib/helper/escape.d.ts +2 -2
- package/dist/lib/helper/escape.js +3 -7
- package/dist/lib/helper/escapeShellArg.d.ts +1 -4
- package/dist/lib/helper/escapeShellArg.js +4 -6
- package/dist/lib/helper/escapeShellCmd.d.ts +1 -4
- package/dist/lib/helper/escapeShellCmd.js +13 -14
- package/dist/lib/helper/index.d.ts +19 -22
- package/dist/lib/helper/index.js +15 -19
- package/dist/lib/helper/shtml.d.ts +2 -6
- package/dist/lib/helper/shtml.js +68 -52
- package/dist/lib/helper/sjs.d.ts +1 -4
- package/dist/lib/helper/sjs.js +44 -31
- package/dist/lib/helper/sjson.d.ts +1 -4
- package/dist/lib/helper/sjson.js +35 -28
- package/dist/lib/helper/spath.d.ts +5 -7
- package/dist/lib/helper/spath.js +24 -15
- package/dist/lib/helper/surl.d.ts +2 -6
- package/dist/lib/helper/surl.js +27 -22
- package/dist/lib/middlewares/csp.d.ts +3 -6
- package/dist/lib/middlewares/csp.js +54 -43
- package/dist/lib/middlewares/csrf.d.ts +3 -6
- package/dist/lib/middlewares/csrf.js +35 -31
- package/dist/lib/middlewares/dta.d.ts +2 -5
- package/dist/lib/middlewares/dta.js +10 -11
- package/dist/lib/middlewares/hsts.d.ts +3 -6
- package/dist/lib/middlewares/hsts.js +19 -17
- package/dist/lib/middlewares/index.d.ts +11 -16
- package/dist/lib/middlewares/index.js +22 -26
- package/dist/lib/middlewares/methodnoallow.d.ts +2 -5
- package/dist/lib/middlewares/methodnoallow.js +18 -13
- package/dist/lib/middlewares/noopen.d.ts +3 -6
- package/dist/lib/middlewares/noopen.js +13 -15
- package/dist/lib/middlewares/nosniff.d.ts +3 -6
- package/dist/lib/middlewares/nosniff.js +24 -23
- package/dist/lib/middlewares/referrerPolicy.d.ts +3 -6
- package/dist/lib/middlewares/referrerPolicy.js +31 -27
- package/dist/lib/middlewares/xframe.d.ts +3 -6
- package/dist/lib/middlewares/xframe.js +15 -16
- package/dist/lib/middlewares/xssProtection.d.ts +3 -6
- package/dist/lib/middlewares/xssProtection.js +12 -15
- package/dist/lib/utils.d.ts +12 -17
- package/dist/lib/utils.js +177 -112
- package/dist/types.d.ts +35 -37
- package/dist/types.js +2 -1
- package/package.json +6 -6
|
@@ -1,70 +1,83 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
//#region src/app/extend/response.ts
|
|
1
|
+
import { Response } from 'egg';
|
|
2
|
+
import SecurityContext from "./context.js";
|
|
5
3
|
const unsafeRedirect = Response.prototype.redirect;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
4
|
+
export default class SecurityResponse extends Response {
|
|
5
|
+
/**
|
|
6
|
+
* This is an unsafe redirection, and we WON'T check if the
|
|
7
|
+
* destination url is safe or not.
|
|
8
|
+
* Please DO NOT use this method unless in some very special cases,
|
|
9
|
+
* otherwise there may be security vulnerabilities.
|
|
10
|
+
*
|
|
11
|
+
* @function Response#unsafeRedirect
|
|
12
|
+
* @param {String} url URL to forward
|
|
13
|
+
* @example
|
|
14
|
+
* ```js
|
|
15
|
+
* ctx.response.unsafeRedirect('http://www.domain.com');
|
|
16
|
+
* ctx.unsafeRedirect('http://www.domain.com');
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
unsafeRedirect(url, alt) {
|
|
20
|
+
unsafeRedirect.call(this, url, alt);
|
|
21
|
+
}
|
|
22
|
+
// app.response.unsafeRedirect = app.response.redirect;
|
|
23
|
+
// delegate(app.context, 'response').method('unsafeRedirect');
|
|
24
|
+
/**
|
|
25
|
+
* A safe redirection, and we'll check if the URL is in
|
|
26
|
+
* a safe domain or not.
|
|
27
|
+
* We've overridden the default Koa's implementation by adding a
|
|
28
|
+
* white list as the filter for that.
|
|
29
|
+
*
|
|
30
|
+
* @function Response#redirect
|
|
31
|
+
* @param {String} url URL to forward
|
|
32
|
+
* @example
|
|
33
|
+
* ```js
|
|
34
|
+
* ctx.response.redirect('/login');
|
|
35
|
+
* ctx.redirect('/login');
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
redirect(url, alt) {
|
|
39
|
+
url = (url || '/').trim();
|
|
40
|
+
// Process with `//`
|
|
41
|
+
if (url[0] === '/' && url[1] === '/') {
|
|
42
|
+
url = '/';
|
|
43
|
+
}
|
|
44
|
+
// if begin with '/', it means an internal jump
|
|
45
|
+
if (url[0] === '/' && url[1] !== '\\') {
|
|
46
|
+
this.unsafeRedirect(url, alt);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
let urlObject;
|
|
50
|
+
try {
|
|
51
|
+
urlObject = new URL(url);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
url = '/';
|
|
55
|
+
this.unsafeRedirect(url);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const domainWhiteList = this.app.config.security.domainWhiteList;
|
|
59
|
+
if (urlObject.protocol !== 'http:' && urlObject.protocol !== 'https:') {
|
|
60
|
+
url = '/';
|
|
61
|
+
}
|
|
62
|
+
else if (!urlObject.hostname) {
|
|
63
|
+
url = '/';
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
if (domainWhiteList && domainWhiteList.length !== 0) {
|
|
67
|
+
if (!this.ctx.isSafeDomain(urlObject.hostname)) {
|
|
68
|
+
const message = `a security problem has been detected for url "${url}", redirection is prohibited.`;
|
|
69
|
+
if (process.env.NODE_ENV === 'production') {
|
|
70
|
+
this.app.coreLogger.warn('[@eggjs/security/response/redirect] %s', message);
|
|
71
|
+
url = '/';
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Exception will be thrown out in a non-PROD env.
|
|
75
|
+
return this.ctx.throw(500, message);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
this.unsafeRedirect(url);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2V4dGVuZC9yZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRS9CLE9BQU8sZUFBZSxNQUFNLGNBQWMsQ0FBQztBQUUzQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztBQUVuRCxNQUFNLENBQUMsT0FBTyxPQUFPLGdCQUFpQixTQUFRLFFBQVE7SUFHcEQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILGNBQWMsQ0FBQyxHQUFXLEVBQUUsR0FBWTtRQUN0QyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCw4REFBOEQ7SUFDOUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFFBQVEsQ0FBQyxHQUFXLEVBQUUsR0FBWTtRQUNoQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFMUIsb0JBQW9CO1FBQ3BCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDckMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNaLENBQUM7UUFFRCwrQ0FBK0M7UUFDL0MsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksU0FBYyxDQUFDO1FBQ25CLElBQUksQ0FBQztZQUNILFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2pFLElBQUksU0FBUyxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUksU0FBUyxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0RSxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ1osQ0FBQzthQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDL0IsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNaLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxlQUFlLElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUMvQyxNQUFNLE9BQU8sR0FBRyxpREFBaUQsR0FBRywrQkFBK0IsQ0FBQztvQkFDcEcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZLEVBQUUsQ0FBQzt3QkFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUM1RSxHQUFHLEdBQUcsR0FBRyxDQUFDO29CQUNaLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixrREFBa0Q7d0JBQ2xELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUN0QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztDQUNGIn0=
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Application } from
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
//#region src/app/middleware/securities.d.ts
|
|
6
|
-
declare const _default: (_: unknown, app: Application) => compose.ComposedMiddleware<egg0.Context>;
|
|
7
|
-
//#endregion
|
|
8
|
-
export { _default as default };
|
|
1
|
+
import compose from 'koa-compose';
|
|
2
|
+
import type { Application } from 'egg';
|
|
3
|
+
declare const _default: (_: unknown, app: Application) => compose.ComposedMiddleware<import("egg").Context>;
|
|
4
|
+
export default _default;
|
|
@@ -1,39 +1,53 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import compose from 'koa-compose';
|
|
3
|
+
import { pathMatching } from 'egg-path-matching';
|
|
4
|
+
import securityMiddlewares from "../../lib/middlewares/index.js";
|
|
5
|
+
export default (_, app) => {
|
|
6
|
+
const options = app.config.security;
|
|
7
|
+
const middlewares = [];
|
|
8
|
+
const defaultMiddlewares = typeof options.defaultMiddleware === 'string'
|
|
9
|
+
? options.defaultMiddleware
|
|
10
|
+
.split(',')
|
|
11
|
+
.map(m => m.trim())
|
|
12
|
+
.filter(m => !!m)
|
|
13
|
+
: options.defaultMiddleware;
|
|
14
|
+
if (options.match || options.ignore) {
|
|
15
|
+
app.coreLogger.warn('[@eggjs/security/middleware/securities] Please set `match` or `ignore` on sub config');
|
|
16
|
+
}
|
|
17
|
+
// format csrf.cookieDomain
|
|
18
|
+
const originalCookieDomain = options.csrf.cookieDomain;
|
|
19
|
+
if (originalCookieDomain && typeof originalCookieDomain !== 'function') {
|
|
20
|
+
options.csrf.cookieDomain = () => originalCookieDomain;
|
|
21
|
+
}
|
|
22
|
+
defaultMiddlewares.forEach(middlewareName => {
|
|
23
|
+
const opt = Reflect.get(options, middlewareName);
|
|
24
|
+
if (opt === false) {
|
|
25
|
+
app.coreLogger.warn('[egg-security] Please use `config.security.%s = { enable: false }` instead of `config.security.%s = false`', middlewareName, middlewareName);
|
|
26
|
+
}
|
|
27
|
+
assert(opt === false || typeof opt === 'object', `config.security.${middlewareName} must be an object, or false(if you turn it off)`);
|
|
28
|
+
if (opt === false || (opt && opt.enable === false)) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (middlewareName === 'csrf' && opt.useSession && !app.plugins.session) {
|
|
32
|
+
throw new Error('csrf.useSession enabled, but session plugin is disabled');
|
|
33
|
+
}
|
|
34
|
+
// use opt.match first (compatibility)
|
|
35
|
+
if (opt.match && opt.ignore) {
|
|
36
|
+
app.coreLogger.warn('[@eggjs/security/middleware/securities] `options.match` and `options.ignore` are both set, using `options.match`');
|
|
37
|
+
opt.ignore = undefined;
|
|
38
|
+
}
|
|
39
|
+
if (!opt.ignore && opt.blackUrls) {
|
|
40
|
+
app.deprecate('[@eggjs/security/middleware/securities] Please use `config.security.xframe.ignore` instead, `config.security.xframe.blackUrls` will be removed very soon');
|
|
41
|
+
opt.ignore = opt.blackUrls;
|
|
42
|
+
}
|
|
43
|
+
// set matching function to security middleware options
|
|
44
|
+
opt.matching = pathMatching(opt);
|
|
45
|
+
const createMiddleware = securityMiddlewares[middlewareName];
|
|
46
|
+
const fn = createMiddleware(opt);
|
|
47
|
+
middlewares.push(fn);
|
|
48
|
+
app.coreLogger.info('[@eggjs/security/middleware/securities] use %s middleware', middlewareName);
|
|
49
|
+
});
|
|
50
|
+
app.coreLogger.info('[@eggjs/security/middleware/securities] compose %d middlewares into one security middleware', middlewares.length);
|
|
51
|
+
return compose(middlewares);
|
|
36
52
|
};
|
|
37
|
-
|
|
38
|
-
//#endregion
|
|
39
|
-
export { securities_default as default };
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvbWlkZGxld2FyZS9zZWN1cml0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUVqQyxPQUFPLE9BQU8sTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sbUJBQW1CLE1BQU0sZ0NBQWdDLENBQUM7QUFHakUsZUFBZSxDQUFDLENBQVUsRUFBRSxHQUFnQixFQUFFLEVBQUU7SUFDOUMsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDcEMsTUFBTSxXQUFXLEdBQXFCLEVBQUUsQ0FBQztJQUN6QyxNQUFNLGtCQUFrQixHQUN0QixPQUFPLE9BQU8sQ0FBQyxpQkFBaUIsS0FBSyxRQUFRO1FBQzNDLENBQUMsQ0FBRSxPQUFPLENBQUMsaUJBQWlCO2FBQ3ZCLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDVixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDbEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBOEI7UUFDbEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztJQUVoQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHNGQUFzRixDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3ZELElBQUksb0JBQW9CLElBQUksT0FBTyxvQkFBb0IsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN2RSxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztJQUN6RCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQzFDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBUSxDQUFDO1FBQ3hELElBQUksR0FBRyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNqQiw0R0FBNEcsRUFDNUcsY0FBYyxFQUNkLGNBQWMsQ0FDZixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sQ0FDSixHQUFHLEtBQUssS0FBSyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFDeEMsbUJBQW1CLGNBQWMsa0RBQWtELENBQ3BGLENBQUM7UUFFRixJQUFJLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25ELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxjQUFjLEtBQUssTUFBTSxJQUFJLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3hFLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsc0NBQXNDO1FBQ3RDLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDNUIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ2pCLGtIQUFrSCxDQUNuSCxDQUFDO1lBQ0YsR0FBRyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQyxHQUFHLENBQUMsU0FBUyxDQUNYLDBKQUEwSixDQUMzSixDQUFDO1lBQ0YsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQzdCLENBQUM7UUFDRCx1REFBdUQ7UUFDdkQsR0FBRyxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFakMsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM3RCxNQUFNLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLDJEQUEyRCxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ25HLENBQUMsQ0FBQyxDQUFDO0lBRUgsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ2pCLDZGQUE2RixFQUM3RixXQUFXLENBQUMsTUFBTSxDQUNuQixDQUFDO0lBQ0YsT0FBTyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFDIn0=
|
package/dist/app.d.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
constructor(app: Application);
|
|
7
|
-
configWillLoad(): void;
|
|
1
|
+
import type { ILifecycleBoot, Application } from 'egg';
|
|
2
|
+
export default class AppBoot implements ILifecycleBoot {
|
|
3
|
+
private readonly app;
|
|
4
|
+
constructor(app: Application);
|
|
5
|
+
configWillLoad(): void;
|
|
8
6
|
}
|
|
9
|
-
//#endregion
|
|
10
|
-
export { AppBoot as default };
|
package/dist/app.js
CHANGED
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
import { preprocessConfig } from "./lib/utils.js";
|
|
2
2
|
import { SecurityConfig } from "./config/config.default.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
3
|
+
export default class AppBoot {
|
|
4
|
+
app;
|
|
5
|
+
constructor(app) {
|
|
6
|
+
this.app = app;
|
|
7
|
+
}
|
|
8
|
+
configWillLoad() {
|
|
9
|
+
const app = this.app;
|
|
10
|
+
app.config.coreMiddleware.push('securities');
|
|
11
|
+
// parse config and check if config is legal
|
|
12
|
+
const parsed = SecurityConfig.parse(app.config.security);
|
|
13
|
+
if (typeof app.config.security.csrf === 'boolean') {
|
|
14
|
+
// support old config: `config.security.csrf = false`
|
|
15
|
+
app.config.security.csrf = parsed.csrf;
|
|
16
|
+
}
|
|
17
|
+
if (app.config.security.csrf.enable) {
|
|
18
|
+
const { ignoreJSON } = app.config.security.csrf;
|
|
19
|
+
if (ignoreJSON) {
|
|
20
|
+
app.deprecate('[@eggjs/security/app] `config.security.csrf.ignoreJSON` is not safe now, please disable it.');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
preprocessConfig(app.config.security);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUQsTUFBTSxDQUFDLE9BQU8sT0FBTyxPQUFPO0lBQ1QsR0FBRyxDQUFDO0lBRXJCLFlBQVksR0FBZ0I7UUFDMUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUVELGNBQWM7UUFDWixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3Qyw0Q0FBNEM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELElBQUksT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbEQscURBQXFEO1lBQ3JELEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pDLENBQUM7UUFFRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2hELElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsR0FBRyxDQUFDLFNBQVMsQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO1lBQy9HLENBQUM7UUFDSCxDQUFDO1FBRUQsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0YifQ==
|