yakuza0 2.21.0 → 2.21.1-beta.2

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/nuxt/head.js CHANGED
@@ -28,6 +28,14 @@ var _config2 = _interopRequireDefault(_config);
28
28
 
29
29
  var _yakuza = require("yakuza1");
30
30
 
31
+ var _syncRequest = require("sync-request");
32
+
33
+ var _syncRequest2 = _interopRequireDefault(_syncRequest);
34
+
35
+ var _crypto = require("crypto");
36
+
37
+ var _csp = require("../utils/csp");
38
+
31
39
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
32
40
 
33
41
  exports.default = function (config) {
@@ -53,6 +61,14 @@ exports.default = function (config) {
53
61
  var basePath = _yakuza._.bothAddFix(config.appConf.server.basePath, "/");
54
62
 
55
63
  _yakuza._.forEach(head, function (v, key) {
64
+ // switch (key) {
65
+ // case "script":
66
+ // case "style":
67
+ //
68
+ // break;
69
+ // default:
70
+ // }
71
+
56
72
  if ((typeof v === "undefined" ? "undefined" : (0, _typeof3.default)(v)) === 'object') {
57
73
  v = _yakuza._.map(v, function (gv) {
58
74
  if (_yakuza._.startsWith(gv.src, '/')) {
@@ -61,6 +77,29 @@ exports.default = function (config) {
61
77
  if (_yakuza._.startsWith(gv.href, '/')) {
62
78
  gv.href = basePath + _yakuza._.trimStart(gv.href, "/");
63
79
  }
80
+
81
+ var iUrl = gv.src || gv.href;
82
+ if ((_config2.default.security.isStupid || _config2.default.server.sri.enabled) && iUrl && _yakuza._.startsWith(iUrl, 'http')) {
83
+ try {
84
+ if (!gv.integrity) {
85
+ var res = (0, _syncRequest2.default)('GET', iUrl, {
86
+ timeout: parseInt(_config2.default.server.sri.timeout, 10) || 5000,
87
+ headers: {
88
+ "Host": (0, _yakuza.jsUrl)('hostname', iUrl),
89
+ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36"
90
+ }
91
+ });
92
+ var iBody = res.getBody('utf8');
93
+ var hash = (0, _crypto.createHash)('sha384').update(iBody).digest('base64');
94
+ gv.integrity = "sha384-" + hash;
95
+ }
96
+
97
+ if (gv.integrity) {
98
+ gv.crossorigin = "anonymous";
99
+ }
100
+ } catch (e) {}
101
+ }
102
+
64
103
  return gv;
65
104
  });
66
105
  }
@@ -68,6 +107,31 @@ exports.default = function (config) {
68
107
  head[key] = v;
69
108
  });
70
109
 
110
+ if (_config2.default.security.isStupid) {
111
+ var cspStr = '';
112
+
113
+ if (typeof _config2.default.server.csp.custom === "string") {
114
+ cspStr = _config2.default.server.csp.custom;
115
+ } else {
116
+ var _directives = _config2.default.server.csp.directives;
117
+ _yakuza._.forEach(_directives, function (v, key) {
118
+ cspStr += key + " " + v.join(' ') + '; ';
119
+ });
120
+ cspStr = cspStr.substring(0, cspStr.length - 2);
121
+ }
122
+
123
+ var metaObj = {
124
+ 'http-equiv': 'Content-Security-Policy',
125
+ content: cspStr
126
+ };
127
+
128
+ if ((0, _typeof3.default)(head['meta']) === 'object') {
129
+ head['meta'].push(metaObj);
130
+ } else {
131
+ head['meta'] = [metaObj];
132
+ }
133
+ }
134
+
71
135
  return head;
72
136
  };
73
137
 
@@ -8,34 +8,19 @@ var _config = require('../../config');
8
8
 
9
9
  var _config2 = _interopRequireDefault(_config);
10
10
 
11
- var _yakuza = require('yakuza1');
12
-
13
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
12
 
15
13
  exports.default = function (config) {
16
- var csp = _config2.default.server.csp;
17
- var cspSwitch = _config2.default.server.cspSwitch;
18
-
19
- var cspObj = {};
20
- _yakuza._.forEach(csp, function (v, key) {
21
- cspObj[_yakuza._.kebabCase(key)] = _yakuza._.compact(v.map(function (k) {
22
- if (_config2.default.server.cspStrict) {
23
- if (k === "*" || k === "data:" || k === "'unsafe-eval'" || k === "'unsafe-inline'") {
24
- return '';
25
- }
26
- }
27
-
28
- return k;
29
- }));
30
- });
14
+ var cspSwitch = _config2.default.server.csp.enabled;
15
+ var directives = _config2.default.server.csp.directives;
31
16
 
32
- if (!_config2.default.security.stupid) {
33
- cspObj = _yakuza._.omit(cspObj, ['require-sri-for']);
17
+ if (_config2.default.security.isStupid) {
18
+ cspSwitch = false;
34
19
  }
35
20
 
36
21
  return cspSwitch ? {
37
22
  enabled: true,
38
- policies: cspObj,
23
+ policies: directives,
39
24
  hashAlgorithm: 'sha256',
40
25
  reportOnly: false
41
26
  // addMeta: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yakuza0",
3
- "version": "2.21.0",
3
+ "version": "2.21.1-beta.2",
4
4
  "description": "yakuza0 with nuxt",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -99,15 +99,16 @@
99
99
  "stylelint-webpack-plugin": "^3.1.0",
100
100
  "stylus": "^0.54.7",
101
101
  "stylus-loader": "^3.0.2",
102
+ "sync-request": "^6.1.0",
102
103
  "tcp-port-used": "^1.0.1",
103
104
  "ua-parser-js": "^0.7.20",
104
105
  "v8-compile-cache": "^2.0.2",
105
- "yakuza1": "2.6.7"
106
+ "yakuza1": "2.6.8"
106
107
  },
107
108
  "peerDependencies": {
108
109
  "@rdc/nuxt": "2.15.8-0",
109
110
  "core-js": "3.10.1",
110
111
  "eslint": "7.2.0",
111
- "yakuza1": "2.6.7"
112
+ "yakuza1": "2.6.8"
112
113
  }
113
114
  }
@@ -96,12 +96,17 @@ var _httpProxy = require('http-proxy');
96
96
 
97
97
  var _httpProxy2 = _interopRequireDefault(_httpProxy);
98
98
 
99
+ var _csp = require('../../utils/csp');
100
+
99
101
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
100
102
 
101
103
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
102
104
 
103
- // import {symmetry as gs, asymmetric as as} from 'yakuza1/lib/encrypt/general';
104
- // import koaJwt from 'koa-jwt';
105
+ // import {getCache, keys} from "../cache/conf";
106
+ // import csrfPri from "./csrfPri";
107
+ // import csrfPub from "yakuza1/lib/cert/csrfPub";
108
+
109
+ // import nocache from 'nocache';
105
110
  var codeMessage = {
106
111
  200: '服务器成功返回请求的数据。',
107
112
  201: '新建或修改数据成功。',
@@ -119,11 +124,10 @@ var codeMessage = {
119
124
  503: '服务不可用,服务器暂时过载或维护。',
120
125
  504: '网关超时。'
121
126
  };
122
- // import {getCache, keys} from "../cache/conf";
123
- // import csrfPri from "./csrfPri";
124
- // import csrfPub from "yakuza1/lib/cert/csrfPub";
127
+ // import helmet from 'helmet';
125
128
 
126
- // import nocache from 'nocache';
129
+ // import {symmetry as gs, asymmetric as as} from 'yakuza1/lib/encrypt/general';
130
+ // import koaJwt from 'koa-jwt';
127
131
 
128
132
 
129
133
  var apiErr = function apiErr(options, ctx) {
@@ -167,13 +171,13 @@ var ssrReqAllow = function ssrReqAllow(ctx) {
167
171
  var ddos = {};
168
172
 
169
173
  exports.default = function () {
170
- var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(_ref2) {
174
+ var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13(_ref2) {
171
175
  var app = _ref2.app,
172
176
  config = _ref2.config;
173
177
  var cspConnectSrcVerify, appCp, appCpApiV1, jwtVerC, omConf, cm;
174
- return _regenerator2.default.wrap(function _callee12$(_context12) {
178
+ return _regenerator2.default.wrap(function _callee13$(_context13) {
175
179
  while (1) {
176
- switch (_context12.prev = _context12.next) {
180
+ switch (_context13.prev = _context13.next) {
177
181
  case 0:
178
182
  // if (yConf.security.isTire) {
179
183
  // const proxy = httpProxy.createServer({
@@ -759,13 +763,42 @@ exports.default = function () {
759
763
  if (_config2.default.security.helmet) {
760
764
  app.use((0, _koaHelmet2.default)());
761
765
 
762
- if (_config2.default.security.stupid) {
766
+ if (_config2.default.security.isStupid) {
767
+ if (typeof _config2.default.server.csp.custom === "string") {
768
+ app.use(function () {
769
+ var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(ctx, next) {
770
+ return _regenerator2.default.wrap(function _callee9$(_context9) {
771
+ while (1) {
772
+ switch (_context9.prev = _context9.next) {
773
+ case 0:
774
+ ctx.set('Content-Security-Policy', _config2.default.server.csp.custom);
775
+ ctx.set('X-Content-Security-Policy', _config2.default.server.csp.custom);
776
+ _context9.next = 4;
777
+ return next();
778
+
779
+ case 4:
780
+ case 'end':
781
+ return _context9.stop();
782
+ }
783
+ }
784
+ }, _callee9, undefined);
785
+ }));
786
+
787
+ return function (_x19, _x20) {
788
+ return _ref12.apply(this, arguments);
789
+ };
790
+ }());
791
+ } else {
792
+ app.use(_koaHelmet2.default.contentSecurityPolicy({
793
+ directives: _config2.default.server.csp.directives
794
+ }));
795
+ }
763
796
  appCpApiV1(function () {
764
- var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(ctx, next) {
797
+ var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(ctx, next) {
765
798
  var isNext, rHost, rOrigin, rReferer;
766
- return _regenerator2.default.wrap(function _callee9$(_context9) {
799
+ return _regenerator2.default.wrap(function _callee10$(_context10) {
767
800
  while (1) {
768
- switch (_context9.prev = _context9.next) {
801
+ switch (_context10.prev = _context10.next) {
769
802
  case 0:
770
803
  isNext = true;
771
804
  rHost = (0, _server.jsUrl)('hostname', ctx.get('host'));
@@ -777,15 +810,15 @@ exports.default = function () {
777
810
  }
778
811
 
779
812
  if (!isNext) {
780
- _context9.next = 10;
813
+ _context10.next = 10;
781
814
  break;
782
815
  }
783
816
 
784
- _context9.next = 8;
817
+ _context10.next = 8;
785
818
  return next();
786
819
 
787
820
  case 8:
788
- _context9.next = 11;
821
+ _context10.next = 11;
789
822
  break;
790
823
 
791
824
  case 10:
@@ -796,14 +829,14 @@ exports.default = function () {
796
829
 
797
830
  case 11:
798
831
  case 'end':
799
- return _context9.stop();
832
+ return _context10.stop();
800
833
  }
801
834
  }
802
- }, _callee9, undefined);
835
+ }, _callee10, undefined);
803
836
  }));
804
837
 
805
- return function (_x19, _x20) {
806
- return _ref12.apply(this, arguments);
838
+ return function (_x21, _x22) {
839
+ return _ref13.apply(this, arguments);
807
840
  };
808
841
  }()
809
842
  // if (ctx.method === 'GET' || ctx.method === 'POST' || jwtVerC(ctx.path)) {
@@ -817,29 +850,29 @@ exports.default = function () {
817
850
  );
818
851
 
819
852
  app.use(function () {
820
- var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(ctx, next) {
821
- return _regenerator2.default.wrap(function _callee10$(_context10) {
853
+ var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(ctx, next) {
854
+ return _regenerator2.default.wrap(function _callee11$(_context11) {
822
855
  while (1) {
823
- switch (_context10.prev = _context10.next) {
856
+ switch (_context11.prev = _context11.next) {
824
857
  case 0:
825
858
  // ctx.set('Surrogate-Control', 'no-store');
826
859
  // ctx.set('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate');
827
860
  // ctx.set('Pragma', 'no-cache');
828
861
  // ctx.set('Expires', '0');
829
862
  (0, _control.noCache)(ctx);
830
- _context10.next = 3;
863
+ _context11.next = 3;
831
864
  return next();
832
865
 
833
866
  case 3:
834
867
  case 'end':
835
- return _context10.stop();
868
+ return _context11.stop();
836
869
  }
837
870
  }
838
- }, _callee10, undefined);
871
+ }, _callee11, undefined);
839
872
  }));
840
873
 
841
- return function (_x21, _x22) {
842
- return _ref13.apply(this, arguments);
874
+ return function (_x23, _x24) {
875
+ return _ref14.apply(this, arguments);
843
876
  };
844
877
  }());
845
878
  }
@@ -853,10 +886,10 @@ exports.default = function () {
853
886
  }
854
887
 
855
888
  app.use(function () {
856
- var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(ctx, next) {
857
- return _regenerator2.default.wrap(function _callee11$(_context11) {
889
+ var _ref15 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(ctx, next) {
890
+ return _regenerator2.default.wrap(function _callee12$(_context12) {
858
891
  while (1) {
859
- switch (_context11.prev = _context11.next) {
892
+ switch (_context12.prev = _context12.next) {
860
893
  case 0:
861
894
  // const csrfCookie = ctx.cookies.get(variable.csrfCookie, {signed: false});
862
895
  // console.log(ctx.path, ctx.req.headers.cookie, 111);
@@ -872,28 +905,28 @@ exports.default = function () {
872
905
  cookieDomain: config.appConf.cookieDomain || _server.Cookies.getDefCookieDomain(ctx.hostname)
873
906
  }, ctx.req.crossParams);
874
907
 
875
- _context11.next = 3;
908
+ _context12.next = 3;
876
909
  return next();
877
910
 
878
911
  case 3:
879
912
  case 'end':
880
- return _context11.stop();
913
+ return _context12.stop();
881
914
  }
882
915
  }
883
- }, _callee11, undefined);
916
+ }, _callee12, undefined);
884
917
  }));
885
918
 
886
- return function (_x23, _x24) {
887
- return _ref14.apply(this, arguments);
919
+ return function (_x25, _x26) {
920
+ return _ref15.apply(this, arguments);
888
921
  };
889
922
  }());
890
923
 
891
924
  case 17:
892
925
  case 'end':
893
- return _context12.stop();
926
+ return _context13.stop();
894
927
  }
895
928
  }
896
- }, _callee12, undefined);
929
+ }, _callee13, undefined);
897
930
  }));
898
931
 
899
932
  return function (_x) {
package/utils/csp.js ADDED
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.directives = undefined;
7
+
8
+ var _yakuza = require("yakuza1");
9
+
10
+ var _config = require("../config");
11
+
12
+ var _config2 = _interopRequireDefault(_config);
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ var directives = exports.directives = function directives() {
17
+ var csp = _config2.default.server.csp;
18
+ // const cspSwitch = yConf.server.cspSwitch;
19
+
20
+ var cspObj = {};
21
+ _yakuza._.forEach(csp, function (v, key) {
22
+ cspObj[_yakuza._.kebabCase(key)] = _yakuza._.compact(v.map(function (k) {
23
+ if (_config2.default.server.cspStrict) {
24
+ if (k === "*" || k.indexOf('*') !== -1 || k === "data:" || k === "'unsafe-eval'" || k === "'unsafe-inline'") {
25
+ return '';
26
+ }
27
+ }
28
+
29
+ return k;
30
+ }));
31
+ });
32
+
33
+ if (!_config2.default.security.stupid) {
34
+ cspObj = _yakuza._.omit(cspObj, ['require-sri-for']);
35
+ }
36
+
37
+ return cspObj;
38
+ };
@@ -69,8 +69,6 @@ var _getPort = require('get-port');
69
69
 
70
70
  var _getPort2 = _interopRequireDefault(_getPort);
71
71
 
72
- var _conf = require('./conf');
73
-
74
72
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
75
73
 
76
74
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -189,7 +187,7 @@ var render = function () {
189
187
  ykServerEnv = _ref.ykServerEnv,
190
188
  ykPkg = _ref.pkg;
191
189
 
192
- var _ykConfig, ykConf, processEnv, aliasDir, conf, cspLoop, setConfValue, setConfCSP, setConf, hostname, port, ykServer, orbAddr, tip;
190
+ var _ykConfig, ykConf, processEnv, aliasDir, conf, cspLoop, setConfValue, setConfCSP, setConf, hostname, port, ykServer, orbAddr, directives, tip;
193
191
 
194
192
  return _regenerator2.default.wrap(function _callee2$(_context2) {
195
193
  while (1) {
@@ -298,11 +296,19 @@ var render = function () {
298
296
  appBuildCacheDirName: '.nuxt',
299
297
  autoOpenBrowser: true,
300
298
  cookieSameSite: 'Lax',
301
- cspSwitch: true,
302
- cspStrict: false,
303
299
  // ...mainConf.server,
304
300
  // ...ykConf.server,
305
- // csp,
301
+ csp: {
302
+ enabled: true,
303
+ strict: false,
304
+ custom: false,
305
+ policies: {},
306
+ directives: {}
307
+ },
308
+ sri: {
309
+ enabled: false,
310
+ timeout: 2000
311
+ },
306
312
  ddos: {
307
313
  enabled: true,
308
314
  maxRequest: 6666,
@@ -584,13 +590,13 @@ var render = function () {
584
590
  };
585
591
 
586
592
  cspLoop = function cspLoop(cspConf) {
587
- if (cspConf.server && cspConf.server.csp && _yakuza._.isPlainObject(cspConf.server.csp)) {
588
- _yakuza._.forEach(conf.server.csp, function (v, key) {
589
- conf.server.csp[key] = _yakuza._.uniq([].concat((0, _toConsumableArray3.default)(conf.server.csp[key]), (0, _toConsumableArray3.default)(cspConf.server.csp[key] || [])));
593
+ if (cspConf.server && cspConf.server.csp && cspConf.server.csp.policies && _yakuza._.isPlainObject(cspConf.server.csp.policies)) {
594
+ _yakuza._.forEach(conf.server.csp.policies, function (v, key) {
595
+ conf.server.csp.policies[key] = _yakuza._.uniq([].concat((0, _toConsumableArray3.default)(conf.server.csp.policies[key]), (0, _toConsumableArray3.default)(cspConf.server.csp.policies[key] || [])));
590
596
  });
591
597
 
592
- _yakuza._.forEach(cspConf.server.csp, function (v, key) {
593
- conf.server.csp[key] = _yakuza._.uniq([].concat((0, _toConsumableArray3.default)(conf.server.csp[key] || []), (0, _toConsumableArray3.default)(cspConf.server.csp[key] || [])));
598
+ _yakuza._.forEach(cspConf.server.csp.policies, function (v, key) {
599
+ conf.server.csp.policies[key] = _yakuza._.uniq([].concat((0, _toConsumableArray3.default)(conf.server.csp.policies[key] || []), (0, _toConsumableArray3.default)(cspConf.server.csp.policies[key] || [])));
594
600
  });
595
601
  }
596
602
  };
@@ -622,7 +628,7 @@ var render = function () {
622
628
  allConf.forEach(function (chunkConf) {
623
629
  setConfValue(chunkConf);
624
630
  });
625
- conf.server.csp = _def.csp;
631
+ conf.server.csp.policies = _def.csp;
626
632
  allConf.forEach(function (chunkConf) {
627
633
  setConfCSP(chunkConf);
628
634
  });
@@ -683,7 +689,7 @@ var render = function () {
683
689
  });
684
690
 
685
691
  _context2.t0 = conf.dkyMode;
686
- _context2.next = _context2.t0 === "dev" ? 16 : _context2.t0 === "prod" ? 18 : _context2.t0 === "stupid" ? 23 : _context2.t0 === "tire" ? 29 : 34;
692
+ _context2.next = _context2.t0 === "dev" ? 16 : _context2.t0 === "prod" ? 18 : _context2.t0 === "stupid" ? 23 : _context2.t0 === "tire" ? 30 : 35;
687
693
  break;
688
694
 
689
695
  case 16:
@@ -692,7 +698,7 @@ var render = function () {
692
698
  // conf.security.helmet = true;
693
699
  // conf.server.f5Offline = false;
694
700
  conf.security.isDev = true;
695
- return _context2.abrupt('break', 34);
701
+ return _context2.abrupt('break', 35);
696
702
 
697
703
  case 18:
698
704
  conf.security.encrypt = "sm";
@@ -700,7 +706,7 @@ var render = function () {
700
706
  conf.security.helmet = true;
701
707
  // conf.server.f5Offline = false;
702
708
  conf.security.isProd = true;
703
- return _context2.abrupt('break', 34);
709
+ return _context2.abrupt('break', 35);
704
710
 
705
711
  case 23:
706
712
  conf.security.encrypt = "sm";
@@ -708,18 +714,19 @@ var render = function () {
708
714
  conf.security.helmet = true;
709
715
  // conf.server.f5Offline = false;
710
716
  conf.security.isStupid = true;
711
- conf.server.cspSwitch = true;
712
- return _context2.abrupt('break', 34);
717
+ conf.server.csp.enabled = true;
718
+ conf.server.sri.enabled = true;
719
+ return _context2.abrupt('break', 35);
713
720
 
714
- case 29:
721
+ case 30:
715
722
  conf.security.encrypt = "none";
716
723
  conf.security.stupid = false;
717
724
  conf.security.helmet = false;
718
725
  // conf.server.f5Offline = false;
719
726
  conf.security.isTire = true;
720
- return _context2.abrupt('break', 34);
727
+ return _context2.abrupt('break', 35);
721
728
 
722
- case 34:
729
+ case 35:
723
730
 
724
731
  // conf.router.config['app.examples'].enabled = true;
725
732
  if (conf.server.yk4Addr) {
@@ -796,10 +803,30 @@ var render = function () {
796
803
  conf.proxyServer.proxy[conf.proxyServer.ws.key] = orbAddr;
797
804
  conf.server.orbAddr = orbAddr;
798
805
 
799
- conf.server.csp.imgSrc = _yakuza._.uniq([].concat((0, _toConsumableArray3.default)(conf.server.csp.imgSrc || []), (0, _toConsumableArray3.default)(conf.server.tfs.fastdfs.domain)));
806
+ conf.server.csp.policies.imgSrc = _yakuza._.uniq([].concat((0, _toConsumableArray3.default)(conf.server.csp.policies.imgSrc || []), (0, _toConsumableArray3.default)(conf.server.tfs.fastdfs.domain)));
807
+
808
+ // csp
809
+ directives = {};
810
+
811
+ _yakuza._.forEach(conf.server.csp.policies, function (v, key) {
812
+ directives[_yakuza._.kebabCase(key)] = _yakuza._.compact(((typeof v === 'undefined' ? 'undefined' : (0, _typeof3.default)(v)) === "object" ? v : []).map(function (k) {
813
+ if (conf.server.csp.strict) {
814
+ if (k === "*" || k.indexOf('*') !== -1 || k === "data:" || k === "'unsafe-eval'" || k === "'unsafe-inline'") {
815
+ return '';
816
+ }
817
+ }
818
+
819
+ return k;
820
+ }));
821
+ });
822
+
823
+ if (!conf.security.isStupid) {
824
+ directives = _yakuza._.omit(directives, ['require-sri-for']);
825
+ }
826
+ conf.server.csp.directives = directives;
800
827
 
801
828
  // const appPortUsed = [];
802
- _context2.next = 51;
829
+ _context2.next = 56;
803
830
  return _yakuza._.asyncMap(conf.router.config, function () {
804
831
  var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(v, key) {
805
832
  var name, arr, length, num;
@@ -981,7 +1008,7 @@ var render = function () {
981
1008
  };
982
1009
  }());
983
1010
 
984
- case 51:
1011
+ case 56:
985
1012
  // console.log(conf.router.config);
986
1013
 
987
1014
  conf.shareRule.app = conf.shareRule.app.map(function (ap) {
@@ -1081,7 +1108,7 @@ var render = function () {
1081
1108
 
1082
1109
  return _context2.abrupt('return', { conf: conf });
1083
1110
 
1084
- case 58:
1111
+ case 63:
1085
1112
  case 'end':
1086
1113
  return _context2.stop();
1087
1114
  }