cloudcms-server 3.3.1-beta.0 → 3.3.1-beta.11

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 (38) hide show
  1. package/.last_command +7 -0
  2. package/broadcast/providers/redis.js +32 -57
  3. package/clients/nrp.js +117 -0
  4. package/clients/redis.js +48 -0
  5. package/duster/helpers/sample/nyt.js +6 -7
  6. package/framework/controllers.js +0 -1
  7. package/index.js +23 -13
  8. package/insight/insight.js +6 -9
  9. package/locks/providers/redis.js +29 -58
  10. package/middleware/admin/admin.js +4 -4
  11. package/middleware/awareness/awareness.js +4 -1
  12. package/middleware/awareness/plugins/editorial.js +41 -66
  13. package/middleware/awareness/plugins/resources.js +74 -0
  14. package/middleware/awareness/providers/redis.js +263 -237
  15. package/middleware/cache/providers/redis.js +134 -92
  16. package/middleware/config/config.js +41 -2
  17. package/middleware/deployment/deployment.js +19 -27
  18. package/middleware/form/form.js +18 -33
  19. package/middleware/modules/modules.js +64 -11
  20. package/middleware/proxy/proxy.js +1 -2
  21. package/middleware/stores/engines/s3.js +0 -2
  22. package/middleware/stores/stores.js +50 -6
  23. package/middleware/themes/themes.js +49 -0
  24. package/middleware/virtual-config/virtual-config.js +35 -39
  25. package/notifications/notifications.js +75 -2
  26. package/package.json +18 -20
  27. package/server/index.js +105 -23
  28. package/server/standalone.js +2 -0
  29. package/util/auth.js +10 -14
  30. package/util/cloudcms.js +22 -37
  31. package/util/proxy-factory.js +20 -8
  32. package/util/redis.js +113 -0
  33. package/util/renditions.js +11 -17
  34. package/util/request.js +117 -0
  35. package/util/util.js +31 -40
  36. package/web/socket.io/socket.io.js +4240 -2
  37. package/web/cms/ice.js +0 -109
  38. package/web/cms/preview.js +0 -106
@@ -0,0 +1,117 @@
1
+ var axios = require("axios");
2
+
3
+ // var http = require("http");
4
+ // var https = require("https");
5
+ //
6
+ // var FormData = require("form-data");
7
+
8
+ /**
9
+ * Incoming config:
10
+ *
11
+ * {
12
+ * "url": "",
13
+ * "method": "",
14
+ * "headers": {},
15
+ * "qs": {},
16
+ * "data": "" | {},
17
+ * "json": {}
18
+ * }
19
+ *
20
+ * Callback is (err, response).
21
+ *
22
+ * Where response is the Axios response object.
23
+ *
24
+ * @param config
25
+ * @param callback
26
+ */
27
+ module.exports = function(config, callback)
28
+ {
29
+ // request config - https://github.com/request/request#requestoptions-callback
30
+ // axios config - https://www.npmjs.com/package/axios
31
+
32
+ var requestConfig = {};
33
+ requestConfig.url = config.uri || config.url;
34
+ requestConfig.method = config.method || "get";
35
+ requestConfig.headers = {};
36
+
37
+ if (!config) {
38
+ config = {};
39
+ }
40
+ if (!config.headers) {
41
+ config.headers = {};
42
+ }
43
+ for (var k in config.headers)
44
+ {
45
+ var v = config.headers[k];
46
+ if (v)
47
+ {
48
+ requestConfig.headers[k.trim().toLowerCase()] = v;
49
+ }
50
+ }
51
+ // support for FormData headers
52
+ // copy form data headers
53
+ if (config.data && config.data.getHeaders)
54
+ {
55
+ var formDataHeaders = config.data.getHeaders();
56
+ for (var k in formDataHeaders)
57
+ {
58
+ var v = formDataHeaders[k];
59
+ requestConfig.headers[k] = v;
60
+ }
61
+ }
62
+
63
+ if (config.qs) {
64
+ requestConfig.params = config.qs;
65
+ }
66
+
67
+ if (config.json) {
68
+ requestConfig.data = config.json;
69
+
70
+ if (!requestConfig.headers["content-type"]) {
71
+ requestConfig.headers["content-type"] = "application/json";
72
+ }
73
+ }
74
+
75
+ if (config.data)
76
+ {
77
+ requestConfig.data = config.data;
78
+
79
+ if (!requestConfig.headers["content-type"])
80
+ {
81
+ if (!requestConfig.data)
82
+ {
83
+ if (requestConfig.data.getHeaders)
84
+ {
85
+ // assume this is a FormData and skip
86
+ }
87
+ else if (typeof(requestConfig.data) === "object")
88
+ {
89
+ // send as json
90
+ requestConfig.headers["content-type"] = "application/json";
91
+ }
92
+ }
93
+ }
94
+ }
95
+
96
+ if (config.responseType) {
97
+ requestConfig.responseType = config.responseType;
98
+ }
99
+
100
+
101
+ /*
102
+ if (requestConfig.url.toLowerCase().indexOf("https:") > -1)
103
+ {
104
+ requestConfig.httpsAgent = https.globalAgent;
105
+ }
106
+ else
107
+ {
108
+ requestConfig.httpAgent = http.globalAgent;
109
+ }
110
+ */
111
+
112
+ axios.request(requestConfig).then(function(response) {
113
+ callback(null, response, response.data);
114
+ }, function(error) {
115
+ callback(error);
116
+ });
117
+ };
package/util/util.js CHANGED
@@ -1,9 +1,6 @@
1
1
  var fs = require("fs");
