Skip to content

Commit 8629a70

Browse files
authored
Merge branch 'master' into dependabot/npm_and_yarn/express-rate-limit-8.3.1
2 parents c0e25ab + 324dfbe commit 8629a70

8 files changed

Lines changed: 111 additions & 35 deletions

File tree

CHANGELOG.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
1-
## Version 25.03.xx
1+
## Version 25.03.X
22
Fixes:
3+
- [dashboards] Unescape event segment values in meta
4+
5+
Enterprise fixes:
6+
- [data-manager] Fix validation approval button label
7+
- [data-manager] Fix validation table column names
8+
9+
## Version 25.03.38
10+
Fixes:
11+
- [push] Fixed the property name by changing it from link to url for message buttons for Huawei messages
312
- [web] Use Client Hints
413

514
## Version 25.03.37

plugins/crashes/api/api.js

Lines changed: 80 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1299,13 +1299,30 @@ plugins.setConfigs("crashes", {
12991299
plugins.register("/i/crashes", function(ob) {
13001300
var obParams = ob.params;
13011301
var paths = ob.paths;
1302-
if (obParams.qstring.args) {
1303-
try {
1302+
1303+
if (!obParams.qstring.args) {
1304+
common.returnMessage(obParams, 400, 'Error: args not found');
1305+
return true;
1306+
}
1307+
1308+
try {
1309+
if (typeof obParams.qstring.args === "string") {
13041310
obParams.qstring.args = JSON.parse(obParams.qstring.args);
13051311
}
1306-
catch (SyntaxError) {
1307-
console.log('Parse ' + obParams.apiPath + ' JSON failed');
1308-
}
1312+
}
1313+
catch (SyntaxError) {
1314+
console.log('Parse %s JSON failed %s', obParams.apiPath, obParams.req && obParams.req.url, obParams.req && obParams.req.body);
1315+
common.returnMessage(obParams, 400, 'Error: could not parse args');
1316+
return true;
1317+
}
1318+
1319+
if (obParams.qstring.app_id && obParams.qstring.args.app_id && obParams.qstring.app_id !== obParams.qstring.args.app_id) {
1320+
common.returnMessage(obParams, 400, 'Error: app_id mismatch');
1321+
return true;
1322+
}
1323+
1324+
if (!obParams.qstring.app_id && obParams.qstring.args.app_id) {
1325+
obParams.qstring.app_id = obParams.qstring.args.app_id;
13091326
}
13101327

13111328
switch (paths[3]) {
@@ -1496,58 +1513,84 @@ plugins.setConfigs("crashes", {
14961513
break;
14971514
case 'add_comment':
14981515
validateCreate(obParams, FEATURE_NAME, function() {
1516+
var args = obParams.qstring.args || {};
1517+
var appId = obParams.qstring.app_id;
1518+
1519+
if (!appId || !args.crash_id) {
1520+
common.returnMessage(obParams, 400, 'Missing params');
1521+
return true;
1522+
}
1523+
1524+
if (args.app_id && args.app_id !== appId) {
1525+
common.returnMessage(obParams, 403, 'Error: app_id mismatch');
1526+
return true;
1527+
}
1528+
14991529
var comment = {};
1500-
if (obParams.qstring.args.time) {
1501-
comment.time = obParams.qstring.args.time;
1530+
if (args.time) {
1531+
comment.time = args.time;
15021532
}
15031533
else {
15041534
comment.time = new Date().getTime();
15051535
}
15061536

1507-
if (obParams.qstring.args.text) {
1508-
comment.text = obParams.qstring.args.text;
1537+
if (args.text) {
1538+
comment.text = args.text;
15091539
}
15101540
else {
15111541
comment.text = "";
15121542
}
15131543

15141544
comment.author = obParams.member.full_name;
15151545
comment.author_id = obParams.member._id + "";
1516-
comment._id = common.crypto.createHash('sha1').update(obParams.qstring.args.app_id + obParams.qstring.args.crash_id + JSON.stringify(comment) + "").digest('hex');
1517-
common.db.collection('app_crashgroups' + obParams.qstring.args.app_id).update({'_id': obParams.qstring.args.crash_id }, {"$push": {'comments': comment}}, function() {
1518-
plugins.dispatch("/systemlogs", {params: obParams, action: "crash_added_comment", data: {app_id: obParams.qstring.args.app_id, crash_id: obParams.qstring.args.crash_id, comment: comment}});
1546+
comment._id = common.crypto.createHash('sha1').update(appId + args.crash_id + JSON.stringify(comment) + "").digest('hex');
1547+
common.db.collection('app_crashgroups' + appId).update({'_id': args.crash_id }, {"$push": {'comments': comment}}, function() {
1548+
plugins.dispatch("/systemlogs", {params: obParams, action: "crash_added_comment", data: {app_id: appId, crash_id: args.crash_id, comment: comment}});
15191549
common.returnMessage(obParams, 200, 'Success');
15201550
return true;
15211551
});
15221552
});
15231553
break;
15241554
case 'edit_comment':
15251555
validateUpdate(obParams, FEATURE_NAME, function() {
1526-
common.db.collection('app_crashgroups' + obParams.qstring.args.app_id).findOne({'_id': obParams.qstring.args.crash_id }, function(err, crash) {
1556+
var args = obParams.qstring.args || {};
1557+
var appId = obParams.qstring.app_id;
1558+
1559+
if (!appId || !args.crash_id || !args.comment_id) {
1560+
common.returnMessage(obParams, 400, 'Missing params');
1561+
return true;
1562+
}
1563+
1564+
if (args.app_id && args.app_id !== appId) {
1565+
common.returnMessage(obParams, 403, 'Error: app_id mismatch');
1566+
return true;
1567+
}
1568+
1569+
common.db.collection('app_crashgroups' + appId).findOne({'_id': args.crash_id }, function(err, crash) {
15271570
var comment;
15281571
if (crash && crash.comments) {
15291572
for (var i = 0; i < crash.comments.length; i++) {
1530-
if (crash.comments[i]._id === obParams.qstring.args.comment_id) {
1573+
if (crash.comments[i]._id === args.comment_id) {
15311574
comment = crash.comments[i];
15321575
break;
15331576
}
15341577
}
15351578
}
15361579
if (comment && (comment.author_id === obParams.member._id + "" || obParams.member.global_admin)) {
15371580
var commentBefore = JSON.parse(JSON.stringify(comment));
1538-
if (obParams.qstring.args.time) {
1539-
comment.edit_time = obParams.qstring.args.time;
1581+
if (args.time) {
1582+
comment.edit_time = args.time;
15401583
}
15411584
else {
15421585
comment.edit_time = new Date().getTime();
15431586
}
15441587

1545-
if (obParams.qstring.args.text) {
1546-
comment.text = obParams.qstring.args.text;
1588+
if (args.text) {
1589+
comment.text = args.text;
15471590
}
15481591

1549-
common.db.collection('app_crashgroups' + obParams.qstring.args.app_id).update({'_id': obParams.qstring.args.crash_id, "comments._id": obParams.qstring.args.comment_id}, {$set: {"comments.$": comment}}, function() {
1550-
plugins.dispatch("/systemlogs", {params: obParams, action: "crash_edited_comment", data: {app_id: obParams.qstring.args.app_id, crash_id: obParams.qstring.args.crash_id, _id: obParams.qstring.args.comment_id, before: commentBefore, update: comment}});
1592+
common.db.collection('app_crashgroups' + appId).update({'_id': args.crash_id, "comments._id": args.comment_id}, {$set: {"comments.$": comment}}, function() {
1593+
plugins.dispatch("/systemlogs", {params: obParams, action: "crash_edited_comment", data: {app_id: appId, crash_id: args.crash_id, _id: args.comment_id, before: commentBefore, update: comment}});
15511594
common.returnMessage(obParams, 200, 'Success');
15521595
return true;
15531596
});
@@ -1561,20 +1604,33 @@ plugins.setConfigs("crashes", {
15611604
break;
15621605
case 'delete_comment':
15631606
validateDelete(obParams, FEATURE_NAME, function() {
1564-
common.db.collection('app_crashgroups' + obParams.qstring.args.app_id).findOne({'_id': obParams.qstring.args.crash_id }, function(err, crash) {
1607+
var args = obParams.qstring.args || {};
1608+
var appId = obParams.qstring.app_id;
1609+
1610+
if (!appId || !args.crash_id || !args.comment_id) {
1611+
common.returnMessage(obParams, 400, 'Missing params');
1612+
return true;
1613+
}
1614+
1615+
if (args.app_id && args.app_id !== appId) {
1616+
common.returnMessage(obParams, 403, 'Error: app_id mismatch');
1617+
return true;
1618+
}
1619+
1620+
common.db.collection('app_crashgroups' + appId).findOne({'_id': args.crash_id }, function(err, crash) {
15651621
var comment;
15661622

15671623
if (crash && crash.comments) {
15681624
for (var i = 0; i < crash.comments.length; i++) {
1569-
if (crash.comments[i]._id === obParams.qstring.args.comment_id) {
1625+
if (crash.comments[i]._id === args.comment_id) {
15701626
comment = crash.comments[i];
15711627
break;
15721628
}
15731629
}
15741630
}
15751631
if (comment && (comment.author_id === obParams.member._id + "" || obParams.member.global_admin)) {
1576-
common.db.collection('app_crashgroups' + obParams.qstring.args.app_id).update({'_id': obParams.qstring.args.crash_id }, { $pull: { comments: { _id: obParams.qstring.args.comment_id } } }, function() {
1577-
plugins.dispatch("/systemlogs", {params: obParams, action: "crash_deleted_comment", data: {app_id: obParams.qstring.args.app_id, crash_id: obParams.qstring.args.crash_id, comment: comment}});
1632+
common.db.collection('app_crashgroups' + appId).update({'_id': args.crash_id }, { $pull: { comments: { _id: args.comment_id } } }, function() {
1633+
plugins.dispatch("/systemlogs", {params: obParams, action: "crash_deleted_comment", data: {app_id: appId, crash_id: args.crash_id, comment: comment}});
15781634
common.returnMessage(obParams, 200, 'Success');
15791635
return true;
15801636
});

plugins/dashboards/api/parts/dashboards.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1213,6 +1213,14 @@ function getEventsModel(params, apps, appId, collection, segment, event, widget)
12131213
}
12141214

12151215
fn(function(data) {
1216+
if (data.meta && data.meta.segments) {
1217+
data.meta.segments.forEach((sg) => {
1218+
if (data.meta[sg] && data.meta[sg].length > 0) {
1219+
data.meta[sg] = data.meta[sg].map((item) => common.decode_html(item));
1220+
}
1221+
});
1222+
}
1223+
12161224
countlyCommon.setPeriod(paramsObj.qstring.period);
12171225

12181226
var model = countlyModel.load("event");
@@ -1315,4 +1323,4 @@ function getCrashModel(params, apps, appId, collection, widget) {
13151323
});
13161324
}
13171325

1318-
module.exports = dashboard;
1326+
module.exports = dashboard;

plugins/data-manager/frontend/public/localization/data-manager.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ data-manager.related-property = Related Property
259259
data-manager.delete-transformation-permanently = Delete Transformation permanently?
260260
data-manager.delete-transformation = Delete Transformation
261261
data-manager.error = Error
262+
data-manager.error-type = Error Type
262263
data-manager.error-last-triggered = Error Last Triggered
263264
data-manager.occurence-count = Occurences
264265
data-manager.approve = Approve
@@ -381,4 +382,4 @@ data-manager.copy-to-user-custom.type = Custom User Property Type
381382
data-manager.copy-to-user-custom.existing= Existing
382383
data-manager.copy-to-user-custom.new = New
383384
data-manager.copy-to-user-custom.select-type = Existing Custom User Property
384-
data-manager.copy-to-user-custom.new-type = New Custom User Property
385+
data-manager.copy-to-user-custom.new-type = New Custom User Property

plugins/push/api/send/data/message.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -382,19 +382,22 @@ class Message extends Mongoable {
382382

383383
/**
384384
* Filter contents for given lang-platform combination
385-
*
385+
*
386386
* @param {Content[]|object[]} contents array of contents to filter
387387
* @param {string} p platform key
388388
* @param {string} la language key
389389
* @returns {Content[]} array of contents which are applicable for this p/l case
390390
*/
391391
static filterContents(contents, p, la) {
392-
return (contents || []).filter(c => (!p || (!c.p || c.p === p)) && (!la || (!c.la || c.la === la)));
392+
return (contents || []).filter(
393+
c => (!p || (!c.p || c.p === p || (c.p === "a" && p === "h")))
394+
&& (!la || (!c.la || c.la === la))
395+
);
393396
}
394397

395398
/**
396399
* Get Content instance by p & l given. `content()` returns default content.
397-
*
400+
*
398401
* @param {string} p platform key
399402
* @param {string} la language key
400403
* @returns {Content|undefined} Content instance if one with given p & l exists or undefined

plugins/push/api/send/platforms/h.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ const map = {
389389
*/
390390
buttons: function(t, buttons) {
391391
if (buttons) {
392-
t.result.data['c.b'] = buttons.map(b => ({t: b.title, l: b.link}));
392+
t.result.data['c.b'] = buttons.map(b => ({t: b.title, l: b.url}));
393393
}
394394
},
395395

ui-tests/cypress/e2e/dashboard/manage/apps/apps.cy.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,5 @@ describe('Create apps with different types such as Desktop, Mobile, and Web. ',
100100
navigationHelpers.goToApplicationsPage();
101101
appHelper.searchApp(app.appName);
102102
appHelper.verifyAppShouldBeDeleted();
103-
104103
});
105104
});

ui-tests/package-lock.json

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

0 commit comments

Comments
 (0)