@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.
@@ -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
@@ -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) => (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 /**\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};\n\nexport default CalendarCollection;\n"],"mappings":";;;;;;;;;;;;;;;;AAEA;;AACA;;AACA;AACA;AACA;AACA,IAAMA,kBAAkB,GAAG;EACzBC,SAAS,EAAEC,mBADc;EAEzBC,KAAK,EAAE,EAFkB;;EAGzB;AACF;AACA;AACA;AACA;AACA;EACEC,GATyB,eASrBC,EATqB,EASjB;IACN,OAAO,KAAKF,KAAL,CAAWE,EAAX,CAAP;EACD,CAXwB;;EAazB;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,KApByB,iBAoBnBC,GApBmB,EAoBdC,KApBc,EAoBP;IAChB,IAAID,GAAG,IAAIC,KAAX,EAAkB;MAChB,OAAO,oBAAK,KAAKL,KAAV,EAAiB,UAACM,IAAD;QAAA,OAAWA,IAAI,CAACF,GAAD,CAAJ,KAAcC,KAAzB;MAAA,CAAjB,CAAP;IACD;;IAED,OAAO,IAAP;EACD,CA1BwB;;EA4BzB;AACF;AACA;AACA;AACA;AACA;EACEE,GAlCyB,eAkCrBD,IAlCqB,EAkCf;IACR,IAAME,MAAM,GAAGF,IAAI,CAACJ,EAApB;;IACA,IAAMO,OAAO,GAAGC,aAAA,CAAaC,gBAAb,CAA8BL,IAA9B,CAAhB;;IAEA,KAAKN,KAAL,CAAWQ,MAAX,IAAqBC,OAArB;IAEA,OAAOD,MAAP;EACD,CAzCwB;;EA2CzB;AACF;AACA;AACA;AACA;AACA;EACEI,KAjDyB,mBAiDjB;IACN,KAAKZ,KAAL,GAAa,EAAb;EACD,CAnDwB;;EAsDzB;AACF;AACA;AACA;AACA;AACA;EACEa,MA5DyB,kBA4DlBX,EA5DkB,EA4Dd;IACT,IAAMO,OAAO,GAAG,KAAKR,GAAL,CAASC,EAAT,CAAhB;IAEA,OAAO,KAAKF,KAAL,CAAWE,EAAX,CAAP;IAEA,OAAOO,OAAP;EACD,CAlEwB;;EAoEzB;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,MA3EyB,kBA2ElBd,KA3EkB,EA2EX;IAAA;;IACZA,KAAK,CAACe,OAAN,CAAc,UAACT,IAAD,EAAU;MACtB,KAAI,CAACC,GAAL,CAASD,IAAT;IACD,CAFD;EAGD,CA/EwB;;EAiFzB;AACF;AACA;AACA;AACA;AACA;AACA;EACEU,MAxFyB,oBAwFhB;IACP,OAAO,qBAAc,KAAKhB,KAAnB,CAAP;EACD;AA1FwB,CAA3B;eA8FeH,kB"}
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
  */
@@ -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))\n }\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;eAEe;EACbA,QAAQ,EAAE;IACRC,QAAQ,EAAE,IAAIC,IAAJ,CAAS,IAAIA,IAAJ,GAAWC,OAAX,CAAmB,IAAID,IAAJ,GAAWE,OAAX,KAAuB,CAA1C,CAAT,CADF;IAERC,MAAM,EAAE,IAAIH,IAAJ,CAAS,IAAIA,IAAJ,GAAWC,OAAX,CAAmB,IAAID,IAAJ,GAAWE,OAAX,KAAuB,CAA1C,CAAT;EAFA;AADG,C"}
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;
@@ -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":";;;;;;;;;AAAO,IAAMA,mBAAmB,GAAG,qBAA5B;;AACA,IAAMC,qBAAqB,GAAG,uBAA9B;;AACA,IAAMC,gBAAgB,GAAG,iBAAzB;;AACA,IAAMC,eAAe,GAAG,iBAAxB;;AACA,IAAMC,eAAe,GAAG,iBAAxB;;AACA,IAAMC,QAAQ,GAAG,UAAjB"}
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
- } // Decrypt participant properties if meeting object contains participants
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
- }) : []; // Decrypt meetingJoinInfo properties if meeting object contains meetingJoinInfo
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
- } // Decrypt participant properties
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\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 {...item, endTime: new Date(new Date(item.start).getTime() + item.durationMinutes * 60000)};\n }\n};\n\nexport default CalendarUtil;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAMA,YAAY,GAAG;EAEnB;EACA;EACA;EACA;;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,gBAdmB,4BAcFC,IAdE,EAcI;IACrB,uCAAWA,IAAX;MAAiBC,OAAO,EAAE,IAAIC,IAAJ,CAAS,IAAIA,IAAJ,CAASF,IAAI,CAACG,KAAd,EAAqBC,OAArB,KAAiCJ,IAAI,CAACK,eAAL,GAAuB,KAAjE;IAA1B;EACD;AAhBkB,CAArB;eAmBeP,Y"}
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.4",
22
+ "version": "3.0.0-beta.400",
23
23
  "devDependencies": {
24
- "@webex/test-helper-chai": "3.0.0-beta.4",
25
- "@webex/test-helper-mock-webex": "3.0.0-beta.4",
26
- "@webex/test-helper-retry": "3.0.0-beta.4",
27
- "@webex/test-helper-test-users": "3.0.0-beta.4",
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-calendar": "3.0.0-beta.4",
32
- "@webex/internal-plugin-conversation": "3.0.0-beta.4",
33
- "@webex/internal-plugin-device": "3.0.0-beta.4",
34
- "@webex/internal-plugin-encryption": "3.0.0-beta.4",
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;