@webex/internal-plugin-conversation 3.0.0-beta.15 → 3.0.0-beta.17
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/dist/activities.js +8 -69
- package/dist/activities.js.map +1 -1
- package/dist/activity-thread-ordering.js +19 -79
- package/dist/activity-thread-ordering.js.map +1 -1
- package/dist/config.js +0 -6
- package/dist/config.js.map +1 -1
- package/dist/constants.js +4 -5
- package/dist/constants.js.map +1 -1
- package/dist/conversation.js +715 -1164
- package/dist/conversation.js.map +1 -1
- package/dist/convo-error.js +0 -23
- package/dist/convo-error.js.map +1 -1
- package/dist/decryption-transforms.js +11 -74
- package/dist/decryption-transforms.js.map +1 -1
- package/dist/encryption-transforms.js +10 -47
- package/dist/encryption-transforms.js.map +1 -1
- package/dist/index.js +7 -50
- package/dist/index.js.map +1 -1
- package/dist/share-activity.js +24 -104
- package/dist/share-activity.js.map +1 -1
- package/dist/to-array.js +0 -16
- package/dist/to-array.js.map +1 -1
- package/package.json +15 -15
package/dist/convo-error.js
CHANGED
|
@@ -1,67 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
-
|
|
5
4
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
6
|
-
|
|
7
5
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
8
|
-
|
|
9
6
|
_Object$defineProperty(exports, "__esModule", {
|
|
10
7
|
value: true
|
|
11
8
|
});
|
|
12
|
-
|
|
13
9
|
exports.InvalidUserCreation = exports.ConversationError = void 0;
|
|
14
|
-
|
|
15
10
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
16
|
-
|
|
17
11
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
18
|
-
|
|
19
12
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
20
|
-
|
|
21
13
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
22
|
-
|
|
23
14
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
24
|
-
|
|
25
15
|
var _common = require("@webex/common");
|
|
26
|
-
|
|
27
16
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
28
|
-
|
|
29
17
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
30
|
-
|
|
31
18
|
/**
|
|
32
19
|
* General conversation error
|
|
33
20
|
*/
|
|
34
21
|
var ConversationError = /*#__PURE__*/function (_Exception) {
|
|
35
22
|
(0, _inherits2.default)(ConversationError, _Exception);
|
|
36
|
-
|
|
37
23
|
var _super = _createSuper(ConversationError);
|
|
38
|
-
|
|
39
24
|
function ConversationError() {
|
|
40
25
|
(0, _classCallCheck2.default)(this, ConversationError);
|
|
41
26
|
return _super.apply(this, arguments);
|
|
42
27
|
}
|
|
43
|
-
|
|
44
28
|
return (0, _createClass2.default)(ConversationError);
|
|
45
29
|
}(_common.Exception);
|
|
46
30
|
/**
|
|
47
31
|
* InvalidUserCreation thrown when failed to create conversation with invalid user
|
|
48
32
|
*/
|
|
49
|
-
|
|
50
|
-
|
|
51
33
|
exports.ConversationError = ConversationError;
|
|
52
|
-
|
|
53
34
|
var InvalidUserCreation = /*#__PURE__*/function (_ConversationError) {
|
|
54
35
|
(0, _inherits2.default)(InvalidUserCreation, _ConversationError);
|
|
55
|
-
|
|
56
36
|
var _super2 = _createSuper(InvalidUserCreation);
|
|
57
|
-
|
|
58
37
|
function InvalidUserCreation() {
|
|
59
38
|
(0, _classCallCheck2.default)(this, InvalidUserCreation);
|
|
60
39
|
return _super2.apply(this, arguments);
|
|
61
40
|
}
|
|
62
|
-
|
|
63
41
|
return (0, _createClass2.default)(InvalidUserCreation);
|
|
64
42
|
}(ConversationError);
|
|
65
|
-
|
|
66
43
|
exports.InvalidUserCreation = InvalidUserCreation;
|
|
67
44
|
//# sourceMappingURL=convo-error.js.map
|
package/dist/convo-error.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ConversationError","Exception","InvalidUserCreation"],"sources":["convo-error.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Exception} from '@webex/common';\n\n/**\n * General conversation error\n */\nexport class ConversationError extends Exception {}\n\n/**\n * InvalidUserCreation thrown when failed to create conversation with invalid user\n */\nexport class InvalidUserCreation extends ConversationError {}\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["ConversationError","Exception","InvalidUserCreation"],"sources":["convo-error.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Exception} from '@webex/common';\n\n/**\n * General conversation error\n */\nexport class ConversationError extends Exception {}\n\n/**\n * InvalidUserCreation thrown when failed to create conversation with invalid user\n */\nexport class InvalidUserCreation extends ConversationError {}\n"],"mappings":";;;;;;;;;;;;;;AAIA;AAAwC;AAAA;AAExC;AACA;AACA;AAFA,IAGaA,iBAAiB;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;AAAA,EAASC,iBAAS;AAEhD;AACA;AACA;AAFA;AAAA,IAGaC,mBAAmB;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;AAAA,EAASF,iBAAiB;AAAA"}
|
|
@@ -1,33 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
|
|
11
8
|
exports.transforms = void 0;
|
|
12
|
-
|
|
13
9
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
14
|
-
|
|
15
10
|
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/is-array"));
|
|
16
|
-
|
|
17
11
|
var _isInteger = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/number/is-integer"));
|
|
18
|
-
|
|
19
12
|
var _curry2 = _interopRequireDefault(require("lodash/curry"));
|
|
20
|
-
|
|
21
13
|
var _capitalize2 = _interopRequireDefault(require("lodash/capitalize"));
|
|
22
|
-
|
|
23
14
|
var _camelCase2 = _interopRequireDefault(require("lodash/camelCase"));
|
|
24
|
-
|
|
25
15
|
var _toArray = _interopRequireDefault(require("./to-array"));
|
|
26
|
-
|
|
27
16
|
var decryptTextProp = (0, _curry2.default)(function (name, ctx, key, object) {
|
|
28
17
|
return ctx.transform('decryptTextProp', name, key, object);
|
|
29
|
-
});
|
|
18
|
+
});
|
|
30
19
|
|
|
20
|
+
// eslint-disable-next-line import/prefer-default-export
|
|
31
21
|
var transforms = (0, _toArray.default)('inbound', {
|
|
32
22
|
/**
|
|
33
23
|
* This function is used recursively to decrypt various properties on conversations, activities, etc
|
|
@@ -39,34 +29,29 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
39
29
|
decryptObject: function decryptObject(ctx, key, object) {
|
|
40
30
|
if (!object) {
|
|
41
31
|
object = key; // eslint-disable-line no-param-reassign
|
|
42
|
-
|
|
43
32
|
key = undefined; // eslint-disable-line no-param-reassign
|
|
44
33
|
}
|
|
45
34
|
|
|
46
35
|
if (!object) {
|
|
47
36
|
return _promise.default.resolve();
|
|
48
37
|
}
|
|
49
|
-
|
|
50
38
|
if (!object.objectType) {
|
|
51
39
|
return _promise.default.resolve();
|
|
52
40
|
}
|
|
53
|
-
|
|
54
41
|
if (!key && object.encryptionKeyUrl) {
|
|
55
42
|
key = object.encryptionKeyUrl; // eslint-disable-line no-param-reassign
|
|
56
|
-
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Transcoded content was not showing up on the activities since the
|
|
57
46
|
// decryptFile was not being called. Calling decryptFile for
|
|
58
47
|
// transcodedContent fixes the issue.
|
|
59
|
-
|
|
60
|
-
|
|
61
48
|
if (object.objectType === 'transcodedContent') {
|
|
62
49
|
return _promise.default.all(object.files.items.map(function (item) {
|
|
63
50
|
return ctx.transform('decryptFile', key, item);
|
|
64
51
|
}));
|
|
65
52
|
}
|
|
66
|
-
|
|
67
53
|
return ctx.transform("decrypt".concat((0, _capitalize2.default)(object.objectType)), key, object);
|
|
68
54
|
},
|
|
69
|
-
|
|
70
55
|
/**
|
|
71
56
|
* Decrypt an individual submit object from a cardAction activity
|
|
72
57
|
* (object.objectType === 'submit')
|
|
@@ -80,7 +65,6 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
80
65
|
if (!object.inputs) {
|
|
81
66
|
return _promise.default.resolve();
|
|
82
67
|
}
|
|
83
|
-
|
|
84
68
|
var decryptionFailureMessage = ctx.webex.internal.conversation.config.decryptionFailureMessage;
|
|
85
69
|
return ctx.transform('decryptPropCardItem', 0, key, [object.inputs]).then(function (inputs) {
|
|
86
70
|
object.inputs = JSON.parse(inputs[0]); // eslint-disable-line no-param-reassign
|
|
@@ -91,7 +75,6 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
91
75
|
return _promise.default.resolve(decryptionFailureMessage);
|
|
92
76
|
});
|
|
93
77
|
},
|
|
94
|
-
|
|
95
78
|
/**
|
|
96
79
|
* Decrypt an individual reaction2Summary activity (object.objectType === 'reaction2Summary')
|
|
97
80
|
* @param {Object} ctx An object containing a webex instance and a transform
|
|
@@ -105,12 +88,10 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
105
88
|
if (!object.reactions) {
|
|
106
89
|
return _promise.default.resolve();
|
|
107
90
|
}
|
|
108
|
-
|
|
109
91
|
return _promise.default.all(object.reactions.map(function (reaction) {
|
|
110
92
|
return ctx.transform('decryptPropDisplayName', key, reaction);
|
|
111
93
|
}));
|
|
112
94
|
},
|
|
113
|
-
|
|
114
95
|
/**
|
|
115
96
|
* Decrypt an individual reaction2SelfSummary activity (object.objectType === 'reaction2SelfSummary')
|
|
116
97
|
* @param {Object} ctx An object containing a webex instance and a transform
|
|
@@ -126,12 +107,10 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
126
107
|
if (!object.reactions) {
|
|
127
108
|
return _promise.default.resolve();
|
|
128
109
|
}
|
|
129
|
-
|
|
130
110
|
return _promise.default.all(object.reactions.map(function (reaction) {
|
|
131
111
|
return ctx.transform('decryptPropDisplayName', key, reaction);
|
|
132
112
|
}));
|
|
133
113
|
},
|
|
134
|
-
|
|
135
114
|
/**
|
|
136
115
|
* Decrypt an individual reaction2 activity (object.objectType === 'reaction2')
|
|
137
116
|
* @param {Object} ctx An object containing a webex instance and a transform
|
|
@@ -144,7 +123,6 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
144
123
|
decryptReaction2: function decryptReaction2(ctx, key, object) {
|
|
145
124
|
return ctx.transform('decryptPropDisplayName', key, object);
|
|
146
125
|
},
|
|
147
|
-
|
|
148
126
|
/**
|
|
149
127
|
* Decrypt an individual threadObject
|
|
150
128
|
* @param {Object} ctx An object containing a webex instance and a transform
|
|
@@ -153,16 +131,13 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
153
131
|
*/
|
|
154
132
|
decryptThread: function decryptThread(ctx, threadObject) {
|
|
155
133
|
var promises = [];
|
|
156
|
-
|
|
157
134
|
if (threadObject.childActivities && (0, _isArray.default)(threadObject.childActivities)) {
|
|
158
135
|
promises = threadObject.childActivities.map(function (child) {
|
|
159
136
|
return ctx.transform('decryptObject', null, child);
|
|
160
137
|
});
|
|
161
138
|
}
|
|
162
|
-
|
|
163
139
|
return _promise.default.all(promises);
|
|
164
140
|
},
|
|
165
|
-
|
|
166
141
|
/**
|
|
167
142
|
* Decrypt an individual meeting container activity
|
|
168
143
|
* @param {Object} ctx An object containing a webex instance and a transform
|
|
@@ -172,12 +147,10 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
172
147
|
*/
|
|
173
148
|
decryptMeetingcontainer: function decryptMeetingcontainer(ctx, key, meetingContainerActivity) {
|
|
174
149
|
var promises = [];
|
|
175
|
-
|
|
176
150
|
if (meetingContainerActivity.displayName) {
|
|
177
151
|
var usableKey = meetingContainerActivity.encryptionKeyUrl || key;
|
|
178
152
|
promises.push(ctx.transform('decryptPropDisplayName', usableKey, meetingContainerActivity));
|
|
179
153
|
}
|
|
180
|
-
|
|
181
154
|
if (meetingContainerActivity.extensions) {
|
|
182
155
|
var itemsToDecrypt = meetingContainerActivity.extensions.items.filter(function (item) {
|
|
183
156
|
return item.data.objectType === 'recording';
|
|
@@ -186,10 +159,8 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
186
159
|
promises.push(ctx.transform('decryptPropTopic', itemToDecrypt.encryptionKeyUrl, itemToDecrypt.data));
|
|
187
160
|
});
|
|
188
161
|
}
|
|
189
|
-
|
|
190
162
|
return _promise.default.all(promises);
|
|
191
163
|
},
|
|
192
|
-
|
|
193
164
|
/**
|
|
194
165
|
* Decrypts a given conversation and it's activities by building an array of promises that call
|
|
195
166
|
* decryptObject, which may then call other decrypt functions
|
|
@@ -201,42 +172,33 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
201
172
|
*/
|
|
202
173
|
decryptConversation: function decryptConversation(ctx, key, conversation) {
|
|
203
174
|
var promises = [];
|
|
204
|
-
|
|
205
175
|
if (conversation.activities.items) {
|
|
206
176
|
promises.push(_promise.default.all(conversation.activities.items.map(function (item) {
|
|
207
177
|
return ctx.transform('decryptObject', null, item);
|
|
208
178
|
})));
|
|
209
179
|
}
|
|
210
|
-
|
|
211
180
|
var usableKey = conversation.encryptionKeyUrl || key;
|
|
212
181
|
var decryptionFailureMessage = ctx.webex.internal.conversation.config.decryptionFailureMessage;
|
|
213
|
-
|
|
214
182
|
if (usableKey) {
|
|
215
183
|
promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation).catch(function (error) {
|
|
216
184
|
ctx.webex.logger.warn('plugin-conversation: failed to decrypt display name of ', conversation.url, error);
|
|
217
|
-
|
|
218
185
|
_promise.default.resolve(decryptionFailureMessage);
|
|
219
186
|
}));
|
|
220
187
|
promises.push(ctx.transform('decryptPropContent', usableKey, conversation));
|
|
221
188
|
}
|
|
222
|
-
|
|
223
189
|
if (conversation.avatarEncryptionKeyUrl) {
|
|
224
190
|
promises.push(ctx.transform('decryptObject', conversation.avatarEncryptionKeyUrl, conversation.avatar));
|
|
225
|
-
}
|
|
191
|
+
}
|
|
192
|
+
// TODO (holsted 04/06/19): This was deprecated in favor of .previousValue below. I wanted to remove this entirely
|
|
226
193
|
// but I wasn't sure if some open source use cases may be reading from cached conversations or not so leaving it for now.
|
|
227
|
-
|
|
228
|
-
|
|
229
194
|
if (conversation.previous) {
|
|
230
195
|
promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation.previous));
|
|
231
196
|
}
|
|
232
|
-
|
|
233
197
|
if (conversation.previousValue) {
|
|
234
198
|
promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation.previousValue));
|
|
235
199
|
}
|
|
236
|
-
|
|
237
200
|
return _promise.default.all(promises);
|
|
238
201
|
},
|
|
239
|
-
|
|
240
202
|
/**
|
|
241
203
|
* Decrypt an individual activity
|
|
242
204
|
* @param {Object} ctx An object containing a webex instance and a transform
|
|
@@ -248,20 +210,19 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
248
210
|
if (!activity.encryptionKeyUrl && !(activity.object && activity.object.encryptionKeyUrl)) {
|
|
249
211
|
return _promise.default.resolve(activity);
|
|
250
212
|
}
|
|
251
|
-
|
|
252
213
|
var keyUrl = activity.encryptionKeyUrl || activity.object.encryptionKeyUrl || key;
|
|
253
|
-
var promises = [];
|
|
214
|
+
var promises = [];
|
|
215
|
+
|
|
216
|
+
// iterate and recursively decrypt over children objects
|
|
254
217
|
|
|
255
218
|
if (activity.children && (0, _isArray.default)(activity.children)) {
|
|
256
219
|
promises = activity.children.map(function (child) {
|
|
257
220
|
return ctx.transform('decryptObject', keyUrl, child.activity);
|
|
258
221
|
});
|
|
259
222
|
}
|
|
260
|
-
|
|
261
223
|
promises.push(ctx.transform('decryptObject', keyUrl, activity.object));
|
|
262
224
|
return _promise.default.all(promises);
|
|
263
225
|
},
|
|
264
|
-
|
|
265
226
|
/**
|
|
266
227
|
* Decrypts a microappInstance (recording) model
|
|
267
228
|
* @param {Object} ctx An object containing a webex instance and transform prop
|
|
@@ -273,7 +234,6 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
273
234
|
decryptMicroappinstance: function decryptMicroappinstance(ctx, key, microappInstance) {
|
|
274
235
|
return ctx.transform('decryptPropModel', key, microappInstance);
|
|
275
236
|
},
|
|
276
|
-
|
|
277
237
|
/**
|
|
278
238
|
* Decrypts a comment...
|
|
279
239
|
* @param {Object} ctx An object containing a webex instance and transform prop
|
|
@@ -283,16 +243,13 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
283
243
|
*/
|
|
284
244
|
decryptComment: function decryptComment(ctx, key, comment) {
|
|
285
245
|
var promises = [ctx.transform('decryptPropDisplayName', key, comment), ctx.transform('decryptPropContent', key, comment)];
|
|
286
|
-
|
|
287
246
|
if (comment.cards && (0, _isArray.default)(comment.cards)) {
|
|
288
247
|
comment.cards.map(function (item, index) {
|
|
289
248
|
return promises.push(ctx.transform('decryptPropCardItem', index, key, comment.cards));
|
|
290
249
|
});
|
|
291
250
|
}
|
|
292
|
-
|
|
293
251
|
return _promise.default.all(promises);
|
|
294
252
|
},
|
|
295
|
-
|
|
296
253
|
/**
|
|
297
254
|
* Decrypts a content field
|
|
298
255
|
* @param {Object} ctx An object containing a webex instance and transform prop
|
|
@@ -304,10 +261,8 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
304
261
|
if (content.contentCategory === 'links') {
|
|
305
262
|
return ctx.transform('decryptContentLinks', key, content);
|
|
306
263
|
}
|
|
307
|
-
|
|
308
264
|
return ctx.transform('decryptContentFiles', key, content);
|
|
309
265
|
},
|
|
310
|
-
|
|
311
266
|
/**
|
|
312
267
|
* Decrypts a content field which contains files and possibly links
|
|
313
268
|
* @param {Object} ctx An object containing a webex instance and transform prop
|
|
@@ -321,21 +276,17 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
321
276
|
if (!content.files || !content.files.items || !(0, _isArray.default)(content.files.items)) {
|
|
322
277
|
return _promise.default.resolve();
|
|
323
278
|
}
|
|
324
|
-
|
|
325
279
|
var promises = content.files.items.map(function (item) {
|
|
326
280
|
return ctx.transform('decryptObject', key, item);
|
|
327
281
|
});
|
|
328
282
|
promises.push(ctx.transform('decryptComment', key, content));
|
|
329
|
-
|
|
330
283
|
if (content.links && content.links.items && (0, _isArray.default)(content.links.items)) {
|
|
331
284
|
content.links.items.forEach(function (item) {
|
|
332
285
|
return promises.push(ctx.transform('decryptObject', key, item));
|
|
333
286
|
});
|
|
334
287
|
}
|
|
335
|
-
|
|
336
288
|
return _promise.default.all(promises);
|
|
337
289
|
},
|
|
338
|
-
|
|
339
290
|
/**
|
|
340
291
|
* Decrypts a content field which contains links
|
|
341
292
|
* @param {Object} ctx An object containing a webex instance and transform prop
|
|
@@ -348,14 +299,12 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
348
299
|
if (!content.links || !content.links.items || !(0, _isArray.default)(content.links.items)) {
|
|
349
300
|
return _promise.default.resolve();
|
|
350
301
|
}
|
|
351
|
-
|
|
352
302
|
var promises = content.links.items.map(function (item) {
|
|
353
303
|
return ctx.transform('decryptObject', key, item);
|
|
354
304
|
});
|
|
355
305
|
promises.push(ctx.transform('decryptComment', key, content));
|
|
356
306
|
return _promise.default.all(promises);
|
|
357
307
|
},
|
|
358
|
-
|
|
359
308
|
/**
|
|
360
309
|
* Decrypts what may be a meeting event?
|
|
361
310
|
* @param {Object} ctx An object containing a webex instance and transform prop
|
|
@@ -365,14 +314,11 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
365
314
|
*/
|
|
366
315
|
decryptEvent: function decryptEvent(ctx, key, event) {
|
|
367
316
|
var promises = [ctx.transform('decryptPropDisplayName', key, event)];
|
|
368
|
-
|
|
369
317
|
if (event.location && event.location.split('.').length === 5) {
|
|
370
318
|
promises.push(ctx.transform('decryptPropLocation', key, event));
|
|
371
319
|
}
|
|
372
|
-
|
|
373
320
|
return _promise.default.all(promises);
|
|
374
321
|
},
|
|
375
|
-
|
|
376
322
|
/**
|
|
377
323
|
* Decrypts a file and it's transcodedContents if they exist
|
|
378
324
|
* @param {Object} ctx An object containing a webex instance and transform prop
|
|
@@ -385,12 +331,10 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
385
331
|
if (file.encryptionKeyUrl && file.encryptionKeyUrl !== key) {
|
|
386
332
|
key = file.encryptionKeyUrl;
|
|
387
333
|
}
|
|
388
|
-
|
|
389
334
|
return _promise.default.all([file.transcodedCollection && _promise.default.all(file.transcodedCollection.items.map(function (item) {
|
|
390
335
|
return ctx.transform('decryptObject', key, item);
|
|
391
336
|
})), ctx.transform('decryptPropScr', key, file), ctx.transform('decryptPropDisplayName', key, file), ctx.transform('decryptPropContent', key, file), file.image && ctx.transform('decryptPropScr', key, file.image)]);
|
|
392
337
|
},
|
|
393
|
-
|
|
394
338
|
/**
|
|
395
339
|
* Decrypts a file and it's transcodedContents if they exist
|
|
396
340
|
* @param {Object} ctx An object containing a webex instance and transform prop
|
|
@@ -401,7 +345,6 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
401
345
|
decryptLink: function decryptLink(ctx, key, link) {
|
|
402
346
|
return _promise.default.all([ctx.transform('decryptPropSslr', key, link), ctx.transform('decryptPropDisplayName', key, link)]);
|
|
403
347
|
},
|
|
404
|
-
|
|
405
348
|
/**
|
|
406
349
|
* Decrypts transcoded file content. Calls decryptFile
|
|
407
350
|
* @param {Object} ctx An object containing a webex instance and transform prop
|
|
@@ -414,7 +357,6 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
414
357
|
return ctx.transform('decryptFile', key, item);
|
|
415
358
|
}));
|
|
416
359
|
},
|
|
417
|
-
|
|
418
360
|
/**
|
|
419
361
|
* Decrypts an image uri
|
|
420
362
|
* @param {Object} ctx An object containing a webex instance and transform prop
|
|
@@ -425,7 +367,6 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
425
367
|
decryptImageURI: function decryptImageURI(ctx, key, imageURI) {
|
|
426
368
|
return ctx.transform('decryptPropLocation', key, imageURI);
|
|
427
369
|
},
|
|
428
|
-
|
|
429
370
|
/**
|
|
430
371
|
* The heart of most decryption logic ends here. Decrypting text.
|
|
431
372
|
* @param {Object} ctx An object containing a webex instance and transform prop
|
|
@@ -438,7 +379,6 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
438
379
|
if (!object[name]) {
|
|
439
380
|
return _promise.default.resolve();
|
|
440
381
|
}
|
|
441
|
-
|
|
442
382
|
var decryptionFailureMessage = ctx.webex.internal.conversation.config.decryptionFailureMessage;
|
|
443
383
|
return ctx.webex.internal.encryption.decryptText(key, object[name]).then(function (plaintext) {
|
|
444
384
|
if (ctx.webex.config.conversation.keepEncryptedProperties) {
|
|
@@ -454,7 +394,6 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
454
394
|
return _promise.default.resolve(decryptionFailureMessage);
|
|
455
395
|
});
|
|
456
396
|
},
|
|
457
|
-
|
|
458
397
|
/**
|
|
459
398
|
* Decrypting an element in an Array.
|
|
460
399
|
* @param {Object} ctx An object containing a webex instance and transform prop
|
|
@@ -467,7 +406,6 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
467
406
|
if (!(0, _isInteger.default)(index) || !array || !(0, _isArray.default)(array) || index < 0 || index >= array.length || !(array[index] instanceof String || typeof array[index] === 'string')) {
|
|
468
407
|
return _promise.default.resolve();
|
|
469
408
|
}
|
|
470
|
-
|
|
471
409
|
var decryptionFailureMessage = ctx.webex.internal.conversation.config.decryptionFailureMessage;
|
|
472
410
|
return ctx.webex.internal.encryption.decryptText(key, array[index]).then(function (plaintext) {
|
|
473
411
|
array[index] = plaintext; // eslint-disable-line no-param-reassign
|
|
@@ -478,7 +416,6 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
478
416
|
return _promise.default.resolve(decryptionFailureMessage);
|
|
479
417
|
});
|
|
480
418
|
},
|
|
481
|
-
|
|
482
419
|
/**
|
|
483
420
|
* Decrypts the src of an object (for images?)
|
|
484
421
|
* @param {Object} ctx An object containing a webex instance and transform prop
|
|
@@ -491,7 +428,6 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
491
428
|
object.scr = scr; // eslint-disable-line no-param-reassign
|
|
492
429
|
});
|
|
493
430
|
},
|
|
494
|
-
|
|
495
431
|
/**
|
|
496
432
|
* Decrypts the sslr object
|
|
497
433
|
* @param {Object} ctx An object containing a webex instance and transform prop
|
|
@@ -504,6 +440,7 @@ var transforms = (0, _toArray.default)('inbound', {
|
|
|
504
440
|
object.sslr = sslr; // eslint-disable-line no-param-reassign
|
|
505
441
|
});
|
|
506
442
|
},
|
|
443
|
+
|
|
507
444
|
decryptPropDisplayName: decryptTextProp('displayName'),
|
|
508
445
|
decryptPropContent: decryptTextProp('content'),
|
|
509
446
|
decryptPropModel: decryptTextProp('model'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["decryptTextProp","name","ctx","key","object","transform","transforms","toArray","decryptObject","undefined","resolve","objectType","encryptionKeyUrl","all","files","items","map","item","decryptSubmit","inputs","decryptionFailureMessage","webex","internal","conversation","config","then","JSON","parse","catch","reason","logger","warn","decryptReaction2summary","reactions","reaction","decryptReaction2selfsummary","decryptReaction2","decryptThread","threadObject","promises","childActivities","child","decryptMeetingcontainer","meetingContainerActivity","displayName","usableKey","push","extensions","itemsToDecrypt","filter","data","forEach","itemToDecrypt","decryptConversation","activities","error","url","avatarEncryptionKeyUrl","avatar","previous","previousValue","decryptActivity","activity","keyUrl","children","decryptMicroappinstance","microappInstance","decryptComment","comment","cards","index","decryptContent","content","contentCategory","decryptContentFiles","links","decryptContentLinks","decryptEvent","event","location","split","length","decryptFile","file","transcodedCollection","image","decryptLink","link","decryptTranscodedContent","transcodedContent","decryptImageURI","imageURI","encryption","decryptText","plaintext","keepEncryptedProperties","encryptedPropName","decryptPropCardItem","array","String","decryptPropScr","decryptScr","scr","decryptPropSslr","sslr","decryptPropDisplayName","decryptPropContent","decryptPropModel","decryptPropLocation","decryptPropTopic"],"sources":["decryption-transforms.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {camelCase, capitalize, curry} from 'lodash';\n\nimport toArray from './to-array';\n\nconst decryptTextProp = curry((name, ctx, key, object) =>\n ctx.transform('decryptTextProp', name, key, object)\n);\n\n// eslint-disable-next-line import/prefer-default-export\nexport const transforms = toArray('inbound', {\n /**\n * This function is used recursively to decrypt various properties on conversations, activities, etc\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url\n * @param {Object} object Generic object that you want to decrypt some property on based on the type\n * @returns {Promise} Returns a transform promise\n */\n decryptObject(ctx, key, object) {\n if (!object) {\n object = key; // eslint-disable-line no-param-reassign\n key = undefined; // eslint-disable-line no-param-reassign\n }\n\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n if (!key && object.encryptionKeyUrl) {\n key = object.encryptionKeyUrl; // eslint-disable-line no-param-reassign\n }\n\n // Transcoded content was not showing up on the activities since the\n // decryptFile was not being called. Calling decryptFile for\n // transcodedContent fixes the issue.\n if (object.objectType === 'transcodedContent') {\n return Promise.all(object.files.items.map((item) => ctx.transform('decryptFile', key, item)));\n }\n\n return ctx.transform(`decrypt${capitalize(object.objectType)}`, key, object);\n },\n\n /**\n * Decrypt an individual submit object from a cardAction activity\n * (object.objectType === 'submit')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex submit object\n * these objects are returned when a user clicks on a Action.Submit button in a card\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptSubmit(ctx, key, object) {\n if (!object.inputs) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx\n .transform('decryptPropCardItem', 0, key, [object.inputs])\n .then((inputs) => {\n object.inputs = JSON.parse(inputs[0]); // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(\n `plugin-conversation: failed to decrypt attachmentAction.inputs: ${reason}`\n );\n object.inputs = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n\n /**\n * Decrypt an individual reaction2Summary activity (object.objectType === 'reaction2Summary')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2Summary object\n * these objects are returned by various conversation APIs and over mercury\n * represents an aggregated summary of all reactions to a specific activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2summary(ctx, key, object) {\n if (!object.reactions) {\n return Promise.resolve();\n }\n\n return Promise.all(\n object.reactions.map((reaction) => ctx.transform('decryptPropDisplayName', key, reaction))\n );\n },\n\n /**\n * Decrypt an individual reaction2SelfSummary activity (object.objectType === 'reaction2SelfSummary')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2SelfSummary object\n * these objects are returned by various conversation APIs and NOT over mercury\n * they are ONLY received by the self user\n * they represent ONLY the self user's reactions and are used for enforcing\n * limit of times they can react to a specific activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2selfsummary(ctx, key, object) {\n if (!object.reactions) {\n return Promise.resolve();\n }\n\n return Promise.all(\n object.reactions.map((reaction) => ctx.transform('decryptPropDisplayName', key, reaction))\n );\n },\n\n /**\n * Decrypt an individual reaction2 activity (object.objectType === 'reaction2')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2 object\n * these objects are returned by various conversation APIs and over mercury\n * ONLY self users receive these objects\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2(ctx, key, object) {\n return ctx.transform('decryptPropDisplayName', key, object);\n },\n\n /**\n * Decrypt an individual threadObject\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {Object} threadObject An instance of a Webex threadObject (the objects returned by the /conversation/api/v1/threads api)\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptThread(ctx, threadObject) {\n let promises = [];\n\n if (threadObject.childActivities && Array.isArray(threadObject.childActivities)) {\n promises = threadObject.childActivities.map((child) =>\n ctx.transform('decryptObject', null, child)\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypt an individual meeting container activity\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {object} key KMS encryption key url\n * @param {Object} meetingContainerActivity An instance of a Webex meeting container activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptMeetingcontainer(ctx, key, meetingContainerActivity) {\n const promises = [];\n\n if (meetingContainerActivity.displayName) {\n const usableKey = meetingContainerActivity.encryptionKeyUrl || key;\n\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, meetingContainerActivity));\n }\n\n if (meetingContainerActivity.extensions) {\n const itemsToDecrypt = meetingContainerActivity.extensions.items.filter(\n (item) => item.data.objectType === 'recording'\n );\n\n itemsToDecrypt.forEach((itemToDecrypt) => {\n promises.push(\n ctx.transform('decryptPropTopic', itemToDecrypt.encryptionKeyUrl, itemToDecrypt.data)\n );\n });\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a given conversation and it's activities by building an array of promises that call\n * decryptObject, which may then call other decrypt functions\n *\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url (or actual key?)\n * @param {Object} conversation A Webex conversation object\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptConversation(ctx, key, conversation) {\n const promises = [];\n\n if (conversation.activities.items) {\n promises.push(\n Promise.all(\n conversation.activities.items.map((item) => ctx.transform('decryptObject', null, item))\n )\n );\n }\n\n const usableKey = conversation.encryptionKeyUrl || key;\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n if (usableKey) {\n promises.push(\n ctx.transform('decryptPropDisplayName', usableKey, conversation).catch((error) => {\n ctx.webex.logger.warn(\n 'plugin-conversation: failed to decrypt display name of ',\n conversation.url,\n error\n );\n Promise.resolve(decryptionFailureMessage);\n })\n );\n promises.push(ctx.transform('decryptPropContent', usableKey, conversation));\n }\n if (conversation.avatarEncryptionKeyUrl) {\n promises.push(\n ctx.transform('decryptObject', conversation.avatarEncryptionKeyUrl, conversation.avatar)\n );\n }\n // TODO (holsted 04/06/19): This was deprecated in favor of .previousValue below. I wanted to remove this entirely\n // but I wasn't sure if some open source use cases may be reading from cached conversations or not so leaving it for now.\n if (conversation.previous) {\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation.previous));\n }\n if (conversation.previousValue) {\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation.previousValue));\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypt an individual activity\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url (or actual key?)\n * @param {Object} activity An instance of a Webex activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptActivity(ctx, key, activity) {\n if (!activity.encryptionKeyUrl && !(activity.object && activity.object.encryptionKeyUrl)) {\n return Promise.resolve(activity);\n }\n\n const keyUrl = activity.encryptionKeyUrl || activity.object.encryptionKeyUrl || key;\n\n let promises = [];\n\n // iterate and recursively decrypt over children objects\n\n if (activity.children && Array.isArray(activity.children)) {\n promises = activity.children.map((child) =>\n ctx.transform('decryptObject', keyUrl, child.activity)\n );\n }\n\n promises.push(ctx.transform('decryptObject', keyUrl, activity.object));\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a microappInstance (recording) model\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} microappInstance A microappInstance which includes several properties of a recording\n * @param {String} microappInstance.model An encrypted string which decrypts to an object\n * @returns {Promise} Returns a context transform\n */\n decryptMicroappinstance(ctx, key, microappInstance) {\n return ctx.transform('decryptPropModel', key, microappInstance);\n },\n\n /**\n * Decrypts a comment...\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} comment A comment object with a displayName and content (encrypted)\n * @returns {Promise} Returns the results of Promise.all on two transforms\n */\n decryptComment(ctx, key, comment) {\n const promises = [\n ctx.transform('decryptPropDisplayName', key, comment),\n ctx.transform('decryptPropContent', key, comment),\n ];\n\n if (comment.cards && Array.isArray(comment.cards)) {\n comment.cards.map((item, index) =>\n promises.push(ctx.transform('decryptPropCardItem', index, key, comment.cards))\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a content field\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContent(ctx, key, content) {\n if (content.contentCategory === 'links') {\n return ctx.transform('decryptContentLinks', key, content);\n }\n\n return ctx.transform('decryptContentFiles', key, content);\n },\n\n /**\n * Decrypts a content field which contains files and possibly links\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @param {Array} content.files An array of files to decrypt by calling decryptObject\n * @param {Array} content.links An array of links to decrypt by calling decryptObject\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContentFiles(ctx, key, content) {\n if (!content.files || !content.files.items || !Array.isArray(content.files.items)) {\n return Promise.resolve();\n }\n\n const promises = content.files.items.map((item) => ctx.transform('decryptObject', key, item));\n\n promises.push(ctx.transform('decryptComment', key, content));\n\n if (content.links && content.links.items && Array.isArray(content.links.items)) {\n content.links.items.forEach((item) =>\n promises.push(ctx.transform('decryptObject', key, item))\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a content field which contains links\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @param {Array} content.links An array of links to decrypt by calling decryptObject\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContentLinks(ctx, key, content) {\n if (!content.links || !content.links.items || !Array.isArray(content.links.items)) {\n return Promise.resolve();\n }\n\n const promises = content.links.items.map((item) => ctx.transform('decryptObject', key, item));\n\n promises.push(ctx.transform('decryptComment', key, content));\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts what may be a meeting event?\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} event An object with a display name and location to be decrypted\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptEvent(ctx, key, event) {\n const promises = [ctx.transform('decryptPropDisplayName', key, event)];\n\n if (event.location && event.location.split('.').length === 5) {\n promises.push(ctx.transform('decryptPropLocation', key, event));\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a file and it's transcodedContents if they exist\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} file A file object with file props an optional transcodedCollection to decrypt\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptFile(ctx, key, file) {\n // using object encryption keyUrl for images instead of activity encryptionKeyUrl\n if (file.encryptionKeyUrl && file.encryptionKeyUrl !== key) {\n key = file.encryptionKeyUrl;\n }\n\n return Promise.all([\n file.transcodedCollection &&\n Promise.all(\n file.transcodedCollection.items.map((item) => ctx.transform('decryptObject', key, item))\n ),\n ctx.transform('decryptPropScr', key, file),\n ctx.transform('decryptPropDisplayName', key, file),\n ctx.transform('decryptPropContent', key, file),\n file.image && ctx.transform('decryptPropScr', key, file.image),\n ]);\n },\n\n /**\n * Decrypts a file and it's transcodedContents if they exist\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} link A link object with a URL to decrypt\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptLink(ctx, key, link) {\n return Promise.all([\n ctx.transform('decryptPropSslr', key, link),\n ctx.transform('decryptPropDisplayName', key, link),\n ]);\n },\n\n /**\n * Decrypts transcoded file content. Calls decryptFile\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} transcodedContent Transcoded content with a files prop\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptTranscodedContent(ctx, key, transcodedContent) {\n return Promise.all(\n transcodedContent.files.items.map((item) => ctx.transform('decryptFile', key, item))\n );\n },\n\n /**\n * Decrypts an image uri\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {String} imageURI URI of the image to decrypt\n * @returns {Promise} Returns a promise.\n */\n decryptImageURI(ctx, key, imageURI) {\n return ctx.transform('decryptPropLocation', key, imageURI);\n },\n\n /**\n * The heart of most decryption logic ends here. Decrypting text.\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} name Property of an object to be decrypted\n * @param {String} key KMS key\n * @param {Object} object A generic object with text props to be decrypted\n * @returns {Promise} Returns a lonely Promise\n */\n decryptTextProp(ctx, name, key, object) {\n if (!object[name]) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx.webex.internal.encryption\n .decryptText(key, object[name])\n .then((plaintext) => {\n if (ctx.webex.config.conversation.keepEncryptedProperties) {\n const encryptedPropName = camelCase(`encrypted_${name}`);\n\n object[encryptedPropName] = object[name]; // eslint-disable-line no-param-reassign\n }\n\n object[name] = plaintext; // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(`plugin-conversation: failed to decrypt ${name} `, reason);\n object[name] = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n\n /**\n * Decrypting an element in an Array.\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {Integer} index Property of an object to be decrypted\n * @param {String} key KMS key\n * @param {Array} array An array of Strings to be decrypted\n * @returns {Promise} Returns a lonely Promise\n */\n decryptPropCardItem(ctx, index, key, array) {\n if (\n !Number.isInteger(index) ||\n !array ||\n !Array.isArray(array) ||\n index < 0 ||\n index >= array.length ||\n !(array[index] instanceof String || typeof array[index] === 'string')\n ) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx.webex.internal.encryption\n .decryptText(key, array[index])\n .then((plaintext) => {\n array[index] = plaintext; // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(`plugin-conversation: failed to decrypt card at ${index} `, reason);\n array[index] = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n /**\n * Decrypts the src of an object (for images?)\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} object An object with a scr property to be decrypted\n * @returns {Promise} Returns a promise\n */\n decryptPropScr(ctx, key, object) {\n return ctx.webex.internal.encryption.decryptScr(key, object.scr).then((scr) => {\n object.scr = scr; // eslint-disable-line no-param-reassign\n });\n },\n\n /**\n * Decrypts the sslr object\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} object An object with a sslr property to be decrypted\n * @returns {Promise} Returns a promise\n */\n decryptPropSslr(ctx, key, object) {\n return ctx.webex.internal.encryption.decryptScr(key, object.sslr).then((sslr) => {\n object.sslr = sslr; // eslint-disable-line no-param-reassign\n });\n },\n\n decryptPropDisplayName: decryptTextProp('displayName'),\n\n decryptPropContent: decryptTextProp('content'),\n\n decryptPropModel: decryptTextProp('model'),\n\n decryptPropLocation: decryptTextProp('location'),\n\n decryptPropTopic: decryptTextProp('topic'),\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["decryptTextProp","name","ctx","key","object","transform","transforms","toArray","decryptObject","undefined","resolve","objectType","encryptionKeyUrl","all","files","items","map","item","decryptSubmit","inputs","decryptionFailureMessage","webex","internal","conversation","config","then","JSON","parse","catch","reason","logger","warn","decryptReaction2summary","reactions","reaction","decryptReaction2selfsummary","decryptReaction2","decryptThread","threadObject","promises","childActivities","child","decryptMeetingcontainer","meetingContainerActivity","displayName","usableKey","push","extensions","itemsToDecrypt","filter","data","forEach","itemToDecrypt","decryptConversation","activities","error","url","avatarEncryptionKeyUrl","avatar","previous","previousValue","decryptActivity","activity","keyUrl","children","decryptMicroappinstance","microappInstance","decryptComment","comment","cards","index","decryptContent","content","contentCategory","decryptContentFiles","links","decryptContentLinks","decryptEvent","event","location","split","length","decryptFile","file","transcodedCollection","image","decryptLink","link","decryptTranscodedContent","transcodedContent","decryptImageURI","imageURI","encryption","decryptText","plaintext","keepEncryptedProperties","encryptedPropName","decryptPropCardItem","array","String","decryptPropScr","decryptScr","scr","decryptPropSslr","sslr","decryptPropDisplayName","decryptPropContent","decryptPropModel","decryptPropLocation","decryptPropTopic"],"sources":["decryption-transforms.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {camelCase, capitalize, curry} from 'lodash';\n\nimport toArray from './to-array';\n\nconst decryptTextProp = curry((name, ctx, key, object) =>\n ctx.transform('decryptTextProp', name, key, object)\n);\n\n// eslint-disable-next-line import/prefer-default-export\nexport const transforms = toArray('inbound', {\n /**\n * This function is used recursively to decrypt various properties on conversations, activities, etc\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url\n * @param {Object} object Generic object that you want to decrypt some property on based on the type\n * @returns {Promise} Returns a transform promise\n */\n decryptObject(ctx, key, object) {\n if (!object) {\n object = key; // eslint-disable-line no-param-reassign\n key = undefined; // eslint-disable-line no-param-reassign\n }\n\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n if (!key && object.encryptionKeyUrl) {\n key = object.encryptionKeyUrl; // eslint-disable-line no-param-reassign\n }\n\n // Transcoded content was not showing up on the activities since the\n // decryptFile was not being called. Calling decryptFile for\n // transcodedContent fixes the issue.\n if (object.objectType === 'transcodedContent') {\n return Promise.all(object.files.items.map((item) => ctx.transform('decryptFile', key, item)));\n }\n\n return ctx.transform(`decrypt${capitalize(object.objectType)}`, key, object);\n },\n\n /**\n * Decrypt an individual submit object from a cardAction activity\n * (object.objectType === 'submit')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex submit object\n * these objects are returned when a user clicks on a Action.Submit button in a card\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptSubmit(ctx, key, object) {\n if (!object.inputs) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx\n .transform('decryptPropCardItem', 0, key, [object.inputs])\n .then((inputs) => {\n object.inputs = JSON.parse(inputs[0]); // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(\n `plugin-conversation: failed to decrypt attachmentAction.inputs: ${reason}`\n );\n object.inputs = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n\n /**\n * Decrypt an individual reaction2Summary activity (object.objectType === 'reaction2Summary')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2Summary object\n * these objects are returned by various conversation APIs and over mercury\n * represents an aggregated summary of all reactions to a specific activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2summary(ctx, key, object) {\n if (!object.reactions) {\n return Promise.resolve();\n }\n\n return Promise.all(\n object.reactions.map((reaction) => ctx.transform('decryptPropDisplayName', key, reaction))\n );\n },\n\n /**\n * Decrypt an individual reaction2SelfSummary activity (object.objectType === 'reaction2SelfSummary')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2SelfSummary object\n * these objects are returned by various conversation APIs and NOT over mercury\n * they are ONLY received by the self user\n * they represent ONLY the self user's reactions and are used for enforcing\n * limit of times they can react to a specific activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2selfsummary(ctx, key, object) {\n if (!object.reactions) {\n return Promise.resolve();\n }\n\n return Promise.all(\n object.reactions.map((reaction) => ctx.transform('decryptPropDisplayName', key, reaction))\n );\n },\n\n /**\n * Decrypt an individual reaction2 activity (object.objectType === 'reaction2')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2 object\n * these objects are returned by various conversation APIs and over mercury\n * ONLY self users receive these objects\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2(ctx, key, object) {\n return ctx.transform('decryptPropDisplayName', key, object);\n },\n\n /**\n * Decrypt an individual threadObject\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {Object} threadObject An instance of a Webex threadObject (the objects returned by the /conversation/api/v1/threads api)\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptThread(ctx, threadObject) {\n let promises = [];\n\n if (threadObject.childActivities && Array.isArray(threadObject.childActivities)) {\n promises = threadObject.childActivities.map((child) =>\n ctx.transform('decryptObject', null, child)\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypt an individual meeting container activity\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {object} key KMS encryption key url\n * @param {Object} meetingContainerActivity An instance of a Webex meeting container activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptMeetingcontainer(ctx, key, meetingContainerActivity) {\n const promises = [];\n\n if (meetingContainerActivity.displayName) {\n const usableKey = meetingContainerActivity.encryptionKeyUrl || key;\n\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, meetingContainerActivity));\n }\n\n if (meetingContainerActivity.extensions) {\n const itemsToDecrypt = meetingContainerActivity.extensions.items.filter(\n (item) => item.data.objectType === 'recording'\n );\n\n itemsToDecrypt.forEach((itemToDecrypt) => {\n promises.push(\n ctx.transform('decryptPropTopic', itemToDecrypt.encryptionKeyUrl, itemToDecrypt.data)\n );\n });\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a given conversation and it's activities by building an array of promises that call\n * decryptObject, which may then call other decrypt functions\n *\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url (or actual key?)\n * @param {Object} conversation A Webex conversation object\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptConversation(ctx, key, conversation) {\n const promises = [];\n\n if (conversation.activities.items) {\n promises.push(\n Promise.all(\n conversation.activities.items.map((item) => ctx.transform('decryptObject', null, item))\n )\n );\n }\n\n const usableKey = conversation.encryptionKeyUrl || key;\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n if (usableKey) {\n promises.push(\n ctx.transform('decryptPropDisplayName', usableKey, conversation).catch((error) => {\n ctx.webex.logger.warn(\n 'plugin-conversation: failed to decrypt display name of ',\n conversation.url,\n error\n );\n Promise.resolve(decryptionFailureMessage);\n })\n );\n promises.push(ctx.transform('decryptPropContent', usableKey, conversation));\n }\n if (conversation.avatarEncryptionKeyUrl) {\n promises.push(\n ctx.transform('decryptObject', conversation.avatarEncryptionKeyUrl, conversation.avatar)\n );\n }\n // TODO (holsted 04/06/19): This was deprecated in favor of .previousValue below. I wanted to remove this entirely\n // but I wasn't sure if some open source use cases may be reading from cached conversations or not so leaving it for now.\n if (conversation.previous) {\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation.previous));\n }\n if (conversation.previousValue) {\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation.previousValue));\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypt an individual activity\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url (or actual key?)\n * @param {Object} activity An instance of a Webex activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptActivity(ctx, key, activity) {\n if (!activity.encryptionKeyUrl && !(activity.object && activity.object.encryptionKeyUrl)) {\n return Promise.resolve(activity);\n }\n\n const keyUrl = activity.encryptionKeyUrl || activity.object.encryptionKeyUrl || key;\n\n let promises = [];\n\n // iterate and recursively decrypt over children objects\n\n if (activity.children && Array.isArray(activity.children)) {\n promises = activity.children.map((child) =>\n ctx.transform('decryptObject', keyUrl, child.activity)\n );\n }\n\n promises.push(ctx.transform('decryptObject', keyUrl, activity.object));\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a microappInstance (recording) model\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} microappInstance A microappInstance which includes several properties of a recording\n * @param {String} microappInstance.model An encrypted string which decrypts to an object\n * @returns {Promise} Returns a context transform\n */\n decryptMicroappinstance(ctx, key, microappInstance) {\n return ctx.transform('decryptPropModel', key, microappInstance);\n },\n\n /**\n * Decrypts a comment...\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} comment A comment object with a displayName and content (encrypted)\n * @returns {Promise} Returns the results of Promise.all on two transforms\n */\n decryptComment(ctx, key, comment) {\n const promises = [\n ctx.transform('decryptPropDisplayName', key, comment),\n ctx.transform('decryptPropContent', key, comment),\n ];\n\n if (comment.cards && Array.isArray(comment.cards)) {\n comment.cards.map((item, index) =>\n promises.push(ctx.transform('decryptPropCardItem', index, key, comment.cards))\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a content field\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContent(ctx, key, content) {\n if (content.contentCategory === 'links') {\n return ctx.transform('decryptContentLinks', key, content);\n }\n\n return ctx.transform('decryptContentFiles', key, content);\n },\n\n /**\n * Decrypts a content field which contains files and possibly links\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @param {Array} content.files An array of files to decrypt by calling decryptObject\n * @param {Array} content.links An array of links to decrypt by calling decryptObject\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContentFiles(ctx, key, content) {\n if (!content.files || !content.files.items || !Array.isArray(content.files.items)) {\n return Promise.resolve();\n }\n\n const promises = content.files.items.map((item) => ctx.transform('decryptObject', key, item));\n\n promises.push(ctx.transform('decryptComment', key, content));\n\n if (content.links && content.links.items && Array.isArray(content.links.items)) {\n content.links.items.forEach((item) =>\n promises.push(ctx.transform('decryptObject', key, item))\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a content field which contains links\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @param {Array} content.links An array of links to decrypt by calling decryptObject\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContentLinks(ctx, key, content) {\n if (!content.links || !content.links.items || !Array.isArray(content.links.items)) {\n return Promise.resolve();\n }\n\n const promises = content.links.items.map((item) => ctx.transform('decryptObject', key, item));\n\n promises.push(ctx.transform('decryptComment', key, content));\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts what may be a meeting event?\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} event An object with a display name and location to be decrypted\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptEvent(ctx, key, event) {\n const promises = [ctx.transform('decryptPropDisplayName', key, event)];\n\n if (event.location && event.location.split('.').length === 5) {\n promises.push(ctx.transform('decryptPropLocation', key, event));\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a file and it's transcodedContents if they exist\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} file A file object with file props an optional transcodedCollection to decrypt\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptFile(ctx, key, file) {\n // using object encryption keyUrl for images instead of activity encryptionKeyUrl\n if (file.encryptionKeyUrl && file.encryptionKeyUrl !== key) {\n key = file.encryptionKeyUrl;\n }\n\n return Promise.all([\n file.transcodedCollection &&\n Promise.all(\n file.transcodedCollection.items.map((item) => ctx.transform('decryptObject', key, item))\n ),\n ctx.transform('decryptPropScr', key, file),\n ctx.transform('decryptPropDisplayName', key, file),\n ctx.transform('decryptPropContent', key, file),\n file.image && ctx.transform('decryptPropScr', key, file.image),\n ]);\n },\n\n /**\n * Decrypts a file and it's transcodedContents if they exist\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} link A link object with a URL to decrypt\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptLink(ctx, key, link) {\n return Promise.all([\n ctx.transform('decryptPropSslr', key, link),\n ctx.transform('decryptPropDisplayName', key, link),\n ]);\n },\n\n /**\n * Decrypts transcoded file content. Calls decryptFile\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} transcodedContent Transcoded content with a files prop\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptTranscodedContent(ctx, key, transcodedContent) {\n return Promise.all(\n transcodedContent.files.items.map((item) => ctx.transform('decryptFile', key, item))\n );\n },\n\n /**\n * Decrypts an image uri\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {String} imageURI URI of the image to decrypt\n * @returns {Promise} Returns a promise.\n */\n decryptImageURI(ctx, key, imageURI) {\n return ctx.transform('decryptPropLocation', key, imageURI);\n },\n\n /**\n * The heart of most decryption logic ends here. Decrypting text.\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} name Property of an object to be decrypted\n * @param {String} key KMS key\n * @param {Object} object A generic object with text props to be decrypted\n * @returns {Promise} Returns a lonely Promise\n */\n decryptTextProp(ctx, name, key, object) {\n if (!object[name]) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx.webex.internal.encryption\n .decryptText(key, object[name])\n .then((plaintext) => {\n if (ctx.webex.config.conversation.keepEncryptedProperties) {\n const encryptedPropName = camelCase(`encrypted_${name}`);\n\n object[encryptedPropName] = object[name]; // eslint-disable-line no-param-reassign\n }\n\n object[name] = plaintext; // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(`plugin-conversation: failed to decrypt ${name} `, reason);\n object[name] = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n\n /**\n * Decrypting an element in an Array.\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {Integer} index Property of an object to be decrypted\n * @param {String} key KMS key\n * @param {Array} array An array of Strings to be decrypted\n * @returns {Promise} Returns a lonely Promise\n */\n decryptPropCardItem(ctx, index, key, array) {\n if (\n !Number.isInteger(index) ||\n !array ||\n !Array.isArray(array) ||\n index < 0 ||\n index >= array.length ||\n !(array[index] instanceof String || typeof array[index] === 'string')\n ) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx.webex.internal.encryption\n .decryptText(key, array[index])\n .then((plaintext) => {\n array[index] = plaintext; // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(`plugin-conversation: failed to decrypt card at ${index} `, reason);\n array[index] = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n /**\n * Decrypts the src of an object (for images?)\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} object An object with a scr property to be decrypted\n * @returns {Promise} Returns a promise\n */\n decryptPropScr(ctx, key, object) {\n return ctx.webex.internal.encryption.decryptScr(key, object.scr).then((scr) => {\n object.scr = scr; // eslint-disable-line no-param-reassign\n });\n },\n\n /**\n * Decrypts the sslr object\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} object An object with a sslr property to be decrypted\n * @returns {Promise} Returns a promise\n */\n decryptPropSslr(ctx, key, object) {\n return ctx.webex.internal.encryption.decryptScr(key, object.sslr).then((sslr) => {\n object.sslr = sslr; // eslint-disable-line no-param-reassign\n });\n },\n\n decryptPropDisplayName: decryptTextProp('displayName'),\n\n decryptPropContent: decryptTextProp('content'),\n\n decryptPropModel: decryptTextProp('model'),\n\n decryptPropLocation: decryptTextProp('location'),\n\n decryptPropTopic: decryptTextProp('topic'),\n});\n"],"mappings":"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"}
|