cloudcms-server 3.3.1-beta.9 → 4.0.0-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.
Files changed (108) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/broadcast/broadcast.js +6 -3
  4. package/broadcast/providers/redis.js +24 -49
  5. package/clients/nrp.js +117 -0
  6. package/clients/redis.js +64 -0
  7. package/d1/index.js +629 -0
  8. package/d1/index.js.works +203 -0
  9. package/d1/package.json +86 -0
  10. package/d1/package.json.works +14 -0
  11. package/duster/helpers/sample/nyt.js +2 -1
  12. package/framework/controllers.js +4 -4
  13. package/index.js +21 -14
  14. package/insight/insight.js +1 -1
  15. package/launchpad/index.js +203 -11
  16. package/launchpad/launchers/cluster.js +103 -110
  17. package/launchpad/launchers/redis.js +70 -0
  18. package/launchpad/launchers/single.js +36 -22
  19. package/locks/locks.js +63 -9
  20. package/locks/providers/cluster.js +3 -1
  21. package/locks/providers/memory.js +10 -7
  22. package/locks/providers/redis.js +62 -82
  23. package/middleware/admin/admin.js +3 -3
  24. package/middleware/authentication/adapters/session.js +11 -8
  25. package/middleware/authentication/authentication.js +28 -16
  26. package/middleware/authentication/authenticators/default.js +5 -2
  27. package/middleware/authentication/authenticators/session.js +5 -2
  28. package/middleware/authentication/providers/saml.js +1 -1
  29. package/middleware/authorization/authorization.js +11 -8
  30. package/middleware/awareness/awareness.js +55 -31
  31. package/middleware/awareness/plugins/editorial.js +4 -4
  32. package/middleware/awareness/providers/abstract-async.js +107 -84
  33. package/middleware/awareness/providers/abstract.js +1 -1
  34. package/middleware/awareness/providers/memory.js +0 -14
  35. package/middleware/awareness/providers/redis.js +186 -279
  36. package/middleware/cache/cache.js +4 -2
  37. package/middleware/cache/providers/redis.js +127 -89
  38. package/middleware/cache/providers/shared-memory.js +3 -3
  39. package/middleware/cloudcms/cloudcms.js +22 -16
  40. package/middleware/form/form.js +3 -3
  41. package/middleware/modules/modules.js +6 -3
  42. package/middleware/proxy/proxy.js +8 -21
  43. package/middleware/stores/stores.js +2 -2
  44. package/middleware/virtual-config/virtual-config.js +11 -8
  45. package/middleware/wcm/wcm.js +4 -4
  46. package/notifications/notifications.js +2 -2
  47. package/package.json +29 -25
  48. package/server/index.js +504 -415
  49. package/server/standalone.js +9 -0
  50. package/temp/clusterlock/index.js +3 -3
  51. package/temp/clusterlock/package.json +1 -1
  52. package/temp/passport-saml/LICENSE +23 -0
  53. package/temp/passport-saml/README.md +406 -0
  54. package/temp/passport-saml/lib/node-saml/algorithms.d.ts +5 -0
  55. package/temp/passport-saml/lib/node-saml/algorithms.js +41 -0
  56. package/temp/passport-saml/lib/node-saml/algorithms.js.map +1 -0
  57. package/temp/passport-saml/lib/node-saml/index.d.ts +3 -0
  58. package/temp/passport-saml/lib/node-saml/index.js +6 -0
  59. package/temp/passport-saml/lib/node-saml/index.js.map +1 -0
  60. package/temp/passport-saml/lib/node-saml/inmemory-cache-provider.d.ts +45 -0
  61. package/temp/passport-saml/lib/node-saml/inmemory-cache-provider.js +86 -0
  62. package/temp/passport-saml/lib/node-saml/inmemory-cache-provider.js.map +1 -0
  63. package/temp/passport-saml/lib/node-saml/saml-post-signing.d.ts +3 -0
  64. package/temp/passport-saml/lib/node-saml/saml-post-signing.js +15 -0
  65. package/temp/passport-saml/lib/node-saml/saml-post-signing.js.map +1 -0
  66. package/temp/passport-saml/lib/node-saml/saml.d.ts +77 -0
  67. package/temp/passport-saml/lib/node-saml/saml.js +1170 -0
  68. package/temp/passport-saml/lib/node-saml/saml.js.map +1 -0
  69. package/temp/passport-saml/lib/node-saml/types.d.ts +95 -0
  70. package/temp/passport-saml/lib/node-saml/types.js +8 -0
  71. package/temp/passport-saml/lib/node-saml/types.js.map +1 -0
  72. package/temp/passport-saml/lib/node-saml/utility.d.ts +3 -0
  73. package/temp/passport-saml/lib/node-saml/utility.js +19 -0
  74. package/temp/passport-saml/lib/node-saml/utility.js.map +1 -0
  75. package/temp/passport-saml/lib/node-saml/xml.d.ts +21 -0
  76. package/temp/passport-saml/lib/node-saml/xml.js +140 -0
  77. package/temp/passport-saml/lib/node-saml/xml.js.map +1 -0
  78. package/temp/passport-saml/lib/passport-saml/index.d.ts +6 -0
  79. package/temp/passport-saml/lib/passport-saml/index.js +11 -0
  80. package/temp/passport-saml/lib/passport-saml/index.js.map +1 -0
  81. package/temp/passport-saml/lib/passport-saml/multiSamlStrategy.d.ts +13 -0
  82. package/temp/passport-saml/lib/passport-saml/multiSamlStrategy.js +63 -0
  83. package/temp/passport-saml/lib/passport-saml/multiSamlStrategy.js.map +1 -0
  84. package/temp/passport-saml/lib/passport-saml/strategy.d.ts +20 -0
  85. package/temp/passport-saml/lib/passport-saml/strategy.js +167 -0
  86. package/temp/passport-saml/lib/passport-saml/strategy.js.map +1 -0
  87. package/temp/passport-saml/lib/passport-saml/types.d.ts +51 -0
  88. package/temp/passport-saml/lib/passport-saml/types.js +11 -0
  89. package/temp/passport-saml/lib/passport-saml/types.js.map +1 -0
  90. package/temp/passport-saml/package.json +96 -0
  91. package/util/auth.js +6 -6
  92. package/util/cloudcms.js +106 -118
  93. package/util/proxy-factory.js +159 -268
  94. package/util/redis.js +113 -0
  95. package/util/renditions.js +12 -6
  96. package/util/request.js +12 -6
  97. package/util/util.js +16 -2
  98. package/launchpad/launchers/sticky-cluster.js +0 -43
  99. package/temp/memored/.jshintrc +0 -4
  100. package/temp/memored/README.md +0 -240
  101. package/temp/memored/demo/demo1.js +0 -37
  102. package/temp/memored/demo/demo2.js +0 -32
  103. package/temp/memored/gulpfile.js +0 -8
  104. package/temp/memored/index.js +0 -343
  105. package/temp/memored/package.json +0 -54
  106. package/temp/memored/spec/memored.spec.js +0 -265
  107. package/web/cms/ice.js +0 -109
  108. package/web/cms/preview.js +0 -106
