Access control fixes.
Ylian Saint-Hilaire committed
Apr 18, 2020 at 19:17 UTC
dbfb1c51229053de5e6e1a4583cb20a6f4a6a857
3 files changed
+131
-108
meshuser.js
+11
-6
@@ -2436,6 +2436,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
2436
}
2437
}
2438
2439
+ var selfMeshRights = 0;
2440
try {
2441
if (common.validateString(command.meshid, 1, 1024) == false) { err = 'Invalid groupid'; } // Check the meshid
2442
else if (common.validateInt(command.meshadmin) == false) { err = 'Invalid group rights'; } // Mesh rights must be an integer
@@ -2444,7 +2445,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
2445
if (command.meshid.indexOf('/') == -1) { command.meshid = 'mesh/' + domain.id + '/' + command.meshid; }
2446
mesh = parent.meshes[command.meshid];
2447
if (mesh == null) { err = 'Unknown group'; }
2447
- else if ((parent.GetMeshRights(user, mesh) & MESHRIGHT_MANAGEUSERS) == 0) { err = 'Permission denied'; }
2448
+ else if (((selfMeshRights = parent.GetMeshRights(user, mesh)) & MESHRIGHT_MANAGEUSERS) == 0) { err = 'Permission denied'; }
2449
else if ((command.meshid.split('/').length != 3) || (command.meshid.split('/')[1] != domain.id)) { err = 'Invalid domain'; } // Invalid domain, operation only valid for current domain
2450
}
2451
} catch (ex) { err = 'Validation exception: ' + ex; }
@@ -2475,16 +2476,20 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
2476
2477
if (newuser != null) {
2478
// Can't add or modify self
2478
- if (newuserid == obj.user._id) { errors.push("Can't change self."); continue; }
2479
+ if (newuserid == obj.user._id) { msgs.push("Can't change self"); continue; }
2480
+
2481
+ var targetMeshRights = 0;
2482
+ if (newuser.links[command.meshid]) { targetMeshRights = newuser.links[command.meshid].rights; }
2483
+ if ((targetMeshRights == 0xFFFFFFFF) && (selfMeshRights != 0xFFFFFFFF)) { msgs.push("Can't change rights of device group administrator"); continue; } // A non-admin can't kick out an admin
2484
2485
if (command.remove === true) {
2486
// Remove mesh from user or user group
2482
- var selfMeshRights = parent.GetMeshRights(user, mesh);
2483
- var delmeshrights = 0;
2484
- if (newuser.links[command.meshid]) { delmeshrights = newuser.links[command.meshid].rights; }
2485
- if ((delmeshrights == 0xFFFFFFFF) && (selfMeshRights != 0xFFFFFFFF)) { console.log('ttt', delmeshrights, selfMeshRights); errors.push("Can't remove device group administrator."); continue; } // A non-admin can't kick out an admin
2487
delete newuser.links[command.meshid];
2488
} else {
2489
+ // Adjust rights since we can't add more rights that we have outself for MESHRIGHT_MANAGEUSERS
2490
+ if ((selfMeshRights != 0xFFFFFFFF) && (command.meshadmin == 0xFFFFFFFF)) { msgs.push("Can't set device group administrator, if not administrator"); continue; }
2491
+ if (((selfMeshRights & 2) == 0) && ((command.meshadmin & 2) != 0) && ((targetMeshRights & 2) == 0)) { command.meshadmin -= 2; }
2492
+
2493
// Add mesh to user or user group
2494
if (newuser.links == null) { newuser.links = {}; }
2495
if (newuser.links[command.meshid]) { newuser.links[command.meshid].rights = command.meshadmin; } else { newuser.links[command.meshid] = { rights: command.meshadmin }; }
translate/translate.json
+99
-92
@@ -605,7 +605,7 @@
605
"default-mobile.handlebars->9->244",
606
"default-mobile.handlebars->9->70",
607
"default.handlebars->29->1312",
608
- "default.handlebars->29->1608",
608
+ "default.handlebars->29->1610",
609
"default.handlebars->29->716"
610
]
611
},
@@ -2375,7 +2375,7 @@
2375
"ru": "Добавить участие",
2376
"zh-chs": "添加會員",
2377
"xloc": [
2378
- "default.handlebars->29->1604"
2378
+ "default.handlebars->29->1606"
2379
]
2380
},
2381
{
@@ -2907,7 +2907,7 @@
2907
"ru": "Счетчик ошибок агента",
2908
"zh-chs": "座席錯誤計數器",
2909
"xloc": [
2910
- "default.handlebars->29->1617"
2910
+ "default.handlebars->29->1619"
2911
]
2912
},
2913
{
@@ -2976,7 +2976,7 @@
2976
"ru": "Сессии агентов",
2977
"zh-chs": "座席會議",
2978
"xloc": [
2979
- "default.handlebars->29->1633"
2979
+ "default.handlebars->29->1635"
2980
]
2981
},
2982
{
@@ -3099,7 +3099,7 @@
3099
"ru": "Агенты",
3100
"zh-chs": "代理商",
3101
"xloc": [
3102
- "default.handlebars->29->1646"
3102
+ "default.handlebars->29->1648"
3103
]
3104
},
3105
{
@@ -3909,7 +3909,7 @@
3909
"ru": "Вы уверенны, что {0} плагин: {1}",
3910
"zh-chs": "您確定要{0}插件嗎:{1}",
3911
"xloc": [
3912
- "default.handlebars->29->1686"
3912
+ "default.handlebars->29->1688"
3913
]
3914
},
3915
{
@@ -4322,7 +4322,7 @@
4322
"ru": "Плохой ключ",
4323
"zh-chs": "錯誤的簽名",
4324
"xloc": [
4325
- "default.handlebars->29->1624"
4325
+ "default.handlebars->29->1626"
4326
]
4327
},
4328
{
@@ -4339,7 +4339,7 @@
4339
"ru": "Плохой веб-сертификат",
4340
"zh-chs": "錯誤的網絡證書",
4341
"xloc": [
4342
- "default.handlebars->29->1623"
4342
+ "default.handlebars->29->1625"
4343
]
4344
},
4345
{
@@ -4600,7 +4600,7 @@
4600
"ru": "CIRA Сервер",
4601
"zh-chs": "CIRA服務器",
4602
"xloc": [
4603
- "default.handlebars->29->1674"
4603
+ "default.handlebars->29->1676"
4604
]
4605
},
4606
{
@@ -4617,7 +4617,7 @@
4617
"ru": "CIRA Сервер команды",
4618
"zh-chs": "CIRA服務器命令",
4619
"xloc": [
4620
- "default.handlebars->29->1675"
4620
+ "default.handlebars->29->1677"
4621
]
4622
},
4623
{
@@ -4634,7 +4634,7 @@
4634
"ru": "Загрузка CPU",
4635
"zh-chs": "CPU負載",
4636
"xloc": [
4637
- "default.handlebars->29->1638"
4637
+ "default.handlebars->29->1640"
4638
]
4639
},
4640
{
@@ -4651,7 +4651,7 @@
4651
"ru": "Загрузка CPU за последние 15 минут",
4652
"zh-chs": "最近15分鐘的CPU負載",
4653
"xloc": [
4654
- "default.handlebars->29->1641"
4654
+ "default.handlebars->29->1643"
4655
]
4656
},
4657
{
@@ -4668,7 +4668,7 @@
4668
"ru": "Загрузка CPU за последние 5 минут",
4669
"zh-chs": "最近5分鐘的CPU負載",
4670
"xloc": [
4671
- "default.handlebars->29->1640"
4671
+ "default.handlebars->29->1642"
4672
]
4673
},
4674
{
@@ -4685,7 +4685,7 @@
4685
"ru": "Загрузка CPU за последнюю минуту",
4686
"zh-chs": "最後一分鐘的CPU負載",
4687
"xloc": [
4688
- "default.handlebars->29->1639"
4688
+ "default.handlebars->29->1641"
4689
]
4690
},
4691
{
@@ -4740,7 +4740,7 @@
4740
"ru": "Ошибка вызова",
4741
"zh-chs": "通話錯誤",
4742
"xloc": [
4743
- "default.handlebars->29->1687"
4743
+ "default.handlebars->29->1689"
4744
]
4745
},
4746
{
@@ -5166,7 +5166,7 @@
5166
"ru": "Проверка...",
5167
"zh-chs": "檢查...",
5168
"xloc": [
5169
- "default.handlebars->29->1681",
5169
+ "default.handlebars->29->1683",
5170
"default.handlebars->29->841"
5171
]
5172
},
@@ -5414,7 +5414,7 @@
5414
"zh-chs": "清除此通知",
5415
"es": "Borrar esta notificación",
5416
"xloc": [
5417
- "default.handlebars->29->1611"
5417
+ "default.handlebars->29->1613"
5418
]
5419
},
5420
{
@@ -5790,7 +5790,7 @@
5790
"en": "Confirm membership removal of user group \\\"{0}\\\"?",
5791
"nl": "Bevestig lidmaatschap verwijdering van gebruikergroep \\\"{0}\\\"?",
5792
"xloc": [
5793
- "default.handlebars->29->1602"
5793
+ "default.handlebars->29->1604"
5794
]
5795
},
5796
{
@@ -5859,7 +5859,7 @@
5859
"nl": "Bevestig verwijdering van toegangsrechten voor apparaatgroep \\\"{0}\\\"?",
5860
"xloc": [
5861
"default.handlebars->29->1494",
5862
- "default.handlebars->29->1606"
5862
+ "default.handlebars->29->1608"
5863
]
5864
},
5865
{
@@ -5873,7 +5873,14 @@
5873
"en": "Confirm removal of access rights for user group \\\"{0}\\\"?",
5874
"nl": "Bevestig verwijdering van toegangsrechten voor gebruikergroep \\\"{0}\\\"?",
5875
"xloc": [
5876
- "default.handlebars->29->1599"
5876
+ "default.handlebars->29->1600"
5877
+ ]
5878
+ },
5879
+ {
5880
+ "en": "Confirm removal of access rights?",
5881
+ "xloc": [
5882
+ "default.handlebars->29->1598",
5883
+ "default.handlebars->29->1601"
5884
]
5885
},
5886
{
@@ -6097,7 +6104,7 @@
6104
"ru": "Подключено Intel® AMT",
6105
"zh-chs": "連接的英特爾®AMT",
6106
"xloc": [
6100
- "default.handlebars->29->1629"
6107
+ "default.handlebars->29->1631"
6108
]
6109
},
6110
{
@@ -6114,7 +6121,7 @@
6121
"ru": "Подключенные пользователи",
6122
"zh-chs": "關聯用戶",
6123
"xloc": [
6117
- "default.handlebars->29->1634"
6124
+ "default.handlebars->29->1636"
6125
]
6126
},
6127
{
@@ -6190,7 +6197,7 @@
6197
"ru": "Подключений ",
6198
"zh-chs": "連接數",
6199
"xloc": [
6193
- "default.handlebars->29->1645"
6200
+ "default.handlebars->29->1647"
6201
]
6202
},
6203
{
@@ -6207,7 +6214,7 @@
6214
"ru": "Ретранслятор подключения",
6215
"zh-chs": "連接繼電器",
6216
"xloc": [
6210
- "default.handlebars->29->1673"
6217
+ "default.handlebars->29->1675"
6218
]
6219
},
6220
{
@@ -6332,7 +6339,7 @@
6339
"ru": "Cookie-кодировщик",
6340
"zh-chs": "Cookie編碼器",
6341
"xloc": [
6335
- "default.handlebars->29->1659"
6342
+ "default.handlebars->29->1661"
6343
]
6344
},
6345
{
@@ -6633,7 +6640,7 @@
6640
"ru": "Основной сервер",
6641
"zh-chs": "核心服務器",
6642
"xloc": [
6636
- "default.handlebars->29->1658"
6643
+ "default.handlebars->29->1660"
6644
]
6645
},
6646
{
@@ -7802,7 +7809,7 @@
7809
"default.handlebars->29->1447",
7810
"default.handlebars->29->1469",
7811
"default.handlebars->29->1531",
7805
- "default.handlebars->29->1632",
7812
+ "default.handlebars->29->1634",
7813
"default.handlebars->container->column_l->p2->p2info->7"
7814
]
7815
},
@@ -8819,7 +8826,7 @@
8826
"en": "Duplicate Agent",
8827
"nl": "Dubbele agent",
8828
"xloc": [
8822
- "default.handlebars->29->1628"
8829
+ "default.handlebars->29->1630"
8830
]
8831
},
8832
{
@@ -9342,7 +9349,7 @@
9349
"zh-chs": "电子邮件流量",
9350
"es": "Tráfico de correo electrónico",
9351
"xloc": [
9345
- "default.handlebars->29->1667"
9352
+ "default.handlebars->29->1669"
9353
]
9354
},
9355
{
@@ -10110,7 +10117,7 @@
10117
"ru": "Внешний",
10118
"zh-chs": "外部",
10119
"xloc": [
10113
- "default.handlebars->29->1652"
10120
+ "default.handlebars->29->1654"
10121
]
10122
},
10123
{
@@ -10596,8 +10603,8 @@
10603
"ru": "Свободно",
10604
"zh-chs": "自由",
10605
"xloc": [
10599
- "default.handlebars->29->1613",
10600
- "default.handlebars->29->1615"
10606
+ "default.handlebars->29->1615",
10607
+ "default.handlebars->29->1617"
10608
]
10609
},
10610
{
@@ -11486,7 +11493,7 @@
11493
"ru": "Всего кучи",
11494
"zh-chs": "堆總數",
11495
"xloc": [
11489
- "default.handlebars->29->1654"
11496
+ "default.handlebars->29->1656"
11497
]
11498
},
11499
{
@@ -11503,7 +11510,7 @@
11510
"ru": "Куча используется",
11511
"zh-chs": "堆使用",
11512
"xloc": [
11506
- "default.handlebars->29->1653"
11513
+ "default.handlebars->29->1655"
11514
]
11515
},
11516
{
@@ -12275,8 +12282,8 @@
12282
"xloc": [
12283
"default.handlebars->29->1301",
12284
"default.handlebars->29->1307",
12278
- "default.handlebars->29->1650",
12279
- "default.handlebars->29->1672"
12285
+ "default.handlebars->29->1652",
12286
+ "default.handlebars->29->1674"
12287
]
12288
},
12289
{
@@ -12981,7 +12988,7 @@
12988
"ru": "Некорректный тип группы устройств",
12989
"zh-chs": "無效的設備組類型",
12990
"xloc": [
12984
- "default.handlebars->29->1627"
12991
+ "default.handlebars->29->1629"
12992
]
12993
},
12994
{
@@ -12998,7 +13005,7 @@
13005
"ru": "Некорректный JSON",
13006
"zh-chs": "無效的JSON",
13007
"xloc": [
13001
- "default.handlebars->29->1621"
13008
+ "default.handlebars->29->1623"
13009
]
13010
},
13011
{
@@ -13050,7 +13057,7 @@
13057
"ru": "Некорректная сигнатура PKCS",
13058
"zh-chs": "無效的PKCS簽名",
13059
"xloc": [
13053
- "default.handlebars->29->1619"
13060
+ "default.handlebars->29->1621"
13061
]
13062
},
13063
{
@@ -13067,7 +13074,7 @@
13074
"ru": "Некорректная сигнатура RSA",
13075
"zh-chs": "無效的RSA密碼",
13076
"xloc": [
13070
- "default.handlebars->29->1620"
13077
+ "default.handlebars->29->1622"
13078
]
13079
},
13080
{
@@ -14128,7 +14135,7 @@
14135
"ru": "Меньше",
14136
"zh-chs": "減",
14137
"xloc": [
14131
- "default.handlebars->29->1689"
14138
+ "default.handlebars->29->1691"
14139
]
14140
},
14141
{
@@ -15204,7 +15211,7 @@
15211
"ru": "Сообщения главного сервера",
15212
"zh-chs": "主服務器消息",
15213
"xloc": [
15207
- "default.handlebars->29->1661"
15214
+ "default.handlebars->29->1663"
15215
]
15216
},
15217
{
@@ -15605,7 +15612,7 @@
15612
"ru": "Достигнуто максимальное число сессий",
15613
"zh-chs": "達到的會話數上限",
15614
"xloc": [
15608
- "default.handlebars->29->1625"
15615
+ "default.handlebars->29->1627"
15616
]
15617
},
15618
{
@@ -15659,7 +15666,7 @@
15666
"ru": "Мегабайт",
15667
"zh-chs": "兆字節",
15668
"xloc": [
15662
- "default.handlebars->29->1651"
15669
+ "default.handlebars->29->1653"
15670
]
15671
},
15672
{
@@ -15676,7 +15683,7 @@
15683
"ru": "ОЗУ",
15684
"zh-chs": "記憶",
15685
"xloc": [
15679
- "default.handlebars->29->1642",
15686
+ "default.handlebars->29->1644",
15687
"default.handlebars->29->806",
15688
"default.handlebars->container->column_l->p40->3->1->p40type->3"
15689
]
@@ -15812,7 +15819,7 @@
15819
"ru": "Трафик MeshAgent",
15820
"zh-chs": "MeshAgent流量",
15821
"xloc": [
15815
- "default.handlebars->29->1663"
15822
+ "default.handlebars->29->1665"
15823
]
15824
},
15825
{
@@ -15829,7 +15836,7 @@
15836
"ru": "Обновление MeshAgent",
15837
"zh-chs": "MeshAgent更新",
15838
"xloc": [
15832
- "default.handlebars->29->1664"
15839
+ "default.handlebars->29->1666"
15840
]
15841
},
15842
{
@@ -15932,7 +15939,7 @@
15939
"ru": "Соединения сервера MeshCentral",
15940
"zh-chs": "MeshCentral服務器對等",
15941
"xloc": [
15935
- "default.handlebars->29->1662"
15942
+ "default.handlebars->29->1664"
15943
]
15944
},
15945
{
@@ -16195,7 +16202,7 @@
16202
"ru": "Диспетчер сообщения",
16203
"zh-chs": "郵件調度程序",
16204
"xloc": [
16198
- "default.handlebars->29->1660"
16205
+ "default.handlebars->29->1662"
16206
]
16207
},
16208
{
@@ -16326,7 +16333,7 @@
16333
"ru": "Еще",
16334
"zh-chs": "更多",
16335
"xloc": [
16329
- "default.handlebars->29->1688"
16336
+ "default.handlebars->29->1690"
16337
]
16338
},
16339
{
@@ -17052,7 +17059,7 @@
17059
"zh-chs": "找不到活動",
17060
"xloc": [
17061
"default.handlebars->29->1350",
17055
- "default.handlebars->29->1607",
17062
+ "default.handlebars->29->1609",
17063
"default.handlebars->29->754"
17064
]
17065
},
@@ -18162,7 +18169,7 @@
18169
"ru": "Произошло в {0}",
18170
"zh-chs": "發生在{0}",
18171
"xloc": [
18165
- "default.handlebars->29->1610"
18172
+ "default.handlebars->29->1612"
18173
]
18174
},
18175
{
@@ -19192,7 +19199,7 @@
19199
"zh-chs": "插件動作",
19200
"xloc": [
19201
"default.handlebars->29->164",
19195
- "default.handlebars->29->1685"
19202
+ "default.handlebars->29->1687"
19203
]
19204
},
19205
{
@@ -19908,7 +19915,7 @@
19915
"ru": "RSS",
19916
"zh-chs": "的RSS",
19917
"xloc": [
19911
- "default.handlebars->29->1655"
19918
+ "default.handlebars->29->1657"
19919
]
19920
},
19921
{
@@ -20092,7 +20099,7 @@
20099
"ru": "Число ретрансляций",
20100
"zh-chs": "中繼計數",
20101
"xloc": [
20095
- "default.handlebars->29->1637"
20102
+ "default.handlebars->29->1639"
20103
]
20104
},
20105
{
@@ -20109,7 +20116,7 @@
20116
"ru": "Ошибки ретранслятора",
20117
"zh-chs": "中繼錯誤",
20118
"xloc": [
20112
- "default.handlebars->29->1630"
20119
+ "default.handlebars->29->1632"
20120
]
20121
},
20122
{
@@ -20126,8 +20133,8 @@
20133
"ru": "Сессии ретранслятора",
20134
"zh-chs": "接力會議",
20135
"xloc": [
20129
- "default.handlebars->29->1636",
20130
- "default.handlebars->29->1649"
20136
+ "default.handlebars->29->1638",
20137
+ "default.handlebars->29->1651"
20138
]
20139
},
20140
{
@@ -20419,7 +20426,7 @@
20426
"nl": "Apparaatgroepmachtigingen verwijderen",
20427
"xloc": [
20428
"default.handlebars->29->1493",
20422
- "default.handlebars->29->1605"
20429
+ "default.handlebars->29->1607"
20430
]
20431
},
20432
{
@@ -20448,7 +20455,7 @@
20455
"en": "Remove User Group Membership",
20456
"nl": "Lidmaatschap van gebruikersgroep verwijderen",
20457
"xloc": [
20451
- "default.handlebars->29->1601"
20458
+ "default.handlebars->29->1603"
20459
]
20460
},
20461
{
@@ -20456,7 +20463,7 @@
20463
"nl": "Gebruikersgroepmachtigingen verwijderen",
20464
"xloc": [
20465
"default.handlebars->29->1277",
20459
- "default.handlebars->29->1598"
20466
+ "default.handlebars->29->1599"
20467
]
20468
},
20469
{
@@ -21950,7 +21957,7 @@
21957
"ru": "Сертификат сервера",
21958
"zh-chs": "服務器證書",
21959
"xloc": [
21953
- "default.handlebars->29->1665"
21960
+ "default.handlebars->29->1667"
21961
]
21962
},
21963
{
@@ -21967,7 +21974,7 @@
21974
"zh-chs": "服務器數據庫",
21975
"es": "Base de Datos del Servidor",
21976
"xloc": [
21970
- "default.handlebars->29->1666"
21977
+ "default.handlebars->29->1668"
21978
]
21979
},
21980
{
@@ -22076,7 +22083,7 @@
22083
"ru": "Состояние сервера",
22084
"zh-chs": "服務器狀態",
22085
"xloc": [
22079
- "default.handlebars->29->1616"
22086
+ "default.handlebars->29->1618"
22087
]
22088
},
22089
{
@@ -22110,7 +22117,7 @@
22117
"ru": "Трассировка сервера",
22118
"zh-chs": "服務器跟踪",
22119
"xloc": [
22113
- "default.handlebars->29->1676"
22120
+ "default.handlebars->29->1678"
22121
]
22122
},
22123
{
@@ -22249,7 +22256,7 @@
22256
"ru": "ServerStats.csv",
22257
"zh-chs": "ServerStats.csv",
22258
"xloc": [
22252
- "default.handlebars->29->1657"
22259
+ "default.handlebars->29->1659"
22260
]
22261
},
22262
{
@@ -24319,7 +24326,7 @@
24326
"ru": "На данный момент уведомлений нет",
24327
"zh-chs": "目前沒有任何通知",
24328
"xloc": [
24322
- "default.handlebars->29->1609"
24329
+ "default.handlebars->29->1611"
24330
]
24331
},
24332
{
@@ -25525,7 +25532,7 @@
25532
"default-mobile.handlebars->9->174",
25533
"default-mobile.handlebars->9->175",
25534
"default.handlebars->29->13",
25528
- "default.handlebars->29->1600",
25535
+ "default.handlebars->29->1602",
25536
"default.handlebars->29->374",
25537
"default.handlebars->29->41",
25538
"default.handlebars->29->42",
@@ -25570,7 +25577,7 @@
25577
"ru": "Неизвестное действие",
25578
"zh-chs": "未知動作",
25579
"xloc": [
25573
- "default.handlebars->29->1622"
25580
+ "default.handlebars->29->1624"
25581
]
25582
},
25583
{
@@ -25607,7 +25614,7 @@
25614
"xloc": [
25615
"default.handlebars->29->1480",
25616
"default.handlebars->29->1578",
25610
- "default.handlebars->29->1626"
25617
+ "default.handlebars->29->1628"
25618
]
25619
},
25620
{
@@ -25624,7 +25631,7 @@
25631
"ru": "Неизвестная группа",
25632
"zh-chs": "未知群組",
25633
"xloc": [
25627
- "default.handlebars->29->1618"
25634
+ "default.handlebars->29->1620"
25635
]
25636
},
25637
{
@@ -25741,7 +25748,7 @@
25748
"ru": "Актуально",
25749
"zh-chs": "最新",
25750
"xloc": [
25744
- "default.handlebars->29->1683"
25751
+ "default.handlebars->29->1685"
25752
]
25753
},
25754
{
@@ -25990,8 +25997,8 @@
25997
"ru": "Использовано",
25998
"zh-chs": "用過的",
25999
"xloc": [
25993
- "default.handlebars->29->1612",
25994
- "default.handlebars->29->1614"
26000
+ "default.handlebars->29->1614",
26001
+ "default.handlebars->29->1616"
26002
]
26003
},
26004
{
@@ -26067,7 +26074,7 @@
26074
"ru": "Учетные записи пользователей",
26075
"zh-chs": "用戶帳號",
26076
"xloc": [
26070
- "default.handlebars->29->1631"
26077
+ "default.handlebars->29->1633"
26078
]
26079
},
26080
{
@@ -26126,7 +26133,7 @@
26133
"default.handlebars->29->1211",
26134
"default.handlebars->29->1458",
26135
"default.handlebars->29->1586",
26129
- "default.handlebars->29->1603",
26136
+ "default.handlebars->29->1605",
26137
"default.handlebars->29->555"
26138
]
26139
},
@@ -26277,7 +26284,7 @@
26284
"ru": "Сессии пользователя",
26285
"zh-chs": "用戶會話",
26286
"xloc": [
26280
- "default.handlebars->29->1648"
26287
+ "default.handlebars->29->1650"
26288
]
26289
},
26290
{
@@ -26462,7 +26469,7 @@
26469
"xloc": [
26470
"default.handlebars->29->1446",
26471
"default.handlebars->29->1468",
26465
- "default.handlebars->29->1647",
26472
+ "default.handlebars->29->1649",
26473
"default.handlebars->container->topbar->1->1->UsersSubMenuSpan->UsersSubMenu->1->0->UsersGeneral"
26474
]
26475
},
@@ -26480,7 +26487,7 @@
26487
"ru": "Сессии пользователей",
26488
"zh-chs": "用戶會話",
26489
"xloc": [
26483
- "default.handlebars->29->1635"
26490
+ "default.handlebars->29->1637"
26491
]
26492
},
26493
{
@@ -26619,7 +26626,7 @@
26626
"zh-chs": "版本不兼容,请先升级您的MeshCentral安装",
26627
"es": "Versión Incompatible, por favor primero actualice su instalación de MeshCentral",
26628
"xloc": [
26622
- "default.handlebars->29->1679"
26629
+ "default.handlebars->29->1681"
26630
]
26631
},
26632
{
@@ -26685,8 +26692,8 @@
26692
"zh-chs": "查看变更日志",
26693
"es": "Ver registro de cambios",
26694
"xloc": [
26688
- "default.handlebars->29->1682",
26689
- "default.handlebars->29->1684"
26695
+ "default.handlebars->29->1684",
26696
+ "default.handlebars->29->1686"
26697
]
26698
},
26699
{
@@ -26929,8 +26936,8 @@
26936
"ru": "Веб-сервер",
26937
"zh-chs": "網絡服務器",
26938
"xloc": [
26932
- "default.handlebars->29->1668",
26933
- "default.handlebars->29->1669"
26939
+ "default.handlebars->29->1670",
26940
+ "default.handlebars->29->1671"
26941
]
26942
},
26943
{
@@ -26947,7 +26954,7 @@
26954
"ru": "Запросы веб-сервера",
26955
"zh-chs": "Web服務器請求",
26956
"xloc": [
26950
- "default.handlebars->29->1670"
26957
+ "default.handlebars->29->1672"
26958
]
26959
},
26960
{
@@ -26964,7 +26971,7 @@
26971
"ru": "Ретранслятор Web Socket",
26972
"zh-chs": "Web套接字中繼",
26973
"xloc": [
26967
- "default.handlebars->29->1671"
26974
+ "default.handlebars->29->1673"
26975
]
26976
},
26977
{
@@ -27985,7 +27992,7 @@
27992
"ru": "\\\\'",
27993
"zh-chs": "\\\\'",
27994
"xloc": [
27988
- "default.handlebars->29->1680"
27995
+ "default.handlebars->29->1682"
27996
]
27997
},
27998
{
@@ -28256,7 +28263,7 @@
28263
"ru": "свободно",
28264
"zh-chs": "自由",
28265
"xloc": [
28259
- "default.handlebars->29->1643"
28266
+ "default.handlebars->29->1645"
28267
]
28268
},
28269
{
@@ -28612,7 +28619,7 @@
28619
"ru": "servertrace.csv",
28620
"zh-chs": "servertrace.csv",
28621
"xloc": [
28615
- "default.handlebars->29->1678"
28622
+ "default.handlebars->29->1680"
28623
]
28624
},
28625
{
@@ -28665,7 +28672,7 @@
28672
"zh-chs": "時間,conn.agent,conn.users,conn.usersessions,conn.relaysession,conn.intelamt,mem.external,mem.heapused,mem.heaptotal,mem.rss",
28673
"es": "time, conn.agent, conn.users, conn.usersessions, conn.relaysession, conn.intelamt, mem.external, mem.heapused, mem.heaptotal, mem.rss",
28674
"xloc": [
28668
- "default.handlebars->29->1656"
28675
+ "default.handlebars->29->1658"
28676
]
28677
},
28678
{
@@ -28682,7 +28689,7 @@
28689
"ru": "time, source, message",
28690
"zh-chs": "時間,來源,訊息",
28691
"xloc": [
28685
- "default.handlebars->29->1677"
28692
+ "default.handlebars->29->1679"
28693
]
28694
},
28695
{
@@ -28713,7 +28720,7 @@
28720
"ru": "всего",
28721
"zh-chs": "總",
28722
"xloc": [
28716
- "default.handlebars->29->1644"
28723
+ "default.handlebars->29->1646"
28724
]
28725
},
28726
{
views/default.handlebars
+21
-10
@@ -1811,11 +1811,11 @@
1811
var groupCount = 0;
1812
if (Array.isArray(message.ugroups)) {
1813
usergroups = {};
1814
- for (var i in message.ugroups) { groupCount++; usergroups[message.ugroups[i]._id] = message.ugroups[i]; }
1814
+ for (var i in message.ugroups) { groupCount++; usergroups[message.ugroups[i]._id] = message.ugroups[i]; }
1815
if (groupCount == 0) { usergroups = null; }
1816
} else {
1817
usergroups = message.ugroups;
1818
- for (var i in message.ugroups) { groupCount++; }
1818
+ for (var i in message.ugroups) { groupCount++; message.ugroups[i]._id = i; }
1819
if (groupCount == 0) { usergroups = null; }
1820
}
1821
masterUpdate(8192);
@@ -8692,6 +8692,7 @@
8692
8693
if (userid == null) {
8694
setDialogMode(2, "Add Users to Device Group", 3, p20showAddMeshUserDialogEx, x);
8695
+ QE('p20fulladmin', GetMeshRights(currentMesh) == 0xFFFFFFFF);
8696
Q('dp20username').focus();
8697
} else if (userid === 1) {
8698
setDialogMode(2, (selected == null)?"Add Device Group Permissions":"Edit Device Group Permissions", selected?7:3, p20showAddMeshUserDialogEx, x, userid);
@@ -8699,6 +8700,7 @@
8700
if (urights == 0xFFFFFFFF) { Q('p20fulladmin').checked = true; urights = -1; }
8701
} else if (userid === 2) {
8702
setDialogMode(2, "Add User Group", 3, p20showAddMeshUserDialogEx, x, userid);
8703
+ QE('p20fulladmin', GetMeshRights(currentMesh) == 0xFFFFFFFF);
8704
} else if (userid === 3) {
8705
setDialogMode(2, (selected == null)?"Add Device Group":"Edit Device Group", selected?7:3, p20showAddMeshUserDialogEx, x, userid);
8706
QE('dp2groupid', selected == null);
@@ -8733,6 +8735,7 @@
8735
}
8736
var cmeshrights = GetMeshRights(currentMesh), urights = GetMeshRights(currentMesh, userid);
8737
if (urights == 0xFFFFFFFF) { Q('p20fulladmin').checked = true; urights = -1; }
8738
+ QE('p20fulladmin', GetMeshRights(currentMesh) == 0xFFFFFFFF);
8739
}
8740
8741
if (urights != -1) {
@@ -10808,12 +10811,14 @@
10811
10812
function p30removeUserFromNode(event, userid) {
10813
if (xxdialogMode) return;
10811
- var user = users[decodeURIComponent(userid)];
10812
- if (user != null) {
10813
- setDialogMode(2, "Remove User Permissions", 3, function(b, user) { meshserver.send({ action: 'adddeviceuser', nodeid: currentNode._id, nodename: currentNode.name, userids: [ user._id ], rights: 0, remove: true }); }, format("Confirm removal of access rights for user \"{0}\"?", user.name), user);
10814
- } else if (usergroups != null) {
10815
- user = usergroups[decodeURIComponent(userid)];
10816
- if (user != null) { setDialogMode(2, "Remove User Group Permissions", 3, function(b, user) { meshserver.send({ action: 'adddeviceuser', nodeid: currentNode._id, nodename: currentNode.name, userids: [ user._id ], rights: 0, remove: true }); }, format("Confirm removal of access rights for user group \"{0}\"?", user.name), user); }
10814
+ var user = null, name = '';
10815
+ userid = decodeURIComponent(userid);
10816
+ if (userid.startsWith('user/')) {
10817
+ if (users) { user = users[userid]; if (user != null) { name = user.name; } }
10818
+ setDialogMode(2, "Remove User Permissions", 3, function(b, user) { meshserver.send({ action: 'adddeviceuser', nodeid: currentNode._id, nodename: currentNode.name, userids: [ userid ], rights: 0, remove: true }); }, name?format("Confirm removal of access rights for user \"{0}\"?", name):"Confirm removal of access rights?", user);
10819
+ } else if (userid.startsWith('ugrp/')) {
10820
+ if (usergroups) { user = usergroups[userid]; if (user != null) { name = user.name; } }
10821
+ setDialogMode(2, "Remove User Group Permissions", 3, function(b, user) { meshserver.send({ action: 'adddeviceuser', nodeid: currentNode._id, nodename: currentNode.name, userids: [ userid ], rights: 0, remove: true }); }, name?format("Confirm removal of access rights for user group \"{0}\"?", name):"Confirm removal of access rights?", user);
10822
}
10823
}
10824
@@ -11483,8 +11488,14 @@
11488
if (event && (event.shiftKey == true) && (x != 15) && ('{{currentNode}}' == '')) {
11489
// Open the device in a different tab
11490
if ((x >= 10) && (x <= 19)) {
11486
- if (currentNode) { window.open(window.location.origin + '?node=' + currentNode._id.split('/')[2] + '&viewmode=' + x + '&hide=16', 'meshcentral:' + currentNode._id); }
11487
- } else if (x < 10) {
11491
+ if (currentNode) { window.open(window.location.origin + '?gotonode=' + currentNode._id.split('/')[2] + '&viewmode=' + x + '&hide=16', 'meshcentral:' + currentNode._id); }
11492
+ } else if ((x >= 20) && (x <= 29)) {
11493
+ if (currentMesh) { window.open(window.location.origin + '?gotomesh=' + currentMesh._id.split('/')[2] + '&viewmode=' + x + '&hide=16', 'meshcentral:' + currentMesh._id); }
11494
+ } else if ((x >= 30) && (x <= 39)) {
11495
+ if (currentUser) { window.open(window.location.origin + '?gotouser=' + currentUser._id.split('/')[2] + '&viewmode=' + x + '&hide=16', 'meshcentral:' + currentUser._id); }
11496
+ } else if ((x >= 50) && (x <= 59)) {
11497
+ if (currentUserGroup) { window.open(window.location.origin + '?gotougrp=' + currentUserGroup._id.split('/')[2] + '&viewmode=' + x + '&hide=16', 'meshcentral:' + currentUserGroup._id); }
11498
+ } else { // if (x < 10))
11499
window.open(window.location.origin + '?viewmode=' + x + '&hide=0', 'meshcentral:' + x);
11500
}
11501
return;