Skip to content

Commit 76bc504

Browse files
fix: crash unencrypted message with crypto module (#349)
* subscription listener and history api handle plain message when crypto module is configured * test: subscription listener and history api with plain message along with crypto module * dist/lib * fix: AppContext membership apis optional fields only included when explicitly mentioned * lib/dist files * PubNub SDK v7.4.5 release. --------- Co-authored-by: PubNub Release Bot <[email protected]>
1 parent 6ea105a commit 76bc504

File tree

24 files changed

+516
-186
lines changed

24 files changed

+516
-186
lines changed

.pubnub.yml

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
---
22
changelog:
3+
- date: 2023-11-28
4+
version: v7.4.5
5+
changes:
6+
- type: bug
7+
text: "Handle unencrypted messages in subscribe with cryptoModule configured."
8+
- type: bug
9+
text: "Fixe for missing parameters to request or filter optional fields for App Context memberships api."
310
- date: 2023-11-14
411
version: v7.4.4
512
changes:
@@ -922,7 +929,7 @@ supported-platforms:
922929
- 'Ubuntu 14.04 and up'
923930
- 'Windows 7 and up'
924931
version: 'Pubnub Javascript for Node'
925-
version: '7.4.4'
932+
version: '7.4.5'
926933
sdks:
927934
- full-name: PubNub Javascript SDK
928935
short-name: Javascript
@@ -938,7 +945,7 @@ sdks:
938945
- distribution-type: source
939946
distribution-repository: GitHub release
940947
package-name: pubnub.js
941-
location: https://github.com/pubnub/javascript/archive/refs/tags/v7.4.4.zip
948+
location: https://github.com/pubnub/javascript/archive/refs/tags/v7.4.5.zip
942949
requires:
943950
- name: 'agentkeepalive'
944951
min-version: '3.5.2'
@@ -1609,7 +1616,7 @@ sdks:
16091616
- distribution-type: library
16101617
distribution-repository: GitHub release
16111618
package-name: pubnub.js
1612-
location: https://github.com/pubnub/javascript/releases/download/v7.4.4/pubnub.7.4.4.js
1619+
location: https://github.com/pubnub/javascript/releases/download/v7.4.5/pubnub.7.4.5.js
16131620
requires:
16141621
- name: 'agentkeepalive'
16151622
min-version: '3.5.2'

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## v7.4.5
2+
November 28 2023
3+
4+
#### Fixed
5+
- Handle unencrypted messages in subscribe with cryptoModule configured.
6+
- Fixe for missing parameters to request or filter optional fields for App Context memberships api.
7+
18
## v7.4.4
29
November 14 2023
310

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ Watch [Getting Started with PubNub JS SDK](https://app.dashcam.io/replay/64ee0d2
2828
npm install pubnub
2929
```
3030
* or download one of our builds from our CDN:
31-
* https://cdn.pubnub.com/sdk/javascript/pubnub.7.4.4.js
32-
* https://cdn.pubnub.com/sdk/javascript/pubnub.7.4.4.min.js
31+
* https://cdn.pubnub.com/sdk/javascript/pubnub.7.4.5.js
32+
* https://cdn.pubnub.com/sdk/javascript/pubnub.7.4.5.min.js
3333
3434
2. Configure your keys:
3535

dist/web/pubnub.js

Lines changed: 86 additions & 49 deletions
Large diffs are not rendered by default.

dist/web/pubnub.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/core/components/config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ var default_1 = /** @class */ (function () {
177177
return this;
178178
};
179179
default_1.prototype.getVersion = function () {
180-
return '7.4.4';
180+
return '7.4.5';
181181
};
182182
default_1.prototype._addPnsdkSuffix = function (name, suffix) {
183183
this._PNSDKSuffix[name] = suffix;

lib/core/components/subscription_manager.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -534,9 +534,7 @@ var default_1 = /** @class */ (function () {
534534
}
535535
catch (e) {
536536
decryptedPayload = null;
537-
if (console && console.log) {
538-
console.log('decryption error', e.message);
539-
}
537+
announce.error = "Error while decrypting message content: ".concat(e.message);
540538
}
541539
if (decryptedPayload !== null) {
542540
msgPayload = decryptedPayload;
@@ -581,10 +579,7 @@ var default_1 = /** @class */ (function () {
581579
}
582580
catch (e) {
583581
decryptedPayload = null;
584-
// eslint-disable-next-line
585-
if (console && console.log) {
586-
console.log('decryption error', e.message); //eslint-disable-line
587-
}
582+
announce.error = "Error while decrypting message content: ".concat(e.message);
588583
}
589584
if (decryptedPayload != null) {
590585
announce.message = decryptedPayload;

lib/core/endpoints/fetch_messages.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,24 @@ exports.handleResponse = exports.prepareParams = exports.isAuthSupported = expor
88
var operations_1 = __importDefault(require("../constants/operations"));
99
var utils_1 = __importDefault(require("../utils"));
1010
function __processMessage(modules, message) {
11-
if (!modules.cryptoModule)
12-
return message;
11+
var result = {};
12+
if (!modules.cryptoModule) {
13+
result.payload = message;
14+
return result;
15+
}
1316
try {
1417
var decryptedData = modules.cryptoModule.decrypt(message);
1518
var decryptedPayload = decryptedData instanceof ArrayBuffer ? JSON.parse(new TextDecoder().decode(decryptedData)) : decryptedData;
16-
return decryptedPayload;
19+
result.payload = decryptedPayload;
20+
return result;
1721
}
1822
catch (e) {
19-
if (console && console.log)
23+
if (modules.config.logVerbosity && console && console.log)
2024
console.log('decryption error', e.message);
21-
return message;
25+
result.payload = message;
26+
result.error = "Error while decrypting message content: ".concat(e.message);
2227
}
28+
return result;
2329
}
2430
function getOperation() {
2531
return operations_1.default.PNFetchMessagesOperation;
@@ -87,9 +93,10 @@ function handleResponse(modules, serverResponse) {
8793
response.channels[channelName] = [];
8894
(serverResponse.channels[channelName] || []).forEach(function (messageEnvelope) {
8995
var announce = {};
96+
var processedMessgeResult = __processMessage(modules, messageEnvelope.message);
9097
announce.channel = channelName;
9198
announce.timetoken = messageEnvelope.timetoken;
92-
announce.message = __processMessage(modules, messageEnvelope.message);
99+
announce.message = processedMessgeResult.payload;
93100
announce.messageType = messageEnvelope.message_type;
94101
announce.uuid = messageEnvelope.uuid;
95102
if (messageEnvelope.actions) {
@@ -100,6 +107,8 @@ function handleResponse(modules, serverResponse) {
100107
if (messageEnvelope.meta) {
101108
announce.meta = messageEnvelope.meta;
102109
}
110+
if (processedMessgeResult.error)
111+
announce.error = processedMessgeResult.error;
103112
response.channels[channelName].push(announce);
104113
});
105114
});

lib/core/endpoints/history/get_history.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,24 @@ exports.handleResponse = exports.prepareParams = exports.isAuthSupported = expor
88
var operations_1 = __importDefault(require("../../constants/operations"));
99
var utils_1 = __importDefault(require("../../utils"));
1010
function __processMessage(modules, message) {
11-
if (!modules.cryptoModule)
12-
return message;
11+
var result = {};
12+
if (!modules.cryptoModule) {
13+
result.payload = message;
14+
return result;
15+
}
1316
try {
1417
var decryptedData = modules.cryptoModule.decrypt(message);
1518
var decryptedPayload = decryptedData instanceof ArrayBuffer ? JSON.parse(new TextDecoder().decode(decryptedData)) : decryptedData;
16-
return decryptedPayload;
19+
result.payload = decryptedPayload;
20+
return result;
1721
}
1822
catch (e) {
19-
if (console && console.log)
23+
if (modules.config.logVerbosity && console && console.log)
2024
console.log('decryption error', e.message);
21-
return message;
25+
result.payload = message;
26+
result.error = "Error while decrypting message content: ".concat(e.message);
2227
}
28+
return result;
2329
}
2430
function getOperation() {
2531
return operations_1.default.PNHistoryOperation;
@@ -76,13 +82,16 @@ function handleResponse(modules, serverResponse) {
7682
};
7783
if (Array.isArray(serverResponse[0])) {
7884
serverResponse[0].forEach(function (serverHistoryItem) {
85+
var processedMessgeResult = __processMessage(modules, serverHistoryItem.message);
7986
var item = {
8087
timetoken: serverHistoryItem.timetoken,
81-
entry: __processMessage(modules, serverHistoryItem.message),
88+
entry: processedMessgeResult.payload,
8289
};
8390
if (serverHistoryItem.meta) {
8491
item.meta = serverHistoryItem.meta;
8592
}
93+
if (processedMessgeResult.error)
94+
item.error = processedMessgeResult.error;
8695
response.messages.push(item);
8796
});
8897
}

lib/core/endpoints/objects/member/get.js

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ var endpoint = {
2626
getOperation: function () { return operations_1.default.PNGetMembersOperation; },
2727
validateParams: function (_, params) {
2828
if (!(params === null || params === void 0 ? void 0 : params.channel)) {
29-
return 'UUID cannot be empty';
29+
return 'channel cannot be empty';
3030
}
3131
},
3232
getURL: function (_a, params) {
@@ -39,36 +39,45 @@ var endpoint = {
3939
},
4040
isAuthSupported: function () { return true; },
4141
prepareParams: function (_modules, params) {
42-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
42+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
4343
var queryParams = {};
44-
queryParams.include = ['uuid.status', 'uuid.type', 'status'];
44+
queryParams.include = [];
4545
if (params === null || params === void 0 ? void 0 : params.include) {
46-
if ((_a = params.include) === null || _a === void 0 ? void 0 : _a.customFields) {
46+
if ((_a = params.include) === null || _a === void 0 ? void 0 : _a.statusField) {
47+
queryParams.include.push('status');
48+
}
49+
if ((_b = params.include) === null || _b === void 0 ? void 0 : _b.customFields) {
4750
queryParams.include.push('custom');
4851
}
49-
if ((_b = params.include) === null || _b === void 0 ? void 0 : _b.customUUIDFields) {
52+
if ((_c = params.include) === null || _c === void 0 ? void 0 : _c.UUIDFields) {
53+
queryParams.include.push('uuid');
54+
}
55+
if ((_d = params.include) === null || _d === void 0 ? void 0 : _d.customUUIDFields) {
5056
queryParams.include.push('uuid.custom');
5157
}
52-
if ((_d = (_c = params.include) === null || _c === void 0 ? void 0 : _c.UUIDFields) !== null && _d !== void 0 ? _d : true) {
53-
queryParams.include.push('uuid');
58+
if ((_e = params.include) === null || _e === void 0 ? void 0 : _e.UUIDStatusField) {
59+
queryParams.include.push('uuid.status');
60+
}
61+
if ((_f = params.include) === null || _f === void 0 ? void 0 : _f.UUIDTypeField) {
62+
queryParams.include.push('uuid.type');
5463
}
5564
}
5665
queryParams.include = queryParams.include.join(',');
57-
if ((_e = params === null || params === void 0 ? void 0 : params.include) === null || _e === void 0 ? void 0 : _e.totalCount) {
58-
queryParams.count = (_f = params.include) === null || _f === void 0 ? void 0 : _f.totalCount;
66+
if ((_g = params === null || params === void 0 ? void 0 : params.include) === null || _g === void 0 ? void 0 : _g.totalCount) {
67+
queryParams.count = (_h = params.include) === null || _h === void 0 ? void 0 : _h.totalCount;
5968
}
60-
if ((_g = params === null || params === void 0 ? void 0 : params.page) === null || _g === void 0 ? void 0 : _g.next) {
61-
queryParams.start = (_h = params.page) === null || _h === void 0 ? void 0 : _h.next;
69+
if ((_j = params === null || params === void 0 ? void 0 : params.page) === null || _j === void 0 ? void 0 : _j.next) {
70+
queryParams.start = (_k = params.page) === null || _k === void 0 ? void 0 : _k.next;
6271
}
63-
if ((_j = params === null || params === void 0 ? void 0 : params.page) === null || _j === void 0 ? void 0 : _j.prev) {
64-
queryParams.end = (_k = params.page) === null || _k === void 0 ? void 0 : _k.prev;
72+
if ((_l = params === null || params === void 0 ? void 0 : params.page) === null || _l === void 0 ? void 0 : _l.prev) {
73+
queryParams.end = (_m = params.page) === null || _m === void 0 ? void 0 : _m.prev;
6574
}
6675
if (params === null || params === void 0 ? void 0 : params.filter) {
6776
queryParams.filter = params.filter;
6877
}
69-
queryParams.limit = (_l = params === null || params === void 0 ? void 0 : params.limit) !== null && _l !== void 0 ? _l : 100;
78+
queryParams.limit = (_o = params === null || params === void 0 ? void 0 : params.limit) !== null && _o !== void 0 ? _o : 100;
7079
if (params === null || params === void 0 ? void 0 : params.sort) {
71-
queryParams.sort = Object.entries((_m = params.sort) !== null && _m !== void 0 ? _m : {}).map(function (_a) {
80+
queryParams.sort = Object.entries((_p = params.sort) !== null && _p !== void 0 ? _p : {}).map(function (_a) {
7281
var _b = __read(_a, 2), key = _b[0], value = _b[1];
7382
if (value === 'asc' || value === 'desc') {
7483
return "".concat(key, ":").concat(value);

lib/core/endpoints/objects/membership/get.js

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,36 +37,45 @@ var endpoint = {
3737
},
3838
isAuthSupported: function () { return true; },
3939
prepareParams: function (_modules, params) {
40-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
40+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
4141
var queryParams = {};
42-
queryParams.include = ['channel.status', 'channel.type', 'status'];
42+
queryParams.include = [];
4343
if (params === null || params === void 0 ? void 0 : params.include) {
44-
if ((_a = params.include) === null || _a === void 0 ? void 0 : _a.customFields) {
45-
queryParams.include.push('custom');
44+
if ((_a = params.include) === null || _a === void 0 ? void 0 : _a.statusField) {
45+
queryParams.include.push('status');
4646
}
47-
if ((_b = params.include) === null || _b === void 0 ? void 0 : _b.customChannelFields) {
48-
queryParams.include.push('channel.custom');
47+
if ((_b = params.include) === null || _b === void 0 ? void 0 : _b.customFields) {
48+
queryParams.include.push('custom');
4949
}
5050
if ((_c = params.include) === null || _c === void 0 ? void 0 : _c.channelFields) {
5151
queryParams.include.push('channel');
5252
}
53+
if ((_d = params.include) === null || _d === void 0 ? void 0 : _d.customChannelFields) {
54+
queryParams.include.push('channel.custom');
55+
}
56+
if ((_e = params.include) === null || _e === void 0 ? void 0 : _e.channelStatusField) {
57+
queryParams.include.push('channel.status');
58+
}
59+
if ((_f = params.include) === null || _f === void 0 ? void 0 : _f.channelTypeField) {
60+
queryParams.include.push('channel.type');
61+
}
5362
}
5463
queryParams.include = queryParams.include.join(',');
55-
if ((_d = params === null || params === void 0 ? void 0 : params.include) === null || _d === void 0 ? void 0 : _d.totalCount) {
56-
queryParams.count = (_e = params.include) === null || _e === void 0 ? void 0 : _e.totalCount;
64+
if ((_g = params === null || params === void 0 ? void 0 : params.include) === null || _g === void 0 ? void 0 : _g.totalCount) {
65+
queryParams.count = (_h = params.include) === null || _h === void 0 ? void 0 : _h.totalCount;
5766
}
58-
if ((_f = params === null || params === void 0 ? void 0 : params.page) === null || _f === void 0 ? void 0 : _f.next) {
59-
queryParams.start = (_g = params.page) === null || _g === void 0 ? void 0 : _g.next;
67+
if ((_j = params === null || params === void 0 ? void 0 : params.page) === null || _j === void 0 ? void 0 : _j.next) {
68+
queryParams.start = (_k = params.page) === null || _k === void 0 ? void 0 : _k.next;
6069
}
61-
if ((_h = params === null || params === void 0 ? void 0 : params.page) === null || _h === void 0 ? void 0 : _h.prev) {
62-
queryParams.end = (_j = params.page) === null || _j === void 0 ? void 0 : _j.prev;
70+
if ((_l = params === null || params === void 0 ? void 0 : params.page) === null || _l === void 0 ? void 0 : _l.prev) {
71+
queryParams.end = (_m = params.page) === null || _m === void 0 ? void 0 : _m.prev;
6372
}
6473
if (params === null || params === void 0 ? void 0 : params.filter) {
6574
queryParams.filter = params.filter;
6675
}
67-
queryParams.limit = (_k = params === null || params === void 0 ? void 0 : params.limit) !== null && _k !== void 0 ? _k : 100;
76+
queryParams.limit = (_o = params === null || params === void 0 ? void 0 : params.limit) !== null && _o !== void 0 ? _o : 100;
6877
if (params === null || params === void 0 ? void 0 : params.sort) {
69-
queryParams.sort = Object.entries((_l = params.sort) !== null && _l !== void 0 ? _l : {}).map(function (_a) {
78+
queryParams.sort = Object.entries((_p = params.sort) !== null && _p !== void 0 ? _p : {}).map(function (_a) {
7079
var _b = __read(_a, 2), key = _b[0], value = _b[1];
7180
if (value === 'asc' || value === 'desc') {
7281
return "".concat(key, ":").concat(value);

lib/core/pubnub-common.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,9 @@ var default_1 = /** @class */ (function () {
427427
customFields: params.include.customFields,
428428
UUIDFields: params.include.userFields,
429429
customUUIDFields: params.include.customUserFields,
430+
statusField: params.include.statusField,
431+
UUIDStatusField: params.include.userStatusField,
432+
UUIDTypeField: params.include.userTypeField,
430433
totalCount: params.include.totalCount,
431434
},
432435
sort: params.sort != null
@@ -460,6 +463,9 @@ var default_1 = /** @class */ (function () {
460463
customFields: params.include.customFields,
461464
channelFields: params.include.spaceFields,
462465
customChannelFields: params.include.customSpaceFields,
466+
statusField: params.include.statusField,
467+
channelStatusField: params.include.spaceStatusField,
468+
channelTypeField: params.include.spaceTypeField,
463469
totalCount: params.include.totalCount,
464470
},
465471
sort: params.sort != null

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "pubnub",
3-
"version": "7.4.4",
3+
"version": "7.4.5",
44
"author": "PubNub <[email protected]>",
55
"description": "Publish & Subscribe Real-time Messaging with PubNub",
66
"scripts": {

src/core/components/config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ export default class {
350350
}
351351

352352
getVersion() {
353-
return '7.4.4';
353+
return '7.4.5';
354354
}
355355

356356
_addPnsdkSuffix(name, suffix) {

src/core/components/subscription_manager.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -699,9 +699,7 @@ export default class {
699699
decryptedData instanceof ArrayBuffer ? JSON.parse(this._decoder.decode(decryptedData)) : decryptedData;
700700
} catch (e) {
701701
decryptedPayload = null;
702-
if (console && console.log) {
703-
console.log('decryption error', e.message);
704-
}
702+
announce.error = `Error while decrypting message content: ${e.message}`;
705703
}
706704
if (decryptedPayload !== null) {
707705
msgPayload = decryptedPayload;
@@ -752,10 +750,7 @@ export default class {
752750
decryptedData instanceof ArrayBuffer ? JSON.parse(this._decoder.decode(decryptedData)) : decryptedData;
753751
} catch (e) {
754752
decryptedPayload = null;
755-
// eslint-disable-next-line
756-
if (console && console.log) {
757-
console.log('decryption error', e.message); //eslint-disable-line
758-
}
753+
announce.error = `Error while decrypting message content: ${e.message}`;
759754
}
760755
if (decryptedPayload != null) {
761756
announce.message = decryptedPayload;

0 commit comments

Comments
 (0)