yakuza0 2.21.0 → 2.21.1-beta.0

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.server.csp.enabled) {
111
+ var cspStr = '';
112
+
113
+ if (_config2.default.security.isStupid && 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.0",
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,25 @@ var render = function () {
298
296
  appBuildCacheDirName: '.nuxt',
299
297
  autoOpenBrowser: true,
300
298
  cookieSameSite: 'Lax',
301
- cspSwitch: true,
302
- cspStrict: false,
299
+ // cspSwitch: true,
300
+ // cspStrict: false,
301
+ // cspStrictValue: "default-src 'self'",
302
+ // sriSwitch: false,
303
+ // sriTimeout: 2000,
303
304
  // ...mainConf.server,
304
305
  // ...ykConf.server,
305
306
  // csp,
307
+ csp: {
308
+ enabled: true,
309
+ strict: false,
310
+ strictValue: false,
311
+ policies: _def.csp,
312
+ directives: {}
313
+ },
314
+ sri: {
315
+ enabled: false,
316
+ timeout: 2000
317
+ },
306
318
  ddos: {
307
319
  enabled: true,
308
320
  maxRequest: 6666,
@@ -584,13 +596,13 @@ var render = function () {
584
596
  };
585
597
 
586
598
  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] || [])));
599
+ if (cspConf.server && cspConf.server.csp && cspConf.server.csp.policies && _yakuza._.isPlainObject(cspConf.server.csp.policies)) {
600
+ _yakuza._.forEach(conf.server.csp.policies, function (v, key) {
601
+ 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
602
  });
591
603
 
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] || [])));
604
+ _yakuza._.forEach(cspConf.server.csp.policies, function (v, key) {
605
+ 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
606
  });
595
607
  }
596
608
  };
@@ -622,7 +634,7 @@ var render = function () {
622
634
  allConf.forEach(function (chunkConf) {
623
635
  setConfValue(chunkConf);
624
636
  });
625
- conf.server.csp = _def.csp;
637
+ conf.server.csp.policies = _def.csp;
626
638
  allConf.forEach(function (chunkConf) {
627
639
  setConfCSP(chunkConf);
628
640
  });
@@ -683,7 +695,7 @@ var render = function () {
683
695
  });
684
696
 
685
697
  _context2.t0 = conf.dkyMode;
686
- _context2.next = _context2.t0 === "dev" ? 16 : _context2.t0 === "prod" ? 18 : _context2.t0 === "stupid" ? 23 : _context2.t0 === "tire" ? 29 : 34;
698
+ _context2.next = _context2.t0 === "dev" ? 16 : _context2.t0 === "prod" ? 18 : _context2.t0 === "stupid" ? 23 : _context2.t0 === "tire" ? 30 : 35;
687
699
  break;
688
700
 
689
701
  case 16:
@@ -692,7 +704,7 @@ var render = function () {
692
704
  // conf.security.helmet = true;
693
705
  // conf.server.f5Offline = false;
694
706
  conf.security.isDev = true;
695
- return _context2.abrupt('break', 34);
707
+ return _context2.abrupt('break', 35);
696
708
 
697
709
  case 18:
698
710
  conf.security.encrypt = "sm";
@@ -700,7 +712,7 @@ var render = function () {
700
712
  conf.security.helmet = true;
701
713
  // conf.server.f5Offline = false;
702
714
  conf.security.isProd = true;
703
- return _context2.abrupt('break', 34);
715
+ return _context2.abrupt('break', 35);
704
716
 
705
717
  case 23:
706
718
  conf.security.encrypt = "sm";
@@ -708,18 +720,19 @@ var render = function () {
708
720
  conf.security.helmet = true;
709
721
  // conf.server.f5Offline = false;
710
722
  conf.security.isStupid = true;
711
- conf.server.cspSwitch = true;
712
- return _context2.abrupt('break', 34);
723
+ conf.server.csp.enabled = true;
724
+ conf.server.sri.enabled = true;
725
+ return _context2.abrupt('break', 35);
713
726
 
714
- case 29:
727
+ case 30:
715
728
  conf.security.encrypt = "none";
716
729
  conf.security.stupid = false;
717
730
  conf.security.helmet = false;
718
731
  // conf.server.f5Offline = false;
719
732
  conf.security.isTire = true;
720
- return _context2.abrupt('break', 34);
733
+ return _context2.abrupt('break', 35);
721
734
 
722
- case 34:
735
+ case 35:
723
736
 
724
737
  // conf.router.config['app.examples'].enabled = true;
725
738
  if (conf.server.yk4Addr) {
@@ -796,10 +809,30 @@ var render = function () {
796
809
  conf.proxyServer.proxy[conf.proxyServer.ws.key] = orbAddr;
797
810
  conf.server.orbAddr = orbAddr;
798
811
 
799
- conf.server.csp.imgSrc = _yakuza._.uniq([].concat((0, _toConsumableArray3.default)(conf.server.csp.imgSrc || []), (0, _toConsumableArray3.default)(conf.server.tfs.fastdfs.domain)));
812
+ conf.server.csp.policies.imgSrc = _yakuza._.uniq([].concat((0, _toConsumableArray3.default)(conf.server.csp.policies.imgSrc || []), (0, _toConsumableArray3.default)(conf.server.tfs.fastdfs.domain)));
813
+
814
+ // csp
815
+ directives = {};
816
+
817
+ _yakuza._.forEach(conf.server.csp.policies, function (v, key) {
818
+ directives[_yakuza._.kebabCase(key)] = _yakuza._.compact(((typeof v === 'undefined' ? 'undefined' : (0, _typeof3.default)(v)) === "object" ? v : []).map(function (k) {
819
+ if (conf.server.csp.strict) {
820
+ if (k === "*" || k.indexOf('*') !== -1 || k === "data:" || k === "'unsafe-eval'" || k === "'unsafe-inline'") {
821
+ return '';
822
+ }
823
+ }
824
+
825
+ return k;
826
+ }));
827
+ });
828
+
829
+ if (!conf.security.isStupid) {
830
+ directives = _yakuza._.omit(directives, ['require-sri-for']);
831
+ }
832
+ conf.server.csp.directives = directives;
800
833
 
801
834
  // const appPortUsed = [];
802
- _context2.next = 51;
835
+ _context2.next = 56;
803
836
  return _yakuza._.asyncMap(conf.router.config, function () {
804
837
  var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(v, key) {
805
838
  var name, arr, length, num;
@@ -981,7 +1014,7 @@ var render = function () {
981
1014
  };
982
1015
  }());
983
1016
 
984
- case 51:
1017
+ case 56:
985
1018
  // console.log(conf.router.config);
986
1019
 
987
1020
  conf.shareRule.app = conf.shareRule.app.map(function (ap) {
@@ -1081,7 +1114,7 @@ var render = function () {
1081
1114
 
1082
1115
  return _context2.abrupt('return', { conf: conf });
1083
1116
 
1084
- case 58:
1117
+ case 63:
1085
1118
  case 'end':
1086
1119
  return _context2.stop();
1087
1120
  }