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