@@ -1,378 +1,285 @@
1
1
  var AbstractAsyncProvider = require("./abstract-async");
2
2
 
3
- var redis = require("redis");
4
- var async = require("async");
5
-
6
- var logFactory = require("../../../util/logger");
3
+ var redisClientFactory = require("../../../clients/redis");
4
+ const redisHelper = require("../../../util/redis");
7
5
 
8
6
  class RedisProvider extends AbstractAsyncProvider
9
7
  {
10
8
  constructor(config)
11
9
  {
12
10
  super(config);
13
-
14
- this.logger = logFactory("AWARENESS REDIS");
15
-
16
- // allow for global redis default
17
- // allow for redis broadcast specific
18
- // otherwise default to error
19
- if (typeof(process.env.CLOUDCMS_REDIS_DEBUG_LEVEL) !== "undefined") {
20
- this.logger.setLevel(("" + process.env.CLOUDCMS_REDIS_DEBUG_LEVEL).toLowerCase(), true);
21
- }
22
- else if (typeof(process.env.CLOUDCMS_AWARENESS_REDIS_DEBUG_LEVEL) !== "undefined") {
23
- this.logger.setLevel(("" + process.env.CLOUDCMS_AWARENESS_REDIS_DEBUG_LEVEL).toLowerCase(), true);
24
- }
25
- else {
26
- this.logger.setLevel("error");
27
- }
11
+
12
+ this.logger = redisHelper.redisLogger("REDIS_AWARENESS", "CLOUDCMS_AWARENESS_", "error")
28
13
  }
29
14
 
30
15
  init(callback)
31
16
  {
32
17
  var self = this;
33
-
34
- var redisPort = this.config.port;
35
- if (typeof(redisPort) === "undefined" || !redisPort)
36
- {
37
- redisPort = process.env.CLOUDCMS_AWARENESS_REDIS_PORT;
38
- }
39
- if (typeof(redisPort) === "undefined" || !redisPort)
40
- {
41
- redisPort = process.env.CLOUDCMS_REDIS_PORT;
42
- }
43
-
44
- var redisHost = this.config.host;
45
- if (typeof(redisHost) === "undefined" || !redisHost)
46
- {
47
- redisHost = process.env.CLOUDCMS_AWARENESS_REDIS_ENDPOINT;
48
- }
49
- if (typeof(redisHost) === "undefined" || !redisHost)
50
- {
51
- redisHost = process.env.CLOUDCMS_REDIS_ENDPOINT;
52
- }
53
-
54
- var redisOptions = {};
55
-
56
- this.client = redis.createClient(redisPort, redisHost, redisOptions);
57
-
58
- callback();
59
- }
60
-
61
- readOrCreateChannel(channelId, callback)
62
- {
63
- var self = this;
64
-
65
- self.client.get("channel-" + channelId, function(err, channelJsonText) {
66
-
18
+
19
+ redisClientFactory.create(self.config, function(err, _client) {
20
+
67
21
  if (err) {
68
22
  return callback(err);
69
23
  }
70
-
71
- if (channelJsonText)
72
- {
73
- var channel = JSON.parse("" + channelJsonText);
74
- return callback(null, channel);
75
- }
76
-
77
- var channel = {};
78
- self.client.set("channel-" + channelId, JSON.stringify(channel), function(err) {
79
-
80
- if (err) {
81
- return callback(err);
82
- }
83
-
84
- callback(null, channel);
85
- });
24
+
25
+ self.client = _client;
26
+
27
+ return callback();
28
+
86
29
  });
87
- };
30
+ }
88
31
 
89
32
  readChannel(channelId, callback)
90
33
  {
91
34
  var self = this;
92
-
93
- self.client.get("channel-" + channelId, function(err, channelJsonText) {
94
-
95
- if (err) {
96
- return callback(err);
35
+
36
+ (async function() {
37
+
38
+ try
39
+ {
40
+ var channel = null;
41
+
42
+ var channelJsonText = await self.client.get("channel-" + channelId);
43
+ if (channelJsonText)
44
+ {
45
+ channel = JSON.parse("" + channelJsonText);
46
+ }
47
+
48
+ callback(null, channel);
97
49
  }
98
-
99
- if (channelJsonText)
50
+ catch (err)
100
51
  {
101
- var channel = JSON.parse("" + channelJsonText);
102
- return callback(null, channel);
52
+ return callback(err);
103
53
  }
104
-
105
- callback();
106
- });
54
+
55
+ })();
107
56
  };
108
57
 
109
58
  writeChannel(channelId, channel, callback)
110
59
  {
111
60
  var self = this;
112
-
113
- self.client.set("channel-" + channelId, JSON.stringify(channel), function(err) {
114
-
115
- if (err) {
61
+
62
+ (async function() {
63
+
64
+ try
65
+ {
66
+ await self.client.set("channel-" + channelId, JSON.stringify(channel));
67
+
68
+ callback();
69
+ }
70
+ catch (err)
71
+ {
116
72
  return callback(err);
117
73
  }
118
-
119
- callback();
120
- });
74
+
75
+ })();
121
76
  };
122
77
 
123
78
  listChannelIds(callback)
124
79
  {
125
80
  var self = this;
81
+
82
+ (async function() {
126
83
 
127
- // fetch all keys for channels
128
- self.client.keys("channel-*", function(err, channelKeys) {
129
-
130
- if (err)
131
- {
132
- return callback(err);
133
- }
134
-
135
- if (!channelKeys || channelKeys.length === 0)
84
+ try
136
85
  {
137
- return callback(null, []);
86
+ var channelKeys = await self.client.keys("channel-*");
87
+ if (!channelKeys || channelKeys.length === 0)
88
+ {
89
+ return callback(null, []);
90
+ }
91
+
92
+ var channelIds = [];
93
+ for (var i = 0; i < channelKeys.length; i++)
94
+ {
95
+ var channelId = channelKeys[i].substring(channelKeys[i].indexOf("-") + 1);
96
+ channelIds.push(channelId);
97
+ }
98
+
99
+ callback(null, channelIds);
138
100
  }
139
-
140
- var channelIds = [];
141
- for (var i = 0; i < channelKeys.length; i++)
101
+ catch (err)
142
102
  {
143
- var channelId = channelKeys[i].substring(channelKeys[i].indexOf("-") + 1);
144
- channelIds.push(channelId);
103
+ callback(err);
145
104
  }
146
-
147
- callback(null, channelIds);
148
- });
105
+
106
+ })();
149
107
  };
150
108
 
151
- /**
152
- * @override
153
- */
154
- expire(beforeMs, callback)
109
+ readLock(lockId, callback)
155
110
  {
156
111
  var self = this;
112
+
113
+ (async function() {
157
114
 
158
- self.listChannelIds(function(err, channelIds) {
159
-
160
- if (err) {
161
- return callback(err);
162
- }
163
-
164
- if (!channelIds || channelIds.length === 0) {
165
- return callback(null, [], {});
166
- }
167
-
168
- // a list of channel IDs whose memberships were updated
169
- var updatedMembershipChannelIds = [];
170
- var expiredUserIdsByChannelId = {};
171
-
172
- var fns = [];
173
-
174
- for (var i = 0; i < channelIds.length; i++)
115
+ try
175
116
  {
176
- var channelId = channelIds[i];
177
-
178
- var fn = function (channelId, updatedMembershipChannelIds, expiredUserIdsByChannelId, beforeMs) {
179
- return function (done) {
180
-
181
- self.readChannel(channelId, function(err, channel) {
182
-
183
- if (err) {
184
- return done(err);
185
- }
186
-
187
- if (!channel) {
188
- return done();
189
- }
190
-
191
- if (channel.users)
192
- {
193
- // populate all of the user IDs that need to be removed
194
- var userIdsToRemove = [];
195
- for (var userId in channel.users)
196
- {
197
- var entry = channel.users[userId];
198
- if (entry.time < beforeMs)
199
- {
200
- updatedMembershipChannelIds.push(channelId);
201
- userIdsToRemove.push(userId);
202
-
203
- var expiredUserIds = expiredUserIdsByChannelId[channelId]
204
- if (!expiredUserIds) {
205
- expiredUserIds = expiredUserIdsByChannelId[channelId] = [];
206
- }
207
-
208
- expiredUserIds.push(userId);
209
- }
210
- }
211
-
212
- // remove the user IDs
213
- for (var i = 0; i < userIdsToRemove.length; i++)
214
- {
215
- delete channel.users[userIdsToRemove[i]];
216
- }
217
-
218
- self.writeChannel(channelId, channel, function() {
219
- done();
220
- });
221
- }
222
-
223
- });
224
- };
225
- }(channelId, updatedMembershipChannelIds, expiredUserIdsByChannelId, beforeMs);
226
- fns.push(fn);
227
- }
228
-
229
- async.parallel(fns, function(err) {
230
-
231
- if (err) {
232
- return callback(err);
117
+ var lock = null;
118
+
119
+ var lockJsonText = await self.client.get("lock-" + lockId);
120
+ if (lockJsonText)
121
+ {
122
+ lock = JSON.parse("" + lockJsonText);
233
123
  }
234
-
235
- callback(null, updatedMembershipChannelIds, expiredUserIdsByChannelId);
236
- });
237
- });
238
- };
239
-
240
- readLock(lockId, callback)
241
- {
242
- var self = this;
243
-
244
- self.client.get("lock-" + lockId, function(err, lockJsonText) {
245
-
246
- if (err) {
247
- return callback(err);
124
+
125
+ callback(null, lock);
248
126
  }
249
-
250
- if (lockJsonText)
127
+ catch (err)
251
128
  {
252
- var lock = JSON.parse("" + lockJsonText);
253
- return callback(null, lock);
129
+ callback(err);
254
130
  }
255
-
256
- callback();
257
- });
131
+
132
+ })();
258
133
  };
259
134
 
260
135
  writeLock(lockId, lock, callback)
261
136
  {
262
137
  var self = this;
263
-
264
- self.client.set("lock-" + lockId, JSON.stringify(lock), function(err) {
265
-
266
- if (err) {
267
- return callback(err);
138
+
139
+ (async function() {
140
+
141
+ try
142
+ {
143
+ await self.client.set("lock-" + lockId, JSON.stringify(lock));
144
+
145
+ callback();
268
146
  }
269
-
270
- callback();
271
- });
147
+ catch (err)
148
+ {
149
+ callback(err);
150
+ }
151
+
152
+ })();
272
153
  };
273
154
 
274
155
  deleteLock(lockId, callback)
275
156
  {
276
157
  var self = this;
158
+
159
+ (async function() {
160
+
161
+ try
162
+ {
163
+ await self.client.del("lock-" + lockId);
277
164
 
278
- self.client.del("lock-" + lockId, function(err) {
279
-
280
- if (err) {
281
- return callback(err);
165
+ callback();
282
166
  }
283
-
284
- callback();
285
- });
167
+ catch (err)
168
+ {
169
+ callback(err);
170
+ }
171
+
172
+ })();
286
173
  };
287
174
 
288
175
  listLockIds(callback)
289
176
  {
290
177
  var self = this;
291
-
292
- // fetch all keys for locks
293
- self.client.keys("lock-*", function(err, lockKeys) {
294
-
295
- if (err)
296
- {
297
- return callback(err);
298
- }
299
-
300
- if (!lockKeys || lockKeys.length === 0)
178
+
179
+ (async function() {
180
+
181
+ try
301
182
  {
302
- return callback(null, []);
183
+ var lockKeys = await self.client.keys("lock-*");
184
+ if (!lockKeys || lockKeys.length === 0)
185
+ {
186
+ return callback(null, []);
187
+ }
188
+
189
+ var lockIds = [];
190
+ for (var i = 0; i < lockKeys.length; i++)
191
+ {
192
+ var lockId = lockKeys[i].substring(0, lockKeys[i].indexOf("-"));
193
+ lockIds.push(lockId);
194
+ }
195
+
196
+ callback(null, lockIds);
303
197
  }
304
-
305
- var lockIds = [];
306
- for (var i = 0; i < lockKeys.length; i++)
198
+ catch (err)
307
199
  {
308
- var lockId = lockKeys[i].substring(0, lockKeys[i].indexOf("-"));
309
- lockIds.push(lockId);
200
+ callback(err);
310
201
  }
311
-
312
- callback(null, lockIds);
313
- });
202
+
203
+ })();
314
204
  };
315
205
 
316
206
  acquireSession(sessionId, callback)
317
207
  {
318
208
  var self = this;
319
-
320
- self.client.get("session-" + sessionId, function(err, sessionJsonText) {
321
-
322
- if (err) {
323
- return callback(err);
324
- }
325
-
326
- if (sessionJsonText)
209
+
210
+ (async function() {
211
+
212
+ var session = null;
213
+
214
+ try
327
215
  {
328
- var session = JSON.parse("" + sessionJsonText);
329
- return callback(null, session);
330
- }
331
-
332
- // create a new session
333
- var session = {};
334
- self.client.set("session-" + sessionId, JSON.stringify(session), function(err) {
335
-
336
- if (err) {
337
- return callback(err);
216
+ var sessionJsonText = await self.client.get("session-" + sessionId);
217
+ if (sessionJsonText)
218
+ {
219
+ session = JSON.parse("" + sessionJsonText);
338
220
  }
339
-
221
+
222
+ if (session)
223
+ {
224
+ return callback(null, session);
225
+ }
226
+
227
+ // create a new session
228
+ session = {};
229
+ await self.client.set("session-" + sessionId, JSON.stringify(session));
230
+
340
231
  callback(null, session);
341
- });
342
- });
232
+ }
233
+ catch (err)
234
+ {
235
+ callback(err);
236
+ }
237
+
238
+ })();
343
239
  }
344
240
 
345
241
  updateSession(sessionId, session, callback)
346
242
  {
347
243
  var self = this;
348
-
244
+
349
245
  if (!session) {
350
246
  session = {};
351
247
  }
352
-
353
- // create a new session
354
- self.client.set("session-" + sessionId, JSON.stringify(session), function(err) {
355
-
356
- if (err) {
357
- return callback(err);
248
+
249
+ (async function() {
250
+
251
+ try
252
+ {
253
+ await self.client.set("session-" + sessionId, JSON.stringify(session));
254
+
255
+ callback(null, session);
358
256
  }
359
-
360
- callback(null, session);
361
- });
257
+ catch (err)
258
+ {
259
+ callback(err);
260
+ }
261
+
262
+ })();
362
263
  }
363
264
 
364
265
  deleteSession(sessionId, callback)
365
266
  {
366
267
  var self = this;
367
-
368
- self.client.del("session-" + sessionId, function(err) {
369
-
370
- if (err) {
371
- return callback(err);
268
+
269
+ (async function() {
270
+
271
+ try
272
+ {
273
+ await self.client.del("session-" + sessionId);
274
+
275
+ callback();
372
276
  }
373
-
374
- callback();
375
- });
277
+ catch (err)
278
+ {
279
+ callback(err);
280
+ }
281
+
282
+ })();
376
283
  }
377
284
 
378
285
  }
@@ -27,8 +27,10 @@ exports = module.exports = function()
27
27
  if (!process.env.CLOUDCMS_CACHE_TYPE) {
28
28
 
29
29
  process.env.CLOUDCMS_CACHE_TYPE = "memory";
30
-
31
- if (process.configuration.setup !== "single") {
30
+
31
+ // auto-configure
32
+ if (process.env.CLOUDCMS_LAUNCHPAD_SETUP === "redis")
33
+ {
32
34
  process.env.CLOUDCMS_CACHE_TYPE = "redis";
33
35
  }
34
36
  }