2
2
  var path = require("path");
3
- var mkdirp = require('mkdirp');
4
- var request = require("request");
5
3
  var mime = require("mime");
6
- var uuidv4 = require("uuid/v4");
7
4
  var os = require("os");
8
5
  var async = require("async");
9
6
  var temp = require("temp");
@@ -22,6 +19,10 @@ var cloner = require("clone");
22
19
 
23
20
  var JSON5 = require("json5");
24
21
 
22
+ var uuidv4 = require("uuid").v4;
23
+
24
+ var request = require("./request");
25
+
25
26
  var VALID_IP_ADDRESS_REGEX_STRING = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
26
27
 
27
28
  exports = module.exports;
@@ -543,7 +544,9 @@ var rmdir = exports.rmdir = function(directoryPath)
543
544
 
544
545
  var mkdirs = exports.mkdirs = function(directoryPath, callback)
545
546
  {
546
- mkdirp(directoryPath, function(err) {
547
+ fs.mkdir(directoryPath, {
548
+ recursive: true
549
+ }, function(err) {
547
550
  callback(err);
548
551
  });
549
552
  };
@@ -682,16 +685,6 @@ var retryGitanaRequest = exports.retryGitanaRequest = function(logMethod, gitana
682
685
  });
683
686
  }
684
687
 
685
- // make sure agent is applied
686
- if (!config.agent && config.url)
687
- {
688
- var agent = getAgent(config.url);
689
- if (agent)
690
- {
691
- config.agent = agent;
692
- }
693
- }
694
-
695
688
  // make sure we have a headers object
696
689
  if (!config.headers)
