@webex/internal-plugin-calendar 3.0.0-beta.4 → 3.0.0-beta.400
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/README.md +1 -3
- package/dist/calendar.decrypt.helper.js +73 -0
- package/dist/calendar.decrypt.helper.js.map +1 -0
- package/dist/calendar.encrypt.helper.js +88 -0
- package/dist/calendar.encrypt.helper.js.map +1 -0
- package/dist/calendar.js +235 -116
- package/dist/calendar.js.map +1 -1
- package/dist/collection.js +0 -19
- package/dist/collection.js.map +1 -1
- package/dist/config.js +0 -3
- package/dist/config.js.map +1 -1
- package/dist/constants.js +0 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.js +10 -24
- package/dist/index.js.map +1 -1
- package/dist/util.js +0 -13
- package/dist/util.js.map +1 -1
- package/package.json +9 -11
- package/src/calendar.decrypt.helper.js +121 -0
- package/src/calendar.encrypt.helper.js +98 -0
- package/src/calendar.js +264 -53
- package/src/collection.js +2 -4
- package/src/config.js +2 -2
- package/src/index.js +124 -43
- package/src/util.js +5 -3
- package/test/integration/spec/calendar.js +379 -271
- package/test/unit/spec/calendar.decrypt.helper.js +145 -0
- package/test/unit/spec/calendar.encrypt.helper.js +52 -0
- package/test/unit/spec/calendar.js +298 -94
- package/test/unit/spec/utils.js +4 -1
package/dist/collection.js
CHANGED
|
@@ -1,30 +1,21 @@
|
|
|
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.default = void 0;
|
|
12
|
-
|
|
13
9
|
var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
|
|
14
|
-
|
|
15
10
|
var _find2 = _interopRequireDefault(require("lodash/find"));
|
|
16
|
-
|
|
17
11
|
var _util = _interopRequireDefault(require("./util"));
|
|
18
|
-
|
|
19
12
|
var _constants = require("./constants");
|
|
20
|
-
|
|
21
13
|
/**
|
|
22
14
|
* @class CalendarCollection
|
|
23
15
|
*/
|
|
24
16
|
var CalendarCollection = {
|
|
25
17
|
namespace: _constants.CALENDAR,
|
|
26
18
|
items: {},
|
|
27
|
-
|
|
28
19
|
/**
|
|
29
20
|
* @param {String} id calendar ID
|
|
30
21
|
* @returns {Any} Calendar Item specifc to that id
|
|
@@ -34,7 +25,6 @@ var CalendarCollection = {
|
|
|
34
25
|
get: function get(id) {
|
|
35
26
|
return this.items[id];
|
|
36
27
|
},
|
|
37
|
-
|
|
38
28
|
/**
|
|
39
29
|
* @param {String} key any key and the corresponding calendar Item
|
|
40
30
|
* @param {String} value any values corresponding to calendar item
|
|
@@ -48,10 +38,8 @@ var CalendarCollection = {
|
|
|
48
38
|
return item[key] === value;
|
|
49
39
|
});
|
|
50
40
|
}
|
|
51
|
-
|
|
52
41
|
return null;
|
|
53
42
|
},
|
|
54
|
-
|
|
55
43
|
/**
|
|
56
44
|
* @param {Object} item CalendarObject passed to the collection
|
|
57
45
|
* @returns {Any} returns calender id whats get set
|
|
@@ -60,13 +48,10 @@ var CalendarCollection = {
|
|
|
60
48
|
*/
|
|
61
49
|
set: function set(item) {
|
|
62
50
|
var itemId = item.id;
|
|
63
|
-
|
|
64
51
|
var meeting = _util.default.calculateEndTime(item);
|
|
65
|
-
|
|
66
52
|
this.items[itemId] = meeting;
|
|
67
53
|
return itemId;
|
|
68
54
|
},
|
|
69
|
-
|
|
70
55
|
/**
|
|
71
56
|
* resets all the values in the calendarcollection
|
|
72
57
|
* @returns {undefined}
|
|
@@ -76,7 +61,6 @@ var CalendarCollection = {
|
|
|
76
61
|
reset: function reset() {
|
|
77
62
|
this.items = {};
|
|
78
63
|
},
|
|
79
|
-
|
|
80
64
|
/**
|
|
81
65
|
* @param {Id} id is the id for the calendar item to be removed
|
|
82
66
|
* @returns {Any} calendar item which got removed
|
|
@@ -88,7 +72,6 @@ var CalendarCollection = {
|
|
|
88
72
|
delete this.items[id];
|
|
89
73
|
return meeting;
|
|
90
74
|
},
|
|
91
|
-
|
|
92
75
|
/**
|
|
93
76
|
* sets all the item passed to the collection
|
|
94
77
|
* @param {Array} items array of calendar items
|
|
@@ -98,12 +81,10 @@ var CalendarCollection = {
|
|
|
98
81
|
*/
|
|
99
82
|
setAll: function setAll(items) {
|
|
100
83
|
var _this = this;
|
|
101
|
-
|
|
102
84
|
items.forEach(function (item) {
|
|
103
85
|
_this.set(item);
|
|
104
86
|
});
|
|
105
87
|
},
|
|
106
|
-
|
|
107
88
|
/**
|
|
108
89
|
* gets all the calendar stored in the collection
|
|
109
90
|
* @param {Array} items array of calendar items
|
package/dist/collection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CalendarCollection","namespace","CALENDAR","items","get","id","getBy","key","value","item","set","itemId","meeting","CalendarUtil","calculateEndTime","reset","remove","setAll","forEach","getAll"],"sources":["collection.js"],"sourcesContent":["import {find} from 'lodash';\n\nimport CalendarUtil from './util';\nimport {CALENDAR} from './constants';\n/**\n * @class CalendarCollection\n */\nconst CalendarCollection = {\n namespace: CALENDAR,\n items: {},\n /**\n * @param {String} id calendar ID\n * @returns {Any} Calendar Item specifc to that id\n * @private\n * @memberof CalendarCollection\n */\n get(id) {\n return this.items[id];\n },\n\n /**\n * @param {String} key any key and the corresponding calendar Item\n * @param {String} value any values corresponding to calendar item\n * @returns {Any} returns whatever is being stuffed into the collection\n * @private\n * @memberof CalendarCollection\n */\n getBy(key, value) {\n if (key && value) {\n return find(this.items, (item) =>
|
|
1
|
+
{"version":3,"names":["CalendarCollection","namespace","CALENDAR","items","get","id","getBy","key","value","item","set","itemId","meeting","CalendarUtil","calculateEndTime","reset","remove","setAll","forEach","getAll"],"sources":["collection.js"],"sourcesContent":["import {find} from 'lodash';\n\nimport CalendarUtil from './util';\nimport {CALENDAR} from './constants';\n/**\n * @class CalendarCollection\n */\nconst CalendarCollection = {\n namespace: CALENDAR,\n items: {},\n /**\n * @param {String} id calendar ID\n * @returns {Any} Calendar Item specifc to that id\n * @private\n * @memberof CalendarCollection\n */\n get(id) {\n return this.items[id];\n },\n\n /**\n * @param {String} key any key and the corresponding calendar Item\n * @param {String} value any values corresponding to calendar item\n * @returns {Any} returns whatever is being stuffed into the collection\n * @private\n * @memberof CalendarCollection\n */\n getBy(key, value) {\n if (key && value) {\n return find(this.items, (item) => item[key] === value);\n }\n\n return null;\n },\n\n /**\n * @param {Object} item CalendarObject passed to the collection\n * @returns {Any} returns calender id whats get set\n * @private\n * @memberof CalendarCollection\n */\n set(item) {\n const itemId = item.id;\n const meeting = CalendarUtil.calculateEndTime(item);\n\n this.items[itemId] = meeting;\n\n return itemId;\n },\n\n /**\n * resets all the values in the calendarcollection\n * @returns {undefined}\n * @private\n * @memberof CalendarCollection\n */\n reset() {\n this.items = {};\n },\n\n /**\n * @param {Id} id is the id for the calendar item to be removed\n * @returns {Any} calendar item which got removed\n * @private\n * @memberof CalendarCollection\n */\n remove(id) {\n const meeting = this.get(id);\n\n delete this.items[id];\n\n return meeting;\n },\n\n /**\n * sets all the item passed to the collection\n * @param {Array} items array of calendar items\n * @private\n * @returns {undefined}\n * @memberof CalendarCollection\n */\n setAll(items) {\n items.forEach((item) => {\n this.set(item);\n });\n },\n\n /**\n * gets all the calendar stored in the collection\n * @param {Array} items array of calendar items\n * @private\n * @returns {Array} returns an array of calendar items\n * @memberof CalendarCollection\n */\n getAll() {\n return Object.values(this.items);\n },\n};\n\nexport default CalendarCollection;\n"],"mappings":";;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAMA,kBAAkB,GAAG;EACzBC,SAAS,EAAEC,mBAAQ;EACnBC,KAAK,EAAE,CAAC,CAAC;EACT;AACF;AACA;AACA;AACA;AACA;EACEC,GAAG,eAACC,EAAE,EAAE;IACN,OAAO,IAAI,CAACF,KAAK,CAACE,EAAE,CAAC;EACvB,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,KAAK,iBAACC,GAAG,EAAEC,KAAK,EAAE;IAChB,IAAID,GAAG,IAAIC,KAAK,EAAE;MAChB,OAAO,oBAAK,IAAI,CAACL,KAAK,EAAE,UAACM,IAAI;QAAA,OAAKA,IAAI,CAACF,GAAG,CAAC,KAAKC,KAAK;MAAA,EAAC;IACxD;IAEA,OAAO,IAAI;EACb,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEE,GAAG,eAACD,IAAI,EAAE;IACR,IAAME,MAAM,GAAGF,IAAI,CAACJ,EAAE;IACtB,IAAMO,OAAO,GAAGC,aAAY,CAACC,gBAAgB,CAACL,IAAI,CAAC;IAEnD,IAAI,CAACN,KAAK,CAACQ,MAAM,CAAC,GAAGC,OAAO;IAE5B,OAAOD,MAAM;EACf,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEI,KAAK,mBAAG;IACN,IAAI,CAACZ,KAAK,GAAG,CAAC,CAAC;EACjB,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEa,MAAM,kBAACX,EAAE,EAAE;IACT,IAAMO,OAAO,GAAG,IAAI,CAACR,GAAG,CAACC,EAAE,CAAC;IAE5B,OAAO,IAAI,CAACF,KAAK,CAACE,EAAE,CAAC;IAErB,OAAOO,OAAO;EAChB,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,MAAM,kBAACd,KAAK,EAAE;IAAA;IACZA,KAAK,CAACe,OAAO,CAAC,UAACT,IAAI,EAAK;MACtB,KAAI,CAACC,GAAG,CAACD,IAAI,CAAC;IAChB,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEU,MAAM,oBAAG;IACP,OAAO,qBAAc,IAAI,CAAChB,KAAK,CAAC;EAClC;AACF,CAAC;AAAC,eAEaH,kBAAkB;AAAA"}
|
package/dist/config.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
_Object$defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
|
|
9
7
|
exports.default = void 0;
|
|
10
|
-
|
|
11
8
|
/*!
|
|
12
9
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
13
10
|
*/
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["calendar","fromDate","Date","setDate","getDate","toDate"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n calendar: {\n fromDate: new Date(new Date().setDate(new Date().getDate() - 1)),\n toDate: new Date(new Date().setDate(new Date().getDate() + 7))
|
|
1
|
+
{"version":3,"names":["calendar","fromDate","Date","setDate","getDate","toDate"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n calendar: {\n fromDate: new Date(new Date().setDate(new Date().getDate() - 1)),\n toDate: new Date(new Date().setDate(new Date().getDate() + 7)),\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,eAIe;EACbA,QAAQ,EAAE;IACRC,QAAQ,EAAE,IAAIC,IAAI,CAAC,IAAIA,IAAI,EAAE,CAACC,OAAO,CAAC,IAAID,IAAI,EAAE,CAACE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAChEC,MAAM,EAAE,IAAIH,IAAI,CAAC,IAAIA,IAAI,EAAE,CAACC,OAAO,CAAC,IAAID,IAAI,EAAE,CAACE,OAAO,EAAE,GAAG,CAAC,CAAC;EAC/D;AACF,CAAC;AAAA"}
|
package/dist/constants.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
_Object$defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
|
|
9
7
|
exports.CALENDAR_UPDATED = exports.CALENDAR_UNREGISTERED = exports.CALENDAR_REGISTERED = exports.CALENDAR_DELETE = exports.CALENDAR_CREATE = exports.CALENDAR = void 0;
|
|
10
8
|
var CALENDAR_REGISTERED = 'calendar:registered';
|
|
11
9
|
exports.CALENDAR_REGISTERED = CALENDAR_REGISTERED;
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CALENDAR_REGISTERED","CALENDAR_UNREGISTERED","CALENDAR_UPDATED","CALENDAR_DELETE","CALENDAR_CREATE","CALENDAR"],"sources":["constants.js"],"sourcesContent":["export const CALENDAR_REGISTERED = 'calendar:registered';\nexport const CALENDAR_UNREGISTERED = 'calendar:unregistered';\nexport const CALENDAR_UPDATED = 'calendar:update';\nexport const CALENDAR_DELETE = 'calendar:delete';\nexport const CALENDAR_CREATE = 'calendar:create';\nexport const CALENDAR = 'CALENDAR';\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["CALENDAR_REGISTERED","CALENDAR_UNREGISTERED","CALENDAR_UPDATED","CALENDAR_DELETE","CALENDAR_CREATE","CALENDAR"],"sources":["constants.js"],"sourcesContent":["export const CALENDAR_REGISTERED = 'calendar:registered';\nexport const CALENDAR_UNREGISTERED = 'calendar:unregistered';\nexport const CALENDAR_UPDATED = 'calendar:update';\nexport const CALENDAR_DELETE = 'calendar:delete';\nexport const CALENDAR_CREATE = 'calendar:create';\nexport const CALENDAR = 'CALENDAR';\n"],"mappings":";;;;;;;AAAO,IAAMA,mBAAmB,GAAG,qBAAqB;AAAC;AAClD,IAAMC,qBAAqB,GAAG,uBAAuB;AAAC;AACtD,IAAMC,gBAAgB,GAAG,iBAAiB;AAAC;AAC3C,IAAMC,eAAe,GAAG,iBAAiB;AAAC;AAC1C,IAAMC,eAAe,GAAG,iBAAiB;AAAC;AAC1C,IAAMC,QAAQ,GAAG,UAAU;AAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,39 +1,28 @@
|
|
|
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
|
_Object$defineProperty(exports, "default", {
|
|
12
9
|
enumerable: true,
|
|
13
10
|
get: function get() {
|
|
14
11
|
return _calendar.default;
|
|
15
12
|
}
|
|
16
13
|
});
|
|
17
|
-
|
|
18
14
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
19
|
-
|
|
20
15
|
var _has2 = _interopRequireDefault(require("lodash/has"));
|
|
21
|
-
|
|
22
16
|
require("@webex/internal-plugin-device");
|
|
23
|
-
|
|
24
17
|
require("@webex/internal-plugin-encryption");
|
|
25
|
-
|
|
26
18
|
require("@webex/internal-plugin-conversation");
|
|
27
|
-
|
|
28
19
|
var _webexCore = require("@webex/webex-core");
|
|
29
|
-
|
|
30
20
|
var _calendar = _interopRequireDefault(require("./calendar"));
|
|
31
|
-
|
|
32
21
|
var _config = _interopRequireDefault(require("./config"));
|
|
33
|
-
|
|
34
22
|
/*!
|
|
35
23
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
36
24
|
*/
|
|
25
|
+
|
|
37
26
|
(0, _webexCore.registerInternalPlugin)('calendar', _calendar.default, {
|
|
38
27
|
config: _config.default,
|
|
39
28
|
payloadTransformer: {
|
|
@@ -41,7 +30,7 @@ var _config = _interopRequireDefault(require("./config"));
|
|
|
41
30
|
name: 'transformMeetingNotes',
|
|
42
31
|
direction: 'inbound',
|
|
43
32
|
test: function test(ctx, response) {
|
|
44
|
-
return _promise.default.resolve((0, _has2.default)(response, 'body.encryptedNotes'));
|
|
33
|
+
return _promise.default.resolve((0, _has2.default)(response, 'body.encryptedNotes') && !(response.options && response.options.service === 'calendar' && response.options.method === 'GET' && response.options.resource === 'schedulerData'));
|
|
45
34
|
},
|
|
46
35
|
extract: function extract(response) {
|
|
47
36
|
return _promise.default.resolve(response.body);
|
|
@@ -50,7 +39,7 @@ var _config = _interopRequireDefault(require("./config"));
|
|
|
50
39
|
name: 'transformMeetingParticipants',
|
|
51
40
|
direction: 'inbound',
|
|
52
41
|
test: function test(ctx, response) {
|
|
53
|
-
return _promise.default.resolve((0, _has2.default)(response, 'body.encryptedParticipants'));
|
|
42
|
+
return _promise.default.resolve((0, _has2.default)(response, 'body.encryptedParticipants') && !(response.options && response.options.service === 'calendar' && response.options.method === 'GET' && response.options.resource === 'schedulerData'));
|
|
54
43
|
},
|
|
55
44
|
extract: function extract(response) {
|
|
56
45
|
return _promise.default.resolve(response.body);
|
|
@@ -68,7 +57,7 @@ var _config = _interopRequireDefault(require("./config"));
|
|
|
68
57
|
name: 'transformMeeting',
|
|
69
58
|
direction: 'inbound',
|
|
70
59
|
test: function test(ctx, response) {
|
|
71
|
-
return _promise.default.resolve((0, _has2.default)(response, 'body.seriesId'));
|
|
60
|
+
return _promise.default.resolve((0, _has2.default)(response, 'body.seriesId') && !(response.options && response.options.service === 'calendar' && response.options.method === 'GET' && response.options.resource === 'schedulerData'));
|
|
72
61
|
},
|
|
73
62
|
extract: function extract(response) {
|
|
74
63
|
return _promise.default.resolve(response.body);
|
|
@@ -97,16 +86,16 @@ var _config = _interopRequireDefault(require("./config"));
|
|
|
97
86
|
if (!object) {
|
|
98
87
|
return _promise.default.resolve();
|
|
99
88
|
}
|
|
100
|
-
|
|
101
89
|
if (!object.encryptionKeyUrl) {
|
|
102
90
|
return _promise.default.resolve();
|
|
103
|
-
}
|
|
104
|
-
|
|
91
|
+
}
|
|
105
92
|
|
|
93
|
+
// Decrypt participant properties if meeting object contains participants
|
|
106
94
|
var decryptedParticipants = object.encryptedParticipants ? object.encryptedParticipants.map(function (participant) {
|
|
107
95
|
return _promise.default.all([ctx.transform('decryptTextProp', 'encryptedEmailAddress', object.encryptionKeyUrl, participant), ctx.transform('decryptTextProp', 'encryptedName', object.encryptionKeyUrl, participant)]);
|
|
108
|
-
}) : [];
|
|
96
|
+
}) : [];
|
|
109
97
|
|
|
98
|
+
// Decrypt meetingJoinInfo properties if meeting object contains meetingJoinInfo
|
|
110
99
|
var decryptedMeetingJoinInfo = object.meetingJoinInfo ? _promise.default.all([ctx.transform('decryptTextProp', 'meetingJoinURI', object.encryptionKeyUrl, object.meetingJoinInfo), ctx.transform('decryptTextProp', 'meetingJoinURL', object.encryptionKeyUrl, object.meetingJoinInfo)]) : [];
|
|
111
100
|
var decryptedOrganizer = object.encryptedOrganizer ? _promise.default.all([ctx.transform('decryptTextProp', 'encryptedEmailAddress', object.encryptionKeyUrl, object.encryptedOrganizer), ctx.transform('decryptTextProp', 'encryptedName', object.encryptionKeyUrl, object.encryptedOrganizer)]) : [];
|
|
112
101
|
return _promise.default.all([ctx.transform('decryptTextProp', 'encryptedSubject', object.encryptionKeyUrl, object), ctx.transform('decryptTextProp', 'encryptedLocation', object.encryptionKeyUrl, object), ctx.transform('decryptTextProp', 'encryptedNotes', object.encryptionKeyUrl, object), ctx.transform('decryptTextProp', 'webexURI', object.encryptionKeyUrl, object), ctx.transform('decryptTextProp', 'webexURL', object.encryptionKeyUrl, object), ctx.transform('decryptTextProp', 'spaceMeetURL', object.encryptionKeyUrl, object), ctx.transform('decryptTextProp', 'spaceURI', object.encryptionKeyUrl, object), ctx.transform('decryptTextProp', 'spaceURL', object.encryptionKeyUrl, object)].concat(decryptedOrganizer, decryptedParticipants, decryptedMeetingJoinInfo));
|
|
@@ -118,11 +107,9 @@ var _config = _interopRequireDefault(require("./config"));
|
|
|
118
107
|
if (!object) {
|
|
119
108
|
return _promise.default.resolve();
|
|
120
109
|
}
|
|
121
|
-
|
|
122
110
|
if (!object.encryptionKeyUrl) {
|
|
123
111
|
return _promise.default.resolve();
|
|
124
112
|
}
|
|
125
|
-
|
|
126
113
|
return _promise.default.all([ctx.transform('decryptTextProp', 'encryptedNotes', object.encryptionKeyUrl, object)]);
|
|
127
114
|
}
|
|
128
115
|
}, {
|
|
@@ -132,12 +119,11 @@ var _config = _interopRequireDefault(require("./config"));
|
|
|
132
119
|
if (!object) {
|
|
133
120
|
return _promise.default.resolve();
|
|
134
121
|
}
|
|
135
|
-
|
|
136
122
|
if (!object.encryptionKeyUrl || !object.encryptedParticipants) {
|
|
137
123
|
return _promise.default.resolve();
|
|
138
|
-
}
|
|
139
|
-
|
|
124
|
+
}
|
|
140
125
|
|
|
126
|
+
// Decrypt participant properties
|
|
141
127
|
var decryptedParticipants = object.encryptedParticipants.map(function (participant) {
|
|
142
128
|
return _promise.default.all([ctx.transform('decryptTextProp', 'encryptedEmailAddress', object.encryptionKeyUrl, participant), ctx.transform('decryptTextProp', 'encryptedName', object.encryptionKeyUrl, participant)]);
|
|
143
129
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["registerInternalPlugin","Calendar","config","payloadTransformer","predicates","name","direction","test","ctx","response","resolve","extract","body","items","calendarMeetingExternal","transforms","fn","array","all","map","item","transform","object","encryptionKeyUrl","decryptedParticipants","encryptedParticipants","participant","decryptedMeetingJoinInfo","meetingJoinInfo","decryptedOrganizer","encryptedOrganizer","concat"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\nimport '@webex/internal-plugin-encryption';\nimport '@webex/internal-plugin-conversation';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {has} from 'lodash';\n\nimport Calendar from './calendar';\nimport config from './config';\n\nregisterInternalPlugin('calendar', Calendar, {\n config,\n payloadTransformer: {\n predicates: [\n {\n name: 'transformMeetingNotes',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(has(response, 'body.encryptedNotes'));\n },\n extract(response) {\n return Promise.resolve(response.body);\n }\n },\n {\n name: 'transformMeetingParticipants',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(has(response, 'body.encryptedParticipants'));\n },\n extract(response) {\n return Promise.resolve(response.body);\n }\n },\n {\n name: 'transformMeetingArray',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(has(response, 'body.items[0].seriesId'));\n },\n extract(response) {\n return Promise.resolve(response.body.items);\n }\n },\n {\n name: 'transformMeeting',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(has(response, 'body.seriesId'));\n },\n extract(response) {\n return Promise.resolve(response.body);\n }\n },\n {\n name: 'transformMeeting',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(has(response, 'calendarMeetingExternal'));\n },\n extract(response) {\n return Promise.resolve(response.calendarMeetingExternal);\n }\n }\n ],\n transforms: [\n {\n name: 'transformMeetingArray',\n fn(ctx, array) {\n return Promise.all(array.map((item) => ctx.transform('transformMeeting', item)));\n }\n },\n {\n name: 'transformMeeting',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.encryptionKeyUrl) {\n return Promise.resolve();\n }\n\n // Decrypt participant properties if meeting object contains participants\n const decryptedParticipants = object.encryptedParticipants ? object.encryptedParticipants.map((participant) => Promise.all([\n ctx.transform('decryptTextProp', 'encryptedEmailAddress', object.encryptionKeyUrl, participant),\n ctx.transform('decryptTextProp', 'encryptedName', object.encryptionKeyUrl, participant)\n ])) : [];\n\n // Decrypt meetingJoinInfo properties if meeting object contains meetingJoinInfo\n const decryptedMeetingJoinInfo = object.meetingJoinInfo ? Promise.all([\n ctx.transform('decryptTextProp', 'meetingJoinURI', object.encryptionKeyUrl, object.meetingJoinInfo),\n ctx.transform('decryptTextProp', 'meetingJoinURL', object.encryptionKeyUrl, object.meetingJoinInfo)\n ]) : [];\n\n const decryptedOrganizer = object.encryptedOrganizer ? Promise.all([\n ctx.transform('decryptTextProp', 'encryptedEmailAddress', object.encryptionKeyUrl, object.encryptedOrganizer),\n ctx.transform('decryptTextProp', 'encryptedName', object.encryptionKeyUrl, object.encryptedOrganizer)\n ]) : [];\n\n return Promise.all([\n ctx.transform('decryptTextProp', 'encryptedSubject', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'encryptedLocation', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'encryptedNotes', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'webexURI', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'webexURL', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'spaceMeetURL', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'spaceURI', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'spaceURL', object.encryptionKeyUrl, object)\n ].concat(decryptedOrganizer, decryptedParticipants, decryptedMeetingJoinInfo));\n }\n },\n {\n name: 'transformMeetingNotes',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.encryptionKeyUrl) {\n return Promise.resolve();\n }\n\n return Promise.all([\n ctx.transform('decryptTextProp', 'encryptedNotes', object.encryptionKeyUrl, object)\n ]);\n }\n },\n {\n name: 'transformMeetingParticipants',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.encryptionKeyUrl || !object.encryptedParticipants) {\n return Promise.resolve();\n }\n\n // Decrypt participant properties\n const decryptedParticipants = object.encryptedParticipants.map((participant) => Promise.all([\n ctx.transform('decryptTextProp', 'encryptedEmailAddress', object.encryptionKeyUrl, participant),\n ctx.transform('decryptTextProp', 'encryptedName', object.encryptionKeyUrl, participant)\n ]));\n\n return Promise.all(decryptedParticipants);\n }\n }\n ]\n }\n});\n\nexport {default} from './calendar';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["registerInternalPlugin","Calendar","config","payloadTransformer","predicates","name","direction","test","ctx","response","resolve","options","service","method","resource","extract","body","items","calendarMeetingExternal","transforms","fn","array","all","map","item","transform","object","encryptionKeyUrl","decryptedParticipants","encryptedParticipants","participant","decryptedMeetingJoinInfo","meetingJoinInfo","decryptedOrganizer","encryptedOrganizer","concat"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\nimport '@webex/internal-plugin-encryption';\nimport '@webex/internal-plugin-conversation';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {has} from 'lodash';\n\nimport Calendar from './calendar';\nimport config from './config';\n\nregisterInternalPlugin('calendar', Calendar, {\n config,\n payloadTransformer: {\n predicates: [\n {\n name: 'transformMeetingNotes',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(\n has(response, 'body.encryptedNotes') &&\n !(\n response.options &&\n response.options.service === 'calendar' &&\n response.options.method === 'GET' &&\n response.options.resource === 'schedulerData'\n )\n );\n },\n extract(response) {\n return Promise.resolve(response.body);\n },\n },\n {\n name: 'transformMeetingParticipants',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(\n has(response, 'body.encryptedParticipants') &&\n !(\n response.options &&\n response.options.service === 'calendar' &&\n response.options.method === 'GET' &&\n response.options.resource === 'schedulerData'\n )\n );\n },\n extract(response) {\n return Promise.resolve(response.body);\n },\n },\n {\n name: 'transformMeetingArray',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(has(response, 'body.items[0].seriesId'));\n },\n extract(response) {\n return Promise.resolve(response.body.items);\n },\n },\n {\n name: 'transformMeeting',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(\n has(response, 'body.seriesId') &&\n !(\n response.options &&\n response.options.service === 'calendar' &&\n response.options.method === 'GET' &&\n response.options.resource === 'schedulerData'\n )\n );\n },\n extract(response) {\n return Promise.resolve(response.body);\n },\n },\n {\n name: 'transformMeeting',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(has(response, 'calendarMeetingExternal'));\n },\n extract(response) {\n return Promise.resolve(response.calendarMeetingExternal);\n },\n },\n ],\n transforms: [\n {\n name: 'transformMeetingArray',\n fn(ctx, array) {\n return Promise.all(array.map((item) => ctx.transform('transformMeeting', item)));\n },\n },\n {\n name: 'transformMeeting',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.encryptionKeyUrl) {\n return Promise.resolve();\n }\n\n // Decrypt participant properties if meeting object contains participants\n const decryptedParticipants = object.encryptedParticipants\n ? object.encryptedParticipants.map((participant) =>\n Promise.all([\n ctx.transform(\n 'decryptTextProp',\n 'encryptedEmailAddress',\n object.encryptionKeyUrl,\n participant\n ),\n ctx.transform(\n 'decryptTextProp',\n 'encryptedName',\n object.encryptionKeyUrl,\n participant\n ),\n ])\n )\n : [];\n\n // Decrypt meetingJoinInfo properties if meeting object contains meetingJoinInfo\n const decryptedMeetingJoinInfo = object.meetingJoinInfo\n ? Promise.all([\n ctx.transform(\n 'decryptTextProp',\n 'meetingJoinURI',\n object.encryptionKeyUrl,\n object.meetingJoinInfo\n ),\n ctx.transform(\n 'decryptTextProp',\n 'meetingJoinURL',\n object.encryptionKeyUrl,\n object.meetingJoinInfo\n ),\n ])\n : [];\n\n const decryptedOrganizer = object.encryptedOrganizer\n ? Promise.all([\n ctx.transform(\n 'decryptTextProp',\n 'encryptedEmailAddress',\n object.encryptionKeyUrl,\n object.encryptedOrganizer\n ),\n ctx.transform(\n 'decryptTextProp',\n 'encryptedName',\n object.encryptionKeyUrl,\n object.encryptedOrganizer\n ),\n ])\n : [];\n\n return Promise.all(\n [\n ctx.transform('decryptTextProp', 'encryptedSubject', object.encryptionKeyUrl, object),\n ctx.transform(\n 'decryptTextProp',\n 'encryptedLocation',\n object.encryptionKeyUrl,\n object\n ),\n ctx.transform('decryptTextProp', 'encryptedNotes', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'webexURI', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'webexURL', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'spaceMeetURL', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'spaceURI', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'spaceURL', object.encryptionKeyUrl, object),\n ].concat(decryptedOrganizer, decryptedParticipants, decryptedMeetingJoinInfo)\n );\n },\n },\n {\n name: 'transformMeetingNotes',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.encryptionKeyUrl) {\n return Promise.resolve();\n }\n\n return Promise.all([\n ctx.transform('decryptTextProp', 'encryptedNotes', object.encryptionKeyUrl, object),\n ]);\n },\n },\n {\n name: 'transformMeetingParticipants',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.encryptionKeyUrl || !object.encryptedParticipants) {\n return Promise.resolve();\n }\n\n // Decrypt participant properties\n const decryptedParticipants = object.encryptedParticipants.map((participant) =>\n Promise.all([\n ctx.transform(\n 'decryptTextProp',\n 'encryptedEmailAddress',\n object.encryptionKeyUrl,\n participant\n ),\n ctx.transform(\n 'decryptTextProp',\n 'encryptedName',\n object.encryptionKeyUrl,\n participant\n ),\n ])\n );\n\n return Promise.all(decryptedParticipants);\n },\n },\n ],\n },\n});\n\nexport {default} from './calendar';\n"],"mappings":"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"}
|
package/dist/util.js
CHANGED
|
@@ -1,37 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
4
|
-
|
|
5
4
|
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
6
|
-
|
|
7
5
|
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
8
|
-
|
|
9
6
|
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
10
|
-
|
|
11
7
|
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
12
|
-
|
|
13
8
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
14
|
-
|
|
15
9
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
16
|
-
|
|
17
10
|
_Object$defineProperty(exports, "__esModule", {
|
|
18
11
|
value: true
|
|
19
12
|
});
|
|
20
|
-
|
|
21
13
|
exports.default = void 0;
|
|
22
|
-
|
|
23
14
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
24
|
-
|
|
25
15
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
26
|
-
|
|
27
16
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
28
|
-
|
|
29
17
|
var CalendarUtil = {
|
|
30
18
|
// calculate the end time for the meeting based on the duration so it's stored on
|
|
31
19
|
// the scheduled meeting item, that way client can display start and end without
|
|
32
20
|
// calculation on their side
|
|
33
21
|
// gets the start time from server, and the duration, and reformats
|
|
34
|
-
|
|
35
22
|
/**
|
|
36
23
|
* calculates the end time for meeting
|
|
37
24
|
* @param {Object} item the locus.host property
|
package/dist/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CalendarUtil","calculateEndTime","item","endTime","Date","start","getTime","durationMinutes"],"sources":["util.js"],"sourcesContent":["const CalendarUtil = {\n
|
|
1
|
+
{"version":3,"names":["CalendarUtil","calculateEndTime","item","endTime","Date","start","getTime","durationMinutes"],"sources":["util.js"],"sourcesContent":["const CalendarUtil = {\n // calculate the end time for the meeting based on the duration so it's stored on\n // the scheduled meeting item, that way client can display start and end without\n // calculation on their side\n // gets the start time from server, and the duration, and reformats\n /**\n * calculates the end time for meeting\n * @param {Object} item the locus.host property\n * @param {Object} item.start start time of the meeting\n * @param {Object} item.duration duration of the meeting\n * @returns {Object} end time of the meeting\n * @memberof CalendarUtil\n */\n calculateEndTime(item) {\n return {\n ...item,\n endTime: new Date(new Date(item.start).getTime() + item.durationMinutes * 60000),\n };\n },\n};\n\nexport default CalendarUtil;\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,IAAMA,YAAY,GAAG;EACnB;EACA;EACA;EACA;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,gBAAgB,4BAACC,IAAI,EAAE;IACrB,uCACKA,IAAI;MACPC,OAAO,EAAE,IAAIC,IAAI,CAAC,IAAIA,IAAI,CAACF,IAAI,CAACG,KAAK,CAAC,CAACC,OAAO,EAAE,GAAGJ,IAAI,CAACK,eAAe,GAAG,KAAK;IAAC;EAEpF;AACF,CAAC;AAAC,eAEaP,YAAY;AAAA"}
|
package/package.json
CHANGED
|
@@ -19,21 +19,19 @@
|
|
|
19
19
|
"envify"
|
|
20
20
|
]
|
|
21
21
|
},
|
|
22
|
-
"version": "3.0.0-beta.
|
|
22
|
+
"version": "3.0.0-beta.400",
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
25
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
26
|
-
"@webex/test-helper-retry": "3.0.0-beta.
|
|
27
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
24
|
+
"@webex/test-helper-chai": "3.0.0-beta.400",
|
|
25
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.400",
|
|
26
|
+
"@webex/test-helper-retry": "3.0.0-beta.400",
|
|
27
|
+
"@webex/test-helper-test-users": "3.0.0-beta.400",
|
|
28
28
|
"sinon": "^9.2.4"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@webex/internal-plugin-
|
|
32
|
-
"@webex/internal-plugin-
|
|
33
|
-
"@webex/internal-plugin-
|
|
34
|
-
"@webex/
|
|
35
|
-
"@webex/webex-core": "3.0.0-beta.4",
|
|
36
|
-
"btoa": "^1.2.1",
|
|
31
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.400",
|
|
32
|
+
"@webex/internal-plugin-device": "3.0.0-beta.400",
|
|
33
|
+
"@webex/internal-plugin-encryption": "3.0.0-beta.400",
|
|
34
|
+
"@webex/webex-core": "3.0.0-beta.400",
|
|
37
35
|
"lodash": "^4.17.21",
|
|
38
36
|
"uuid": "^3.3.2"
|
|
39
37
|
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
const _decryptTextProp = (ctx, name, key, object) => {
|
|
2
|
+
if (!object[name]) {
|
|
3
|
+
return Promise.resolve();
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
return ctx.webex.internal.encryption
|
|
7
|
+
.decryptText(key.uri || key, object[name])
|
|
8
|
+
.then((plaintext) => {
|
|
9
|
+
object[name] = plaintext;
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const DecryptHelper = {
|
|
14
|
+
/**
|
|
15
|
+
* Decrypt scheduler data response
|
|
16
|
+
* @param {object} [ctx] context
|
|
17
|
+
* @param {object} [data] scheduler data response
|
|
18
|
+
* @returns {Promise} Resolves with decrypted response
|
|
19
|
+
* */
|
|
20
|
+
decryptSchedulerDataResponse: (ctx, data) => {
|
|
21
|
+
if (!data) {
|
|
22
|
+
return Promise.resolve();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (!data.encryptionKeyUrl) {
|
|
26
|
+
return Promise.resolve();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Decrypt participant properties if meeting object contains participants
|
|
30
|
+
const decryptedParticipants = data.encryptedParticipants
|
|
31
|
+
? data.encryptedParticipants.map((participant) =>
|
|
32
|
+
Promise.all([
|
|
33
|
+
_decryptTextProp(ctx, 'encryptedEmailAddress', data.encryptionKeyUrl, participant),
|
|
34
|
+
_decryptTextProp(ctx, 'encryptedName', data.encryptionKeyUrl, participant),
|
|
35
|
+
])
|
|
36
|
+
)
|
|
37
|
+
: [];
|
|
38
|
+
|
|
39
|
+
// Decrypt encryptedScheduleFor properties if meeting object contains SOB
|
|
40
|
+
const decryptedScheduleFor = Promise.all(
|
|
41
|
+
Object.values(data.encryptedScheduleFor || {}).flatMap((item) => [
|
|
42
|
+
_decryptTextProp(ctx, 'encryptedEmail', data.encryptionKeyUrl, item),
|
|
43
|
+
_decryptTextProp(ctx, 'encryptedDisplayName', data.encryptionKeyUrl, item),
|
|
44
|
+
])
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
// Decrypt meetingJoinInfo properties if meeting object contains meetingJoinInfo
|
|
48
|
+
const decryptedMeetingJoinInfo = data.meetingJoinInfo
|
|
49
|
+
? Promise.all([
|
|
50
|
+
_decryptTextProp(ctx, 'meetingJoinURI', data.encryptionKeyUrl, data.meetingJoinInfo),
|
|
51
|
+
_decryptTextProp(ctx, 'meetingJoinURL', data.encryptionKeyUrl, data.meetingJoinInfo),
|
|
52
|
+
])
|
|
53
|
+
: [];
|
|
54
|
+
|
|
55
|
+
const decryptedOrganizer = data.encryptedOrganizer
|
|
56
|
+
? Promise.all([
|
|
57
|
+
_decryptTextProp(
|
|
58
|
+
ctx,
|
|
59
|
+
'encryptedEmailAddress',
|
|
60
|
+
data.encryptionKeyUrl,
|
|
61
|
+
data.encryptedOrganizer
|
|
62
|
+
),
|
|
63
|
+
_decryptTextProp(ctx, 'encryptedName', data.encryptionKeyUrl, data.encryptedOrganizer),
|
|
64
|
+
])
|
|
65
|
+
: [];
|
|
66
|
+
|
|
67
|
+
return Promise.all(
|
|
68
|
+
[
|
|
69
|
+
_decryptTextProp(ctx, 'encryptedSubject', data.encryptionKeyUrl, data),
|
|
70
|
+
_decryptTextProp(ctx, 'encryptedLocation', data.encryptionKeyUrl, data),
|
|
71
|
+
_decryptTextProp(ctx, 'encryptedNotes', data.encryptionKeyUrl, data),
|
|
72
|
+
_decryptTextProp(ctx, 'webexURI', data.encryptionKeyUrl, data),
|
|
73
|
+
_decryptTextProp(ctx, 'webexURL', data.encryptionKeyUrl, data),
|
|
74
|
+
_decryptTextProp(ctx, 'spaceMeetURL', data.encryptionKeyUrl, data),
|
|
75
|
+
_decryptTextProp(ctx, 'spaceURI', data.encryptionKeyUrl, data),
|
|
76
|
+
_decryptTextProp(ctx, 'spaceURL', data.encryptionKeyUrl, data),
|
|
77
|
+
].concat(
|
|
78
|
+
decryptedOrganizer,
|
|
79
|
+
decryptedParticipants,
|
|
80
|
+
decryptedScheduleFor,
|
|
81
|
+
decryptedMeetingJoinInfo
|
|
82
|
+
)
|
|
83
|
+
);
|
|
84
|
+
},
|
|
85
|
+
/**
|
|
86
|
+
* Decrypt free-busy response
|
|
87
|
+
* @param {object} [ctx] context
|
|
88
|
+
* @param {object} [data] free-busy response
|
|
89
|
+
* @returns {Promise} Resolves with decrypted response
|
|
90
|
+
* */
|
|
91
|
+
decryptFreeBusyResponse: (ctx, data) => {
|
|
92
|
+
if (!data) {
|
|
93
|
+
return Promise.resolve();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (!data.calendarFreeBusyScheduleResponse) {
|
|
97
|
+
return Promise.resolve();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (!data.calendarFreeBusyScheduleResponse.encryptionKeyUrl) {
|
|
101
|
+
return Promise.resolve();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const calendarFreeBusyItems = data.calendarFreeBusyScheduleResponse.calendarFreeBusyItems
|
|
105
|
+
? data.calendarFreeBusyScheduleResponse.calendarFreeBusyItems.map((calendarFreeBusyItem) =>
|
|
106
|
+
Promise.all([
|
|
107
|
+
_decryptTextProp(
|
|
108
|
+
ctx,
|
|
109
|
+
'email',
|
|
110
|
+
data.calendarFreeBusyScheduleResponse.encryptionKeyUrl,
|
|
111
|
+
calendarFreeBusyItem
|
|
112
|
+
),
|
|
113
|
+
])
|
|
114
|
+
)
|
|
115
|
+
: [];
|
|
116
|
+
|
|
117
|
+
return Promise.all([].concat(calendarFreeBusyItems));
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export default DecryptHelper;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import {isArray} from 'lodash';
|
|
2
|
+
|
|
3
|
+
const _encryptTextProp = (ctx, name, key, object) => {
|
|
4
|
+
if (!object[name]) {
|
|
5
|
+
return Promise.resolve();
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
return ctx.webex.internal.encryption
|
|
9
|
+
.encryptText(key.uri || key, object[name])
|
|
10
|
+
.then((ciphertext) => {
|
|
11
|
+
object[name] = ciphertext;
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const _encryptCalendarEventPayload = (data, ctx) => {
|
|
16
|
+
Object.assign(data, {encryptionKeyUrl: ctx.encryptionKeyUrl});
|
|
17
|
+
|
|
18
|
+
const encryptedAttendees = data.attendees
|
|
19
|
+
? data.attendees.map((attendee) =>
|
|
20
|
+
Promise.all([
|
|
21
|
+
_encryptTextProp(ctx, 'displayName', data.encryptionKeyUrl, attendee),
|
|
22
|
+
_encryptTextProp(ctx, 'email', data.encryptionKeyUrl, attendee),
|
|
23
|
+
])
|
|
24
|
+
)
|
|
25
|
+
: [];
|
|
26
|
+
|
|
27
|
+
return Promise.all(
|
|
28
|
+
[
|
|
29
|
+
_encryptTextProp(ctx, 'subject', data.encryptionKeyUrl, data),
|
|
30
|
+
_encryptTextProp(ctx, 'notes', data.encryptionKeyUrl, data),
|
|
31
|
+
_encryptTextProp(ctx, 'webexOptions', data.encryptionKeyUrl, data),
|
|
32
|
+
].concat([encryptedAttendees])
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const _encryptFreeBusyPayload = (data, ctx) => {
|
|
37
|
+
Object.assign(data, {encryptionKeyUrl: ctx.encryptionKeyUrl});
|
|
38
|
+
|
|
39
|
+
const promises = [];
|
|
40
|
+
if (data.emails && Array.isArray(data.emails)) {
|
|
41
|
+
data.emails.map((item, index) =>
|
|
42
|
+
promises.push(
|
|
43
|
+
ctx.webex.internal.encryption
|
|
44
|
+
.encryptText(data.encryptionKeyUrl, item)
|
|
45
|
+
.then((encryptText) => {
|
|
46
|
+
data.emails[index] = encryptText;
|
|
47
|
+
})
|
|
48
|
+
)
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return Promise.all(promises);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const EncryptHelper = {
|
|
56
|
+
/**
|
|
57
|
+
* Encrypt create / update calendar event request payload
|
|
58
|
+
* @param {object} [ctx] context
|
|
59
|
+
* @param {object} [data] meeting payload data
|
|
60
|
+
* @returns {Promise} Resolves with encrypted request payload
|
|
61
|
+
* */
|
|
62
|
+
encryptCalendarEventRequest: (ctx, data) => {
|
|
63
|
+
if (ctx.encryptionKeyUrl) {
|
|
64
|
+
return _encryptCalendarEventPayload(data, ctx);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return ctx.webex.internal.encryption.kms.createUnboundKeys({count: 1}).then((keys) => {
|
|
68
|
+
const key = isArray(keys) ? keys[0] : keys;
|
|
69
|
+
ctx.encryptionKeyUrl = key.uri;
|
|
70
|
+
|
|
71
|
+
return _encryptCalendarEventPayload(data, ctx);
|
|
72
|
+
});
|
|
73
|
+
},
|
|
74
|
+
/**
|
|
75
|
+
* Encrypt free-busy request payload, if request payload only includes the sensitive data, like email, need to encrypt these reqeust parameters, and playload includes encrypt url.
|
|
76
|
+
* Otherwise, don't encrypt playload and without encrypt url,Due to calendar serivce will vaild both encrypt url and sensitive that are both present. if not, will return 400 bad reqeust to caller.
|
|
77
|
+
* @param {object} [ctx] context
|
|
78
|
+
* @param {object} [data] free busy payload data
|
|
79
|
+
* @returns {Promise} Resolves with encrypted request payload
|
|
80
|
+
* */
|
|
81
|
+
encryptFreeBusyRequest: (ctx, data) => {
|
|
82
|
+
if (!data.emails || !Array.isArray(data.emails)) {
|
|
83
|
+
return Promise.resolve();
|
|
84
|
+
}
|
|
85
|
+
if (ctx.encryptionKeyUrl) {
|
|
86
|
+
return _encryptFreeBusyPayload(data, ctx);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return ctx.webex.internal.encryption.kms.createUnboundKeys({count: 1}).then((keys) => {
|
|
90
|
+
const key = isArray(keys) ? keys[0] : keys;
|
|
91
|
+
ctx.encryptionKeyUrl = key.uri;
|
|
92
|
+
|
|
93
|
+
return _encryptFreeBusyPayload(data, ctx);
|
|
94
|
+
});
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export default EncryptHelper;
|