697
690
  {
@@ -714,11 +707,11 @@ var retryGitanaRequest = exports.retryGitanaRequest = function(logMethod, gitana
714
707
  if (response)
715
708
  {
716
709
  // ok case (just callback)
717
- if (response.statusCode === 200)
710
+ if (response.status === 200)
718
711
  {
719
712
  return cb(err, response, body);
720
713
  }
721
- else if (response.statusCode === 429)
714
+ else if (response.status === 429)
722
715
  {
723
716
  // we heard "too many requests", so we wait a bit and then retry
724
717
  // TODO: look at HTTP headers to determine how long to wait?
@@ -726,7 +719,7 @@ var retryGitanaRequest = exports.retryGitanaRequest = function(logMethod, gitana
726
719
  logMethod("Too Many Requests heard, attempting retry (" + (currentAttempts + 1) + " / " + maxAttempts + ")");
727
720
  _retryHandler(gitana, config, currentAttempts, maxAttempts, {
728
721
  "message": "Heard 429 Too Many Requests",
729
- "code": response.statusCode,
722
+ "code": response.status,
730
723
  "body": body,
731
724
  "err": err
732
725
  }, cb);
@@ -762,7 +755,7 @@ var retryGitanaRequest = exports.retryGitanaRequest = function(logMethod, gitana
762
755
  // refresh the access token and then retry
763
756
  return _invalidTokenRetryHandler(gitana, config, currentAttempts, maxAttempts, {
764
757
  "message": "Unable to refresh access token and retry",
765
- "code": response.statusCode,
758
+ "code": response.status,
766
759
  "body": body,
767
760
  "err": err
768
761
  }, cb);
@@ -1081,7 +1074,6 @@ var applyResponseContentType = exports.applyResponseContentType = function(respo
1081
1074
  {
1082
1075
  var ext = path.extname(filename);
1083
1076
  if (ext) {
1084
- //contentType = mime.lookup(ext);
1085
1077
  contentType = lookupMimeType(ext);
1086
1078
  }
1087
1079
  }
@@ -1092,7 +1084,6 @@ var applyResponseContentType = exports.applyResponseContentType = function(respo
1092
1084
  var ext = path.extname(filename);
1093
1085
  if (ext)
1094
1086
  {
1095
- //contentType = mime.lookup(ext);
1096
1087
  contentType = lookupMimeType(ext);
1097
1088
  }
1098
1089
  }
@@ -1208,7 +1199,9 @@ var handleSendFileError = exports.handleSendFileError = function(req, res, fileP
1208
1199
 
1209
1200
  var createDirectory = exports.createDirectory = function(directoryPath, callback)
1210
1201
  {
1211
- mkdirp(directoryPath, function(err) {
1202
+ fs.mkdir(directoryPath, {
1203
+ "recursive": true
1204
+ }, function(err) {
1212
1205
 
1213
1206
  if (err) {
1214
1207
  return callback(err);
@@ -1379,7 +1372,7 @@ var isUndefined = exports.isUndefined = function(obj) {
1379
1372
  var lookupMimeType = exports.lookupMimeType = function(ext) {
1380
1373
 
1381
1374
  // rely on the mimetype library for base handling
1382
- var mimetype = mime.lookup(ext);
1375
+ var mimetype = mime.getType(ext);
1383
1376
 
1384
1377
  var extension = ext;
1385
1378
  if (extension && extension.indexOf(".") === 0)
@@ -1784,10 +1777,11 @@ var zip = exports.zip = function(directoryPath, writableStream)
1784
1777
  * @param {string} protocol
1785
1778
  * @param {string} host
1786
1779
  * @param [number|string] port
1780
+ * @param {string} path
1787
1781
  *
1788
1782
  * @type {Function}
1789
1783
  */
1790
- var asURL = exports.asURL = function(protocol, host, port)
1784
+ var asURL = exports.asURL = function(protocol, host, port, path)
1791
1785
  {
1792
1786
  // protocol lower case
1793
1787
  protocol = protocol.toLowerCase();
@@ -1812,7 +1806,20 @@ var asURL = exports.asURL = function(protocol, host, port)
1812
1806
  url += ":" + port;
1813
1807
  }
1814
1808
  }
1815
-
1809
+
1810
+ // include url "path" if defined
1811
+ if (path) {
1812
+ path = '/' + path;
1813
+ path = path.replace(/\/+/g, '/'); // ensure no extra '/' characters
1814
+ if (path.endsWith('/')) {
1815
+ // remove trailing '/' character
1816
+ path = path.substring(0, path.length - 1);
1817
+ }
1818
+ if (path) {
1819
+ url += path;
1820
+ }
1821
+ }
1822
+
1816
1823
  return url;
1817
1824
  };
1818
1825
 
@@ -1863,22 +1870,6 @@ var isHttp = exports.isHttp = function(url)
1863
1870
  return url.toLowerCase().startsWith("http://");
1864
1871
  };
1865
1872
 
1866
- var getAgent = exports.getAgent = function(url)
1867
- {
1868
- var agent = http.globalAgent;
1869
-
1870
- if (url.indexOf("https://") === 0)
1871
- {
1872
- agent = https.globalAgent;
1873
- }
1874
- else if (url.indexOf("http://") === 0)
1875
- {
1876
- agent = http.globalAgent;
1877
- }
1878
-
1879
- return agent;
1880
- };
1881
-
1882
1873
  /*
1883
1874
  var selectLeastPrivilegedGitana = exports.selectLeastPrivilegedGitana = function(req)
1884
1875
  {