Initial work on cross-domain administrator.
Ylian Saint-Hilaire committed
May 27, 2020 at 03:35 UTC
288813ccda3d0c38ad053cc9157dc6ea8320e9fa
4 files changed
+467
-407
meshuser.js
+105
-82
@@ -64,6 +64,9 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
64
obj.domain = domain;
65
obj.ws = ws;
66
67
+ // Check if we are a cross-domain administrator
68
+ if (parent.parent.config.settings.managecrossdomain && (parent.parent.config.settings.managecrossdomain.indexOf(user._id) >= 0)) { obj.crossDomain = true; }
69
+
70
// Server side Intel AMT stack
71
const WsmanComm = require('./amt/amt-wsman-comm.js');
72
const Wsman = require('./amt/amt-wsman.js');
@@ -281,7 +284,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
284
285
// Handle events
286
ws.HandleEvent = function (source, event, ids, id) {
284
- if ((event.domain == null) || (event.domain == domain.id)) {
287
+ if ((event.domain == null) || (event.domain == domain.id) || (obj.crossDomain === true)) {
288
try {
289
if (event == 'close') { try { delete req.session; } catch (ex) { } obj.close(); }
290
else if (event == 'resubscribe') { user.subscriptions = parent.subscribe(user._id, ws); }
@@ -400,7 +403,10 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
403
// Send user information to web socket, this is the first thing we send
404
try {
405
var xuserinfo = parent.CloneSafeUser(parent.users[user._id]);
403
- if ((user.siteadmin == 0xFFFFFFFF) && (parent.parent.config.settings.managealldevicegroups.indexOf(user._id) >= 0)) { xuserinfo.manageAllDeviceGroups = true; }
406
+ if (user.siteadmin == 0xFFFFFFFF) {
407
+ if (parent.parent.config.settings.managealldevicegroups.indexOf(user._id) >= 0) { xuserinfo.manageAllDeviceGroups = true; }
408
+ if (obj.crossDomain === true) { xuserinfo.crossDomain = []; for (var i in parent.parent.config.domains) { xuserinfo.crossDomain.push(i); } }
409
+ }
410
ws.send(JSON.stringify({ action: 'userinfo', userinfo: xuserinfo }));
411
} catch (ex) { }
412
@@ -1291,9 +1297,9 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1297
if ((user.siteadmin & 2) == 0) break;
1298
var docs = [];
1299
for (i in parent.users) {
1294
- if ((parent.users[i].domain == domain.id) && (parent.users[i].name != '~')) {
1300
+ if (((obj.crossDomain === true) || (parent.users[i].domain == domain.id)) && (parent.users[i].name != '~')) {
1301
// If we are part of a user group, we can only see other members of our own group
1296
- if ((user.groups == null) || (user.groups.length == 0) || ((parent.users[i].groups != null) && (findOne(parent.users[i].groups, user.groups)))) {
1302
+ if ((obj.crossDomain === true) || (user.groups == null) || (user.groups.length == 0) || ((parent.users[i].groups != null) && (findOne(parent.users[i].groups, user.groups)))) {
1303
docs.push(parent.CloneSafeUser(parent.users[i]));
1304
}
1305
}
@@ -1430,8 +1436,10 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1436
}
1437
case 'deleteuser':
1438
{
1439
+ console.log(command);
1440
+
1441
// Delete a user account
1434
- var err = null, delusersplit, deluserid, deluser;
1442
+ var err = null, delusersplit, deluserid, deluser, deluserdomain;
1443
try {
1444
if ((user.siteadmin & 2) == 0) { err = 'Permission denied'; }
1445
else if (common.validateString(command.userid, 1, 2048) == false) { err = 'Invalid userid'; }
@@ -1440,12 +1448,17 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1448
deluserid = command.userid;
1449
deluser = parent.users[deluserid];
1450
if (deluser == null) { err = 'User does not exists'; }
1443
- else if ((delusersplit.length != 3) || (delusersplit[1] != domain.id)) { err = 'Invalid domain'; } // Invalid domain, operation only valid for current domain
1451
+ else if ((obj.crossDomain !== true) && ((delusersplit.length != 3) || (delusersplit[1] != domain.id))) { err = 'Invalid domain'; } // Invalid domain, operation only valid for current domain
1452
else if ((deluser.siteadmin == 0xFFFFFFFF) && (user.siteadmin != 0xFFFFFFFF)) { err = 'Permission denied'; } // Need full admin to remote another administrator
1445
- else if ((user.groups != null) && (user.groups.length > 0) && ((deluser.groups == null) || (findOne(deluser.groups, user.groups) == false))) { err = 'Invalid user group'; } // Can only perform this operation on other users of our group.
1453
+ else if ((obj.crossDomain !== true) && (user.groups != null) && (user.groups.length > 0) && ((deluser.groups == null) || (findOne(deluser.groups, user.groups) == false))) { err = 'Invalid user group'; } // Can only perform this operation on other users of our group.
1454
}
1455
} catch (ex) { err = 'Validation exception: ' + ex; }
1456
1457
+ // Get domain
1458
+ deluserdomain = domain;
1459
+ if (obj.crossDomain === true) { deluserdomain = parent.parent.config.domains[delusersplit[1]]; }
1460
+ if (deluserdomain == null) { err = 'Invalid domain'; }
1461
+
1462
// Handle any errors
1463
if (err != null) {
1464
if (command.responseid != null) { try { ws.send(JSON.stringify({ action: 'deleteuser', responseid: command.responseid, result: err })); } catch (ex) { } }
@@ -1464,13 +1477,13 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1477
1478
// Notify mesh change
1479
change = 'Removed user ' + deluser.name + ' from group ' + mesh.name;
1467
- var event = { etype: 'mesh', userid: user._id, username: user.name, meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'meshchange', links: mesh.links, msg: change, domain: domain.id, invite: mesh.invite };
1480
+ var event = { etype: 'mesh', userid: user._id, username: user.name, meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'meshchange', links: mesh.links, msg: change, domain: deluserdomain.id, invite: mesh.invite };
1481
if (db.changeStream) { event.noact = 1; } // If DB change stream is active, don't use this event to change the mesh. Another event will come.
1482
parent.parent.DispatchEvent(parent.CreateMeshDispatchTargets(mesh, [deluser._id, user._id]), obj, event);
1483
}
1484
} else if (i.startsWith('node/')) {
1485
// Get the node and the rights for this node
1473
- parent.GetNodeWithRights(domain, deluser, i, function (node, rights, visible) {
1486
+ parent.GetNodeWithRights(deluserdomain, deluser, i, function (node, rights, visible) {
1487
if ((node == null) || (node.links == null) || (node.links[deluser._id] == null)) return;
1488
1489
// Remove the link and save the node to the database
@@ -1479,7 +1492,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1492
db.Set(parent.cleanDevice(node));
1493
1494
// Event the node change
1482
- var event = { etype: 'node', userid: user._id, username: user.name, action: 'changenode', nodeid: node._id, domain: domain.id, msg: (command.rights == 0) ? ('Removed user device rights for ' + node.name) : ('Changed user device rights for ' + node.name), node: parent.CloneSafeNode(node) }
1495
+ var event = { etype: 'node', userid: user._id, username: user.name, action: 'changenode', nodeid: node._id, domain: deluserdomain.id, msg: (command.rights == 0) ? ('Removed user device rights for ' + node.name) : ('Changed user device rights for ' + node.name), node: parent.CloneSafeNode(node) }
1496
if (db.changeStream) { event.noact = 1; } // If DB change stream is active, don't use this event to change the mesh. Another event will come.
1497
parent.parent.DispatchEvent(parent.CreateNodeDispatchTargets(node.meshid, node._id), obj, event);
1498
});
@@ -1503,7 +1516,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1516
1517
var targets = ['*', 'server-users'];
1518
if (deluser.groups) { for (var i in deluser.groups) { targets.push('server-users:' + i); } }
1506
- parent.parent.DispatchEvent(targets, obj, { etype: 'user', userid: deluserid, username: deluser.name, action: 'accountremove', msg: 'Account removed', domain: domain.id });
1519
+ parent.parent.DispatchEvent(targets, obj, { etype: 'user', userid: deluserid, username: deluser.name, action: 'accountremove', msg: 'Account removed', domain: deluserdomain.id });
1520
parent.parent.DispatchEvent([deluserid], obj, 'close');
1521
1522
if (command.responseid != null) { try { ws.send(JSON.stringify({ action: 'deleteuser', responseid: command.responseid, result: 'ok' })); } catch (ex) { } }
@@ -1634,23 +1647,26 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1647
if (command.randomPassword === true) { command.pass = getRandomPassword(); }
1648
1649
// Add a new user account
1637
- var err = null, newusername, newuserid;
1650
+ var err = null, newusername, newuserid, newuserdomain;
1651
try {
1652
if ((user.siteadmin & 2) == 0) { err = 'Permission denied'; }
1640
- else if ((domain.auth == 'sspi') || (domain.auth == 'ldap')) { err = 'Unable to add user in this mode'; }
1653
else if (common.validateUsername(command.username, 1, 256) == false) { err = 'Invalid username'; } // Username is between 1 and 64 characters, no spaces
1654
else if ((command.username[0] == '~') || (command.username.indexOf('/') >= 0)) { err = 'Invalid username'; } // Usernames cant' start with ~ and can't have '/'
1655
else if (common.validateString(command.pass, 1, 256) == false) { err = 'Invalid password'; } // Password is between 1 and 256 characters
1656
else if ((command.randomPassword !== true) && (common.checkPasswordRequirements(command.pass, domain.passwordrequirements) == false)) { err = 'Invalid password'; } // Password does not meet requirements
1657
else if ((command.email != null) && (common.validateEmail(command.email, 1, 1024) == false)) { err = 'Invalid email'; } // Check if this is a valid email address
1658
+ else if ((obj.crossDomain === true) && (command.domain != null) && ((typeof command.domain != 'string') || (parent.parent.config.domains[command.domain] == null))) { err = 'Invalid domain'; } // Check if this is a valid domain
1659
else {
1660
+ newuserdomain = domain;
1661
+ if ((obj.crossDomain === true) && (command.domain != null)) { newuserdomain = parent.parent.config.domains[command.domain]; }
1662
newusername = command.username;
1648
- newuserid = 'user/' + domain.id + '/' + command.username.toLowerCase();
1663
+ newuserid = 'user/' + newuserdomain.id + '/' + command.username.toLowerCase();
1664
if (command.siteadmin != null) {
1665
if ((typeof command.siteadmin != 'number') || (Number.isInteger(command.siteadmin) == false)) { err = 'Invalid site permissions'; } // Check permissions
1666
else if ((user.siteadmin != 0xFFFFFFFF) && ((command.siteadmin & (0xFFFFFFFF - 224)) != 0)) { err = 'Invalid site permissions'; }
1667
}
1668
if (parent.users[newuserid]) { err = 'User already exists'; } // Account already exists
1669
+ else if ((newuserdomain.auth == 'sspi') || (newuserdomain.auth == 'ldap')) { err = 'Unable to add user in this mode'; }
1670
}
1671
} catch (ex) { err = 'Validation exception'; }
1672
@@ -1666,7 +1682,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1682
}
1683
1684
// Check if we exceed the maximum number of user accounts
1669
- db.isMaxType(domain.limits.maxuseraccounts, 'user', domain.id, function (maxExceed) {
1685
+ db.isMaxType(newuserdomain.limits.maxuseraccounts, 'user', newuserdomain.id, function (maxExceed) {
1686
if (maxExceed) {
1687
// Account count exceed, do notification
1688
if (command.responseid != null) {
@@ -1674,21 +1690,21 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1690
try { ws.send(JSON.stringify({ action: 'adduser', responseid: command.responseid, result: 'maxUsersExceed' })); } catch (ex) { }
1691
} else {
1692
// Create the notification message
1677
- var notification = { action: 'msg', type: 'notify', id: Math.random(), value: "Account limit reached.", title: "Server Limit", userid: user._id, username: user.name, domain: domain.id };
1693
+ var notification = { action: 'msg', type: 'notify', id: Math.random(), value: "Account limit reached.", title: "Server Limit", userid: user._id, username: user.name, domain: newuserdomain.id };
1694
1695
// Get the list of sessions for this user
1696
var sessions = parent.wssessions[user._id];
1681
- if (sessions != null) { for (i in sessions) { try { if (sessions[i].domainid == domain.id) { sessions[i].send(JSON.stringify(notification)); } } catch (ex) { } } }
1697
+ if (sessions != null) { for (i in sessions) { try { if (sessions[i].domainid == newuserdomain.id) { sessions[i].send(JSON.stringify(notification)); } } catch (ex) { } } }
1698
// TODO: Notify all sessions on other peers.
1699
}
1700
} else {
1701
// Remove any events for this userid
1686
- if (command.removeEvents === true) { db.RemoveAllUserEvents(domain.id, newuserid); }
1702
+ if (command.removeEvents === true) { db.RemoveAllUserEvents(newuserdomain.id, newuserid); }
1703
1704
// Create a new user
1689
- var newuser = { type: 'user', _id: newuserid, name: newusername, creation: Math.floor(Date.now() / 1000), domain: domain.id };
1705
+ var newuser = { type: 'user', _id: newuserid, name: newusername, creation: Math.floor(Date.now() / 1000), domain: newuserdomain.id };
1706
if (command.siteadmin != null) { newuser.siteadmin = command.siteadmin; }
1691
- else if (domain.newaccountsrights) { newuser.siteadmin = domain.newaccountsrights; }
1707
+ else if (newuserdomain.newaccountsrights) { newuser.siteadmin = newuserdomain.newaccountsrights; }
1708
if (command.email != null) { newuser.email = command.email.toLowerCase(); if (command.emailVerified === true) { newuser.emailVerified = true; } } // Email
1709
if (command.resetNextLogin === true) { newuser.passchange = -1; } else { newuser.passchange = Math.floor(Date.now() / 1000); }
1710
if (user.groups) { newuser.groups = user.groups; } // New accounts are automatically part of our groups (Realms).
@@ -1705,16 +1721,16 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1721
var event, targets = ['*', 'server-users'];
1722
if (newuser.groups) { for (var i in newuser.groups) { targets.push('server-users:' + i); } }
1723
if (command.email == null) {
1708
- event = { etype: 'user', userid: newuser._id, username: newusername, account: parent.CloneSafeUser(newuser), action: 'accountcreate', msg: 'Account created, username is ' + command.username, domain: domain.id };
1724
+ event = { etype: 'user', userid: newuser._id, username: newusername, account: parent.CloneSafeUser(newuser), action: 'accountcreate', msg: 'Account created, username is ' + command.username, domain: newuserdomain.id };
1725
} else {
1710
- event = { etype: 'user', userid: newuser._id, username: newusername, account: parent.CloneSafeUser(newuser), action: 'accountcreate', msg: 'Account created, email is ' + command.email.toLowerCase(), domain: domain.id };
1726
+ event = { etype: 'user', userid: newuser._id, username: newusername, account: parent.CloneSafeUser(newuser), action: 'accountcreate', msg: 'Account created, email is ' + command.email.toLowerCase(), domain: newuserdomain.id };
1727
}
1728
if (parent.db.changeStream) { event.noact = 1; } // If DB change stream is active, don't use this event to create the user. Another event will come.
1729
parent.parent.DispatchEvent(targets, obj, event);
1730
1731
// Perform email invitation
1732
if ((command.emailInvitation == true) && (command.emailVerified == true) && command.email && parent.parent.mailserver) {
1717
- parent.parent.mailserver.sendAccountInviteMail(domain, user.name, newusername, command.email.toLowerCase(), command.pass, parent.getLanguageCodes(req));
1733
+ parent.parent.mailserver.sendAccountInviteMail(newuserdomain, user.name, newusername, command.email.toLowerCase(), command.pass, parent.getLanguageCodes(req));
1734
}
1735
1736
// Log in the auth log
@@ -1732,77 +1748,84 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1748
}
1749
case 'edituser':
1750
{
1751
+ // Must be user administrator or edit self.
1752
+ if (((user.siteadmin & 2) == 0) && (user._id != command.id)) break;
1753
+
1754
// Edit a user account, may involve changing email or administrator permissions
1736
- if (((user.siteadmin & 2) != 0) || (user._id == command.id)) {
1737
- var chguser = parent.users[command.id];
1738
- change = 0;
1739
- if (chguser) {
1740
- // If the target user is admin and we are not admin, no changes can be made.
1741
- if ((chguser.siteadmin == 0xFFFFFFFF) && (user.siteadmin != 0xFFFFFFFF)) return;
1755
+ var chguser = parent.users[command.id];
1756
+ change = 0;
1757
+ if (chguser) {
1758
+ // If the target user is admin and we are not admin, no changes can be made.
1759
+ if ((chguser.siteadmin == 0xFFFFFFFF) && (user.siteadmin != 0xFFFFFFFF)) return;
1760
1743
- // Can only perform this operation on other users of our group.
1744
- if (user.siteadmin != 0xFFFFFFFF) {
1745
- if ((user.groups != null) && (user.groups.length > 0) && ((chguser.groups == null) || (findOne(chguser.groups, user.groups) == false))) return;
1746
- }
1761
+ // Can only perform this operation on other users of our group.
1762
+ if (user.siteadmin != 0xFFFFFFFF) {
1763
+ if ((user.groups != null) && (user.groups.length > 0) && ((chguser.groups == null) || (findOne(chguser.groups, user.groups) == false))) return;
1764
+ }
1765
1748
- // Validate and change email
1749
- if (domain.usernameisemail !== true) {
1750
- if (common.validateString(command.email, 1, 1024) && (chguser.email != command.email)) { chguser.email = command.email.toLowerCase(); change = 1; }
1751
- }
1766
+ // Fetch and validate the user domain
1767
+ var edituserdomainid = command.id.split('/')[1];
1768
+ if ((obj.crossDomain !== true) && (edituserdomainid != domain.id)) break;
1769
+ var edituserdomain = parent.parent.config.domains[edituserdomainid];
1770
+ if (edituserdomain == null) break;
1771
1753
- // Make changes
1754
- if ((command.emailVerified === true || command.emailVerified === false) && (chguser.emailVerified != command.emailVerified)) { chguser.emailVerified = command.emailVerified; change = 1; }
1755
- if ((common.validateInt(command.quota, 0) || command.quota == null) && (command.quota != chguser.quota)) { chguser.quota = command.quota; if (chguser.quota == null) { delete chguser.quota; } change = 1; }
1756
- if ((command.consent != null) && (typeof command.consent == 'number')) { if (command.consent == 0) { delete chguser.consent; } else { chguser.consent = command.consent; } change = 1; }
1757
- if ((command.phone != null) && (typeof command.phone == 'string') && ((command.phone == '') || isPhoneNumber(command.phone))) { if (command.phone == '') { delete chguser.phone; } else { chguser.phone = command.phone; } change = 1; }
1772
+ // Validate and change email
1773
+ if (edituserdomain.usernameisemail !== true) {
1774
+ if (common.validateString(command.email, 1, 1024) && (chguser.email != command.email)) { chguser.email = command.email.toLowerCase(); change = 1; }
1775
+ }
1776
1759
- // Site admins can change any server rights, user managers can only change AccountLock, NoMeshCmd and NoNewGroups
1760
- if (chguser._id !== user._id) { // We can't change our own siteadmin permissions.
1761
- var chgusersiteadmin = chguser.siteadmin ? chguser.siteadmin : 0;
1762
- if (((user.siteadmin == 0xFFFFFFFF) || ((user.siteadmin & 2) && (((chgusersiteadmin ^ command.siteadmin) & 0xFFFFFF1F) == 0))) && common.validateInt(command.siteadmin) && (chguser.siteadmin != command.siteadmin)) { chguser.siteadmin = command.siteadmin; change = 1; }
1763
- }
1777
+ // Make changes
1778
+ if ((command.emailVerified === true || command.emailVerified === false) && (chguser.emailVerified != command.emailVerified)) { chguser.emailVerified = command.emailVerified; change = 1; }
1779
+ if ((common.validateInt(command.quota, 0) || command.quota == null) && (command.quota != chguser.quota)) { chguser.quota = command.quota; if (chguser.quota == null) { delete chguser.quota; } change = 1; }
1780
+ if ((command.consent != null) && (typeof command.consent == 'number')) { if (command.consent == 0) { delete chguser.consent; } else { chguser.consent = command.consent; } change = 1; }
1781
+ if ((command.phone != null) && (typeof command.phone == 'string') && ((command.phone == '') || isPhoneNumber(command.phone))) { if (command.phone == '') { delete chguser.phone; } else { chguser.phone = command.phone; } change = 1; }
1782
1765
- // When sending a notification about a group change, we need to send to all the previous and new groups.
1766
- var allTargetGroups = chguser.groups;
1767
- if ((Array.isArray(command.groups)) && ((user._id != command.id) || (user.siteadmin == 0xFFFFFFFF))) {
1768
- if (command.groups.length == 0) {
1769
- // Remove the user groups
1770
- if (chguser.groups != null) { delete chguser.groups; change = 1; }
1771
- } else {
1772
- // Arrange the user groups
1773
- var groups2 = [];
1774
- for (var i in command.groups) {
1775
- if (typeof command.groups[i] == 'string') {
1776
- var gname = command.groups[i].trim().toLowerCase();
1777
- if ((gname.length > 0) && (gname.length <= 64) && (groups2.indexOf(gname) == -1)) { groups2.push(gname); }
1778
- }
1783
+ // Site admins can change any server rights, user managers can only change AccountLock, NoMeshCmd and NoNewGroups
1784
+ if (chguser._id !== user._id) { // We can't change our own siteadmin permissions.
1785
+ var chgusersiteadmin = chguser.siteadmin ? chguser.siteadmin : 0;
1786
+ if (((user.siteadmin == 0xFFFFFFFF) || ((user.siteadmin & 2) && (((chgusersiteadmin ^ command.siteadmin) & 0xFFFFFF1F) == 0))) && common.validateInt(command.siteadmin) && (chguser.siteadmin != command.siteadmin)) { chguser.siteadmin = command.siteadmin; change = 1; }
1787
+ }
1788
+
1789
+ // When sending a notification about a group change, we need to send to all the previous and new groups.
1790
+ var allTargetGroups = chguser.groups;
1791
+ if ((Array.isArray(command.groups)) && ((user._id != command.id) || (user.siteadmin == 0xFFFFFFFF))) {
1792
+ if (command.groups.length == 0) {
1793
+ // Remove the user groups
1794
+ if (chguser.groups != null) { delete chguser.groups; change = 1; }
1795
+ } else {
1796
+ // Arrange the user groups
1797
+ var groups2 = [];
1798
+ for (var i in command.groups) {
1799
+ if (typeof command.groups[i] == 'string') {
1800
+ var gname = command.groups[i].trim().toLowerCase();
1801
+ if ((gname.length > 0) && (gname.length <= 64) && (groups2.indexOf(gname) == -1)) { groups2.push(gname); }
1802
}
1780
- groups2.sort();
1803
+ }
1804
+ groups2.sort();
1805
1782
- // Set the user groups (Realms)
1783
- if (chguser.groups != groups2) { chguser.groups = groups2; change = 1; }
1806
+ // Set the user groups (Realms)
1807
+ if (chguser.groups != groups2) { chguser.groups = groups2; change = 1; }
1808
1785
- // Add any missing groups in the target list
1786
- if (allTargetGroups == null) { allTargetGroups = []; }
1787
- for (var i in groups2) { if (allTargetGroups.indexOf(i) == -1) { allTargetGroups.push(i); } }
1788
- }
1809
+ // Add any missing groups in the target list
1810
+ if (allTargetGroups == null) { allTargetGroups = []; }
1811
+ for (var i in groups2) { if (allTargetGroups.indexOf(i) == -1) { allTargetGroups.push(i); } }
1812
}
1813
+ }
1814
1791
- if (change == 1) {
1792
- // Update the user
1793
- db.SetUser(chguser);
1794
- parent.parent.DispatchEvent([chguser._id], obj, 'resubscribe');
1815
+ if (change == 1) {
1816
+ // Update the user
1817
+ db.SetUser(chguser);
1818
+ parent.parent.DispatchEvent([chguser._id], obj, 'resubscribe');
1819
1796
- var targets = ['*', 'server-users', user._id, chguser._id];
1797
- if (allTargetGroups) { for (var i in allTargetGroups) { targets.push('server-users:' + i); } }
1798
- var event = { etype: 'user', userid: user._id, username: user.name, account: parent.CloneSafeUser(chguser), action: 'accountchange', msg: 'Account changed: ' + chguser.name, domain: domain.id };
1799
- if (db.changeStream) { event.noact = 1; } // If DB change stream is active, don't use this event to change the user. Another event will come.
1800
- parent.parent.DispatchEvent(targets, obj, event);
1801
- }
1802
- if ((chguser.siteadmin) && (chguser.siteadmin != 0xFFFFFFFF) && (chguser.siteadmin & 32)) {
1803
- // If the user is locked out of this account, disconnect now
1804
- parent.parent.DispatchEvent([chguser._id], obj, 'close'); // Disconnect all this user's sessions
1805
- }
1820
+ var targets = ['*', 'server-users', user._id, chguser._id];
1821
+ if (allTargetGroups) { for (var i in allTargetGroups) { targets.push('server-users:' + i); } }
1822
+ var event = { etype: 'user', userid: user._id, username: user.name, account: parent.CloneSafeUser(chguser), action: 'accountchange', msg: 'Account changed: ' + chguser.name, domain: edituserdomain.id };
1823
+ if (db.changeStream) { event.noact = 1; } // If DB change stream is active, don't use this event to change the user. Another event will come.
1824
+ parent.parent.DispatchEvent(targets, obj, event);
1825
+ }
1826
+ if ((chguser.siteadmin) && (chguser.siteadmin != 0xFFFFFFFF) && (chguser.siteadmin & 32)) {
1827
+ // If the user is locked out of this account, disconnect now
1828
+ parent.parent.DispatchEvent([chguser._id], obj, 'close'); // Disconnect all this user's sessions
1829
}
1830
}
1831
break;
sample-config-advanced.json
+2
-1
@@ -52,6 +52,8 @@
52
"_AgentAllowedIP": "192.168.0.100/24",
53
"_AgentBlockedIP": "127.0.0.1,::1",
54
"_AuthLog": "c:\\temp\\auth.log",
55
+ "_ManageAllDeviceGroups": [ "user//admin" ],
56
+ "_ManageCrossDomain": [ "user//admin" ],
57
"_LocalDiscovery": {
58
"name": "Local server name",
59
"info": "Information about this server"
@@ -104,7 +106,6 @@
106
"_UserNameIsEmail": true,
107
"_NewAccountEmailDomains": [ "sample.com" ],
108
"_NewAccountsRights": [ "nonewgroups", "notools" ],
107
- "_ManageAllDeviceGroups": [ "admin" ],
109
"_WelcomeText": "Sample Text on Login Page.",
110
"_WelcomePicture": "mainwelcome.jpg",
111
"___Hide__": "Sum of: 1 = Hide header, 2 = Hide tab, 4 = Hide footer, 8 = Hide title, 16 = Hide left bar",
translate/translate.json
+330
-317
@@ -192,7 +192,7 @@
192
"zh-chs": " 用戶需要先登錄到該服務器一次,然後才能將其添加到設備組。",
193
"xloc": [
194
"default.handlebars->25->1258",
195
- "default.handlebars->25->1564"
195
+ "default.handlebars->25->1566"
196
]
197
},
198
{
@@ -619,7 +619,7 @@
619
"default-mobile.handlebars->9->108",
620
"default-mobile.handlebars->9->284",
621
"default.handlebars->25->1365",
622
- "default.handlebars->25->1709",
622
+ "default.handlebars->25->1712",
623
"default.handlebars->25->750"
624
]
625
},
@@ -669,7 +669,7 @@
669
"ru": "1 активная сессия",
670
"zh-chs": "1個活動會話",
671
"xloc": [
672
- "default.handlebars->25->1627"
672
+ "default.handlebars->25->1630"
673
]
674
},
675
{
@@ -731,7 +731,7 @@
731
"ru": "1 группа",
732
"zh-chs": "1組",
733
"xloc": [
734
- "default.handlebars->25->1592"
734
+ "default.handlebars->25->1595"
735
]
736
},
737
{
@@ -1131,7 +1131,7 @@
1131
"zh-chs": "啟用第二因素身份驗證",
1132
"xloc": [
1133
"default.handlebars->25->1436",
1134
- "default.handlebars->25->1614"
1134
+ "default.handlebars->25->1617"
1135
]
1136
},
1137
{
@@ -1878,7 +1878,7 @@
1878
"ru": "Доступ к файлам сервера",
1879
"zh-chs": "訪問服務器文件",
1880
"xloc": [
1881
- "default.handlebars->25->1570"
1881
+ "default.handlebars->25->1572"
1882
]
1883
},
1884
{
@@ -2003,7 +2003,7 @@
2003
"zh-chs": "帐户已被锁定",
2004
"xloc": [
2005
"default.handlebars->25->1438",
2006
- "default.handlebars->25->1567"
2006
+ "default.handlebars->25->1569"
2007
]
2008
},
2009
{
@@ -2278,8 +2278,8 @@
2278
"ru": "Добавить устройство",
2279
"zh-chs": "添加設備",
2280
"xloc": [
2281
- "default.handlebars->25->1544",
2282
- "default.handlebars->25->1660"
2281
+ "default.handlebars->25->1546",
2282
+ "default.handlebars->25->1663"
2283
]
2284
},
2285
{
@@ -2314,8 +2314,8 @@
2314
"zh-chs": "添加設備組",
2315
"xloc": [
2316
"default.handlebars->25->1290",
2317
- "default.handlebars->25->1538",
2318
- "default.handlebars->25->1648",
2317
+ "default.handlebars->25->1540",
2318
+ "default.handlebars->25->1651",
2319
"default.handlebars->25->198"
2320
]
2321
},
@@ -2432,7 +2432,7 @@
2432
"ru": "Добавить участие",
2433
"zh-chs": "添加會員",
2434
"xloc": [
2435
- "default.handlebars->25->1678"
2435
+ "default.handlebars->25->1681"
2436
]
2437
},
2438
{
@@ -2524,7 +2524,7 @@
2524
"xloc": [
2525
"default.handlebars->25->1190",
2526
"default.handlebars->25->1289",
2527
- "default.handlebars->25->1654",
2527
+ "default.handlebars->25->1657",
2528
"default.handlebars->25->572"
2529
]
2530
},
@@ -2585,7 +2585,7 @@
2585
"zh-chs": "添加用戶",
2586
"xloc": [
2587
"default.handlebars->25->1189",
2588
- "default.handlebars->25->1533"
2588
+ "default.handlebars->25->1535"
2589
]
2590
},
2591
{
@@ -2619,7 +2619,7 @@
2619
"ru": "Добавить пользователей в группу",
2620
"zh-chs": "將用戶添加到用戶組",
2621
"xloc": [
2622
- "default.handlebars->25->1566"
2622
+ "default.handlebars->25->1568"
2623
]
2624
},
2625
{
@@ -2826,7 +2826,7 @@
2826
"ru": "Области администратора",
2827
"zh-chs": "管理領域",
2828
"xloc": [
2829
- "default.handlebars->25->1596"
2829
+ "default.handlebars->25->1599"
2830
]
2831
},
2832
{
@@ -2861,7 +2861,7 @@
2861
"ru": "Административные области",
2862
"zh-chs": "行政領域",
2863
"xloc": [
2864
- "default.handlebars->25->1489"
2864
+ "default.handlebars->25->1491"
2865
]
2866
},
2867
{
@@ -2989,7 +2989,7 @@
2989
"ru": "Счетчик ошибок агента",
2990
"zh-chs": "座席錯誤計數器",
2991
"xloc": [
2992
- "default.handlebars->25->1719"
2992
+ "default.handlebars->25->1722"
2993
]
2994
},
2995
{
@@ -3058,7 +3058,7 @@
3058
"ru": "Сессии агентов",
3059
"zh-chs": "座席會議",
3060
"xloc": [
3061
- "default.handlebars->25->1735"
3061
+ "default.handlebars->25->1738"
3062
]
3063
},
3064
{
@@ -3181,7 +3181,7 @@
3181
"ru": "Агенты",
3182
"zh-chs": "代理商",
3183
"xloc": [
3184
- "default.handlebars->25->1748"
3184
+ "default.handlebars->25->1751"
3185
]
3186
},
3187
{
@@ -3268,7 +3268,7 @@
3268
"zh-chs": "允許用戶管理此設備組和該組中的設備。",
3269
"xloc": [
3270
"default.handlebars->25->1256",
3271
- "default.handlebars->25->1563"
3271
+ "default.handlebars->25->1565"
3272
]
3273
},
3274
{
@@ -3372,7 +3372,7 @@
3372
"zh-chs": "始終通知",
3373
"xloc": [
3374
"default.handlebars->25->1170",
3375
- "default.handlebars->25->1605",
3375
+ "default.handlebars->25->1608",
3376
"default.handlebars->25->518"
3377
]
3378
},
@@ -3391,7 +3391,7 @@
3391
"zh-chs": "總是提示",
3392
"xloc": [
3393
"default.handlebars->25->1171",
3394
- "default.handlebars->25->1606",
3394
+ "default.handlebars->25->1609",
3395
"default.handlebars->25->519"
3396
]
3397
},
@@ -4001,7 +4001,7 @@
4001
"ru": "Вы уверенны, что {0} плагин: {1}",
4002
"zh-chs": "您確定要{0}插件嗎:{1}",
4003
"xloc": [
4004
- "default.handlebars->25->1788"
4004
+ "default.handlebars->25->1791"
4005
]
4006
},
4007
{
@@ -4097,7 +4097,7 @@
4097
"ru": "Приложение аутентификации",
4098
"zh-chs": "身份驗證應用",
4099
"xloc": [
4100
- "default.handlebars->25->1609"
4100
+ "default.handlebars->25->1612"
4101
]
4102
},
4103
{
@@ -4414,7 +4414,7 @@
4414
"ru": "Резервные коды",
4415
"zh-chs": "備用碼",
4416
"xloc": [
4417
- "default.handlebars->25->1611"
4417
+ "default.handlebars->25->1614"
4418
]
4419
},
4420
{
@@ -4431,7 +4431,7 @@
4431
"ru": "Плохой ключ",
4432
"zh-chs": "錯誤的簽名",
4433
"xloc": [
4434
- "default.handlebars->25->1726"
4434
+ "default.handlebars->25->1729"
4435
]
4436
},
4437
{
@@ -4448,7 +4448,7 @@
4448
"ru": "Плохой веб-сертификат",
4449
"zh-chs": "錯誤的網絡證書",
4450
"xloc": [
4451
- "default.handlebars->25->1725"
4451
+ "default.handlebars->25->1728"
4452
]
4453
},
4454
{
@@ -4586,7 +4586,7 @@
4586
"ru": "Отправить сообщение",
4587
"zh-chs": "廣播",
4588
"xloc": [
4589
- "default.handlebars->25->1531",
4589
+ "default.handlebars->25->1533",
4590
"default.handlebars->container->column_l->p4->3->1->0->3->1"
4591
]
4592
},
@@ -4711,7 +4711,7 @@
4711
"ru": "CIRA Сервер",
4712
"zh-chs": "CIRA服務器",
4713
"xloc": [
4714
- "default.handlebars->25->1776"
4714
+ "default.handlebars->25->1779"
4715
]
4716
},
4717
{
@@ -4728,7 +4728,7 @@
4728
"ru": "CIRA Сервер команды",
4729
"zh-chs": "CIRA服務器命令",
4730
"xloc": [
4731
- "default.handlebars->25->1777"
4731
+ "default.handlebars->25->1780"
4732
]
4733
},
4734
{
@@ -4762,7 +4762,7 @@
4762
"ru": "Загрузка CPU",
4763
"zh-chs": "CPU負載",
4764
"xloc": [
4765
- "default.handlebars->25->1740"
4765
+ "default.handlebars->25->1743"
4766
]
4767
},
4768
{
@@ -4779,7 +4779,7 @@
4779
"ru": "Загрузка CPU за последние 15 минут",
4780
"zh-chs": "最近15分鐘的CPU負載",
4781
"xloc": [
4782
- "default.handlebars->25->1743"
4782
+ "default.handlebars->25->1746"
4783
]
4784
},
4785
{
@@ -4796,7 +4796,7 @@
4796
"ru": "Загрузка CPU за последние 5 минут",
4797
"zh-chs": "最近5分鐘的CPU負載",
4798
"xloc": [
4799
- "default.handlebars->25->1742"
4799
+ "default.handlebars->25->1745"
4800
]
4801
},
4802
{
@@ -4813,7 +4813,7 @@
4813
"ru": "Загрузка CPU за последнюю минуту",
4814
"zh-chs": "最後一分鐘的CPU負載",
4815
"xloc": [
4816
- "default.handlebars->25->1741"
4816
+ "default.handlebars->25->1744"
4817
]
4818
},
4819
{
@@ -4868,7 +4868,7 @@
4868
"ru": "Ошибка вызова",
4869
"zh-chs": "通話錯誤",
4870
"xloc": [
4871
- "default.handlebars->25->1789"
4871
+ "default.handlebars->25->1792"
4872
]
4873
},
4874
{
@@ -5008,7 +5008,7 @@
5008
"ru": "Смена email для {0}",
5009
"zh-chs": "更改{0}的電子郵件",
5010
"xloc": [
5011
- "default.handlebars->25->1637"
5011
+ "default.handlebars->25->1640"
5012
]
5013
},
5014
{
@@ -5046,7 +5046,7 @@
5046
"xloc": [
5047
"default-mobile.handlebars->9->90",
5048
"default.handlebars->25->1115",
5049
- "default.handlebars->25->1626"
5049
+ "default.handlebars->25->1629"
5050
]
5051
},
5052
{
@@ -5063,7 +5063,7 @@
5063
"ru": "Смена пароля для {0}",
5064
"zh-chs": "更改{0}的密碼",
5065
"xloc": [
5066
- "default.handlebars->25->1644"
5066
+ "default.handlebars->25->1647"
5067
]
5068
},
5069
{
@@ -5133,7 +5133,7 @@
5133
"ru": "Изменить пароль для этого пользователя",
5134
"zh-chs": "更改該用戶的密碼",
5135
"xloc": [
5136
- "default.handlebars->25->1625"
5136
+ "default.handlebars->25->1628"
5137
]
5138
},
5139
{
@@ -5338,7 +5338,7 @@
5338
"ru": "Проверка...",
5339
"zh-chs": "檢查...",
5340
"xloc": [
5341
- "default.handlebars->25->1783",
5341
+ "default.handlebars->25->1786",
5342
"default.handlebars->25->888"
5343
]
5344
},
@@ -5554,7 +5554,7 @@
5554
"nl": "Wis alle meldingen",
5555
"zh-chs": "全部清除",
5556
"xloc": [
5557
- "default.handlebars->25->1713"
5557
+ "default.handlebars->25->1716"
5558
]
5559
},
5560
{
@@ -5604,7 +5604,7 @@
5604
"ru": "Очистить это уведомление",
5605
"zh-chs": "清除此通知",
5606
"xloc": [
5607
- "default.handlebars->25->1712"
5607
+ "default.handlebars->25->1715"
5608
]
5609
},
5610
{
@@ -5680,7 +5680,7 @@
5680
"nl": "Klik hier om de gebruikersgroepsnaam te bewerken",
5681
"zh-chs": "单击此处编辑用户组名称",
5682
"xloc": [
5683
- "default.handlebars->25->1523"
5683
+ "default.handlebars->25->1525"
5684
]
5685
},
5686
{
@@ -5855,8 +5855,8 @@
5855
"ru": "Общие группы устройств",
5856
"zh-chs": "通用設備組",
5857
"xloc": [
5858
- "default.handlebars->25->1539",
5859
- "default.handlebars->25->1649"
5858
+ "default.handlebars->25->1541",
5859
+ "default.handlebars->25->1652"
5860
]
5861
},
5862
{
@@ -5873,8 +5873,8 @@
5873
"ru": "Общие устройства",
5874
"zh-chs": "通用設備",
5875
"xloc": [
5876
- "default.handlebars->25->1545",
5877
- "default.handlebars->25->1661"
5876
+ "default.handlebars->25->1547",
5877
+ "default.handlebars->25->1664"
5878
]
5879
},
5880
{
@@ -5913,9 +5913,9 @@
5913
"default-mobile.handlebars->9->387",
5914
"default.handlebars->25->1235",
5915
"default.handlebars->25->1448",
5916
- "default.handlebars->25->1515",
5917
- "default.handlebars->25->1559",
5918
- "default.handlebars->25->1647",
5916
+ "default.handlebars->25->1517",
5917
+ "default.handlebars->25->1561",
5918
+ "default.handlebars->25->1650",
5919
"default.handlebars->25->408",
5920
"default.handlebars->25->647",
5921
"default.handlebars->25->656"
@@ -5999,7 +5999,7 @@
5999
"nl": "Bevestig verwijdering geselecteerde gebruikersgroep(en)?",
6000
"zh-chs": "确认删除选定的用户组?",
6001
"xloc": [
6002
- "default.handlebars->25->1514"
6002
+ "default.handlebars->25->1516"
6003
]
6004
},
6005
{
@@ -6016,7 +6016,7 @@
6016
"ru": "Подтвердить удаление пользователя {0}?",
6017
"zh-chs": "確認刪除用戶{0}?",
6018
"xloc": [
6019
- "default.handlebars->25->1646"
6019
+ "default.handlebars->25->1649"
6020
]
6021
},
6022
{
@@ -6030,7 +6030,7 @@
6030
"nl": "Bevestig lidmaatschap verwijderen van gebruiker \\\"{0}\\\"?",
6031
"zh-chs": "确认删除用户\\“ {0} \\”的成员身份?",
6032
"xloc": [
6033
- "default.handlebars->25->1562"
6033
+ "default.handlebars->25->1564"
6034
]
6035
},
6036
{
@@ -6044,7 +6044,7 @@
6044
"nl": "Bevestig lidmaatschap verwijdering van gebruikergroep \\\"{0}\\\"?",
6045
"zh-chs": "确认删除用户组 “{0}” 的成员身份?",
6046
"xloc": [
6047
- "default.handlebars->25->1676"
6047
+ "default.handlebars->25->1679"
6048
]
6049
},
6050
{
@@ -6111,8 +6111,8 @@
6111
"nl": "Bevestig verwijdering van toegangsrechten voor apparaat \\\"{0}\\\"?",
6112
"zh-chs": "确认删除设备“ {0} ”的访问权限?",
6113
"xloc": [
6114
- "default.handlebars->25->1552",
6115
- "default.handlebars->25->1667"
6114
+ "default.handlebars->25->1554",
6115
+ "default.handlebars->25->1670"
6116
]
6117
},
6118
{
@@ -6126,8 +6126,8 @@
6126
"nl": "Bevestig verwijdering van toegangsrechten voor apparaatgroep \\\"{0}\\\"?",
6127
"zh-chs": "是否确认删除设备组“ {0}”的访问权限?",
6128
"xloc": [
6129
- "default.handlebars->25->1554",
6130
- "default.handlebars->25->1680"
6129
+ "default.handlebars->25->1556",
6130
+ "default.handlebars->25->1683"
6131
]
6132
},
6133
{
@@ -6141,7 +6141,7 @@
6141
"nl": "Bevestig verwijdering van toegangsrechten voor gebruiker \\\"{0}\\\"?",
6142
"zh-chs": "确认删除用户\\“ {0} \\”的访问权限?",
6143
"xloc": [
6144
- "default.handlebars->25->1669"
6144
+ "default.handlebars->25->1672"
6145
]
6146
},
6147
{
@@ -6155,7 +6155,7 @@
6155
"nl": "Bevestig verwijdering van toegangsrechten voor gebruikergroep \\\"{0}\\\"?",
6156
"zh-chs": "确认删除用户组“ {0}”的访问权限?",
6157
"xloc": [
6158
- "default.handlebars->25->1672"
6158
+ "default.handlebars->25->1675"
6159
]
6160
},
6161
{
@@ -6169,8 +6169,8 @@
6169
"nl": "Verwijdering van toegangsrechten bevestigen?",
6170
"zh-chs": "确认删除访问权限?",
6171
"xloc": [
6172
- "default.handlebars->25->1670",
6173
- "default.handlebars->25->1673"
6172
+ "default.handlebars->25->1673",
6173
+ "default.handlebars->25->1676"
6174
]
6175
},
6176
{
@@ -6417,7 +6417,7 @@
6417
"ru": "Подключено Intel® AMT",
6418
"zh-chs": "連接的英特爾®AMT",
6419
"xloc": [
6420
- "default.handlebars->25->1731"
6420
+ "default.handlebars->25->1734"
6421
]
6422
},
6423
{
@@ -6434,7 +6434,7 @@
6434
"ru": "Подключенные пользователи",
6435
"zh-chs": "關聯用戶",
6436
"xloc": [
6437
- "default.handlebars->25->1736"
6437
+ "default.handlebars->25->1739"
6438
]
6439
},
6440
{
@@ -6511,7 +6511,7 @@
6511
"ru": "Подключений ",
6512
"zh-chs": "連接數",
6513
"xloc": [
6514
- "default.handlebars->25->1747"
6514
+ "default.handlebars->25->1750"
6515
]
6516
},
6517
{
@@ -6528,7 +6528,7 @@
6528
"ru": "Ретранслятор подключения",
6529
"zh-chs": "連接繼電器",
6530
"xloc": [
6531
- "default.handlebars->25->1775"
6531
+ "default.handlebars->25->1778"
6532
]
6533
},
6534
{
@@ -6655,7 +6655,7 @@
6655
"ru": "Cookie-кодировщик",
6656
"zh-chs": "Cookie編碼器",
6657
"xloc": [
6658
- "default.handlebars->25->1761"
6658
+ "default.handlebars->25->1764"
6659
]
6660
},
6661
{
@@ -6960,7 +6960,7 @@
6960
"ru": "Основной сервер",
6961
"zh-chs": "核心服務器",
6962
"xloc": [
6963
- "default.handlebars->25->1760"
6963
+ "default.handlebars->25->1763"
6964
]
6965
},
6966
{
@@ -6994,7 +6994,7 @@
6994
"ru": "Создать учетную запись",
6995
"zh-chs": "創建帳號",
6996
"xloc": [
6997
- "default.handlebars->25->1485",
6997
+ "default.handlebars->25->1487",
6998
"login-mobile.handlebars->container->page_content->column_l->1->1->0->1->createpanel->1->1->9->1->12->1->1",
6999
"login.handlebars->container->column_l->centralTable->1->0->logincell->createpanel->1->9->1->12->1->1"
7000
]
@@ -7030,7 +7030,7 @@
7030
"ru": "Создать группу пользователей",
7031
"zh-chs": "創建用戶組",
7032
"xloc": [
7033
- "default.handlebars->25->1520"
7033
+ "default.handlebars->25->1522"
7034
]
7035
},
7036
{
@@ -7116,7 +7116,7 @@
7116
"ru": "Создано",
7117
"zh-chs": "創建",
7118
"xloc": [
7119
- "default.handlebars->25->1585"
7119
+ "default.handlebars->25->1588"
7120
]
7121
},
7122
{
@@ -7433,6 +7433,12 @@
7433
"default.handlebars->25->368"
7434
]
7435
},
7436
+ {
7437
+ "en": "Default",
7438
+ "xloc": [
7439
+ "default.handlebars->25->1474"
7440
+ ]
7441
+ },
7442
{
7443
"cs": "Smazat",
7444
"de": "Löschen",
@@ -7581,7 +7587,7 @@
7587
"ru": "Удалить пользователя",
7588
"zh-chs": "刪除用戶",
7589
"xloc": [
7584
- "default.handlebars->25->1624"
7590
+ "default.handlebars->25->1627"
7591
]
7592
},
7593
{
@@ -7598,8 +7604,8 @@
7604
"ru": "Удалить группу пользователей",
7605
"zh-chs": "刪除用戶組",
7606
"xloc": [
7601
- "default.handlebars->25->1550",
7602
- "default.handlebars->25->1560"
7607
+ "default.handlebars->25->1552",
7608
+ "default.handlebars->25->1562"
7609
]
7610
},
7611
{
@@ -7613,7 +7619,7 @@
7619
"nl": "Gebruikersgroepen verwijderen",
7620
"zh-chs": "删除用户组",
7621
"xloc": [
7616
- "default.handlebars->25->1516"
7622
+ "default.handlebars->25->1518"
7623
]
7624
},
7625
{
@@ -7630,7 +7636,7 @@
7636
"ru": "Удалить пользователя {0}",
7637
"zh-chs": "刪除用戶{0}",
7638
"xloc": [
7633
- "default.handlebars->25->1645"
7639
+ "default.handlebars->25->1648"
7640
]
7641
},
7642
{
@@ -7680,7 +7686,7 @@
7686
"nl": "Verwijder groep",
7687
"zh-chs": "删除群组",
7688
"xloc": [
7683
- "default.handlebars->25->1512"
7689
+ "default.handlebars->25->1514"
7690
]
7691
},
7692
{
@@ -7734,7 +7740,7 @@
7740
"ru": "Удалить группу пользователей {0}?",
7741
"zh-chs": "刪除用戶組{0}?",
7742
"xloc": [
7737
- "default.handlebars->25->1558"
7743
+ "default.handlebars->25->1560"
7744
]
7745
},
7746
{
@@ -7871,10 +7877,10 @@
7877
"default.handlebars->25->1127",
7878
"default.handlebars->25->1155",
7879
"default.handlebars->25->1238",
7874
- "default.handlebars->25->1519",
7875
- "default.handlebars->25->1526",
7876
- "default.handlebars->25->1527",
7877
- "default.handlebars->25->1556",
7880
+ "default.handlebars->25->1521",
7881
+ "default.handlebars->25->1528",
7882
+ "default.handlebars->25->1529",
7883
+ "default.handlebars->25->1558",
7884
"default.handlebars->25->477",
7885
"default.handlebars->25->478",
7886
"default.handlebars->25->688",
@@ -7913,7 +7919,7 @@
7919
"xloc": [
7920
"default-mobile.handlebars->9->245",
7921
"default.handlebars->25->1243",
7916
- "default.handlebars->25->1690",
7922
+ "default.handlebars->25->1693",
7923
"default.handlebars->25->444",
7924
"default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevDesktop",
7925
"default.handlebars->contextMenu->cxdesktop"
@@ -7951,7 +7957,7 @@
7957
"zh-chs": "桌面通知",
7958
"xloc": [
7959
"default.handlebars->25->1165",
7954
- "default.handlebars->25->1600",
7960
+ "default.handlebars->25->1603",
7961
"default.handlebars->25->513"
7962
]
7963
},
@@ -7970,7 +7976,7 @@
7976
"zh-chs": "桌面提示",
7977
"xloc": [
7978
"default.handlebars->25->1164",
7973
- "default.handlebars->25->1599",
7979
+ "default.handlebars->25->1602",
7980
"default.handlebars->25->512"
7981
]
7982
},
@@ -7989,7 +7995,7 @@
7995
"zh-chs": "桌面提示+工具欄",
7996
"xloc": [
7997
"default.handlebars->25->1162",
7992
- "default.handlebars->25->1597",
7998
+ "default.handlebars->25->1600",
7999
"default.handlebars->25->510"
8000
]
8001
},
@@ -8022,7 +8028,7 @@
8028
"zh-chs": "桌面工具欄",
8029
"xloc": [
8030
"default.handlebars->25->1163",
8025
- "default.handlebars->25->1598",
8031
+ "default.handlebars->25->1601",
8032
"default.handlebars->25->511"
8033
]
8034
},
@@ -8095,7 +8101,7 @@
8101
"zh-chs": "設備",
8102
"xloc": [
8103
"default.handlebars->25->1265",
8098
- "default.handlebars->25->1664",
8104
+ "default.handlebars->25->1667",
8105
"default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->9->devListToolbarSort->sortselect->5"
8106
]
8107
},
@@ -8134,10 +8140,10 @@
8140
"default.handlebars->25->1260",
8141
"default.handlebars->25->1263",
8142
"default.handlebars->25->1264",
8137
- "default.handlebars->25->1542",
8138
- "default.handlebars->25->1548",
8139
- "default.handlebars->25->1652",
8140
- "default.handlebars->25->1699"
8143
+ "default.handlebars->25->1544",
8144
+ "default.handlebars->25->1550",
8145
+ "default.handlebars->25->1655",
8146
+ "default.handlebars->25->1702"
8147
]
8148
},
8149
{
@@ -8174,10 +8180,10 @@
8180
"xloc": [
8181
"default-mobile.handlebars->container->page_content->column_l->p3->p3info->1->3",
8182
"default.handlebars->25->1414",
8177
- "default.handlebars->25->1506",
8178
- "default.handlebars->25->1529",
8179
- "default.handlebars->25->1594",
8180
- "default.handlebars->25->1734",
8183
+ "default.handlebars->25->1508",
8184
+ "default.handlebars->25->1531",
8185
+ "default.handlebars->25->1597",
8186
+ "default.handlebars->25->1737",
8187
"default.handlebars->container->column_l->p2->p2info->7"
8188
]
8189
},
@@ -8237,7 +8243,7 @@
8243
"zh-chs": "設備名稱",
8244
"xloc": [
8245
"default-mobile.handlebars->9->267",
8240
- "default.handlebars->25->1698",
8246
+ "default.handlebars->25->1701",
8247
"default.handlebars->25->244",
8248
"default.handlebars->25->686",
8249
"player.handlebars->3->9"
@@ -8617,8 +8623,8 @@
8623
"nl": "Apparaten",
8624
"zh-chs": "设备",
8625
"xloc": [
8620
- "default.handlebars->25->1507",
8621
- "default.handlebars->25->1530"
8626
+ "default.handlebars->25->1509",
8627
+ "default.handlebars->25->1532"
8628
]
8629
},
8630
{
@@ -8804,6 +8810,12 @@
8810
"default.handlebars->25->1219"
8811
]
8812
},
8813
+ {
8814
+ "en": "Domain",
8815
+ "xloc": [
8816
+ "default.handlebars->25->1475"
8817
+ ]
8818
+ },
8819
{
8820
"en": "Don't configure",
8821
"es": "No configurar",
@@ -9249,7 +9261,7 @@
9261
"nl": "Dubbele agent",
9262
"zh-chs": "代理重复",
9263
"xloc": [
9252
- "default.handlebars->25->1730"
9264
+ "default.handlebars->25->1733"
9265
]
9266
},
9267
{
@@ -9283,7 +9295,7 @@
9295
"ru": "Скопировать группу пользователей",
9296
"zh-chs": "重複的用戶組",
9297
"xloc": [
9286
- "default.handlebars->25->1521"
9298
+ "default.handlebars->25->1523"
9299
]
9300
},
9301
{
@@ -9314,8 +9326,8 @@
9326
"ru": "Длительность",
9327
"zh-chs": "持續時間",
9328
"xloc": [
9317
- "default.handlebars->25->1684",
9318
- "default.handlebars->25->1704",
9329
+ "default.handlebars->25->1687",
9330
+ "default.handlebars->25->1707",
9331
"player.handlebars->3->2"
9332
]
9333
},
@@ -9800,7 +9812,7 @@
9812
"ru": "Редактировать группу пользователей",
9813
"zh-chs": "編輯用戶組",
9814
"xloc": [
9803
- "default.handlebars->25->1557"
9815
+ "default.handlebars->25->1559"
9816
]
9817
},
9818
{
@@ -9849,11 +9861,11 @@
9861
"zh-chs": "電子郵件",
9862
"xloc": [
9863
"default-mobile.handlebars->9->78",
9852
- "default.handlebars->25->1475",
9853
- "default.handlebars->25->1579",
9854
- "default.handlebars->25->1580",
9855
- "default.handlebars->25->1619",
9856
- "default.handlebars->25->1633",
9864
+ "default.handlebars->25->1477",
9865
+ "default.handlebars->25->1582",
9866
+ "default.handlebars->25->1583",
9867
+ "default.handlebars->25->1622",
9868
+ "default.handlebars->25->1636",
9869
"default.handlebars->25->292",
9870
"login-mobile.handlebars->5->42",
9871
"login-mobile.handlebars->container->page_content->column_l->1->1->0->1->tokenpanel->1->7->1->4->1->3",
@@ -9987,7 +9999,7 @@
9999
"zh-chs": "電子郵件已驗證",
10000
"xloc": [
10001
"default.handlebars->25->1434",
9990
- "default.handlebars->25->1576"
10002
+ "default.handlebars->25->1578"
10003
]
10004
},
10005
{
@@ -10004,7 +10016,7 @@
10016
"ru": "Email подтвержден.",
10017
"zh-chs": "電子郵件已驗證。",
10018
"xloc": [
10007
- "default.handlebars->25->1481"
10019
+ "default.handlebars->25->1483"
10020
]
10021
},
10022
{
@@ -10021,7 +10033,7 @@
10033
"ru": "Email не подтвержден",
10034
"zh-chs": "電子郵件未驗證",
10035
"xloc": [
10024
- "default.handlebars->25->1577"
10036
+ "default.handlebars->25->1579"
10037
]
10038
},
10039
{
@@ -10060,7 +10072,7 @@
10072
"en": "Email verified and forced password reset required.",
10073
"nl": "E-mail geverifieerd en geforceerd opnieuw instellen van wachtwoord vereist.",
10074
"xloc": [
10063
- "default.handlebars->25->1482"
10075
+ "default.handlebars->25->1484"
10076
]
10077
},
10078
{
@@ -10073,7 +10085,7 @@
10085
"nl": "Email/SMS verkeer",
10086
"zh-chs": "电子邮件/短信流量",
10087
"xloc": [
10076
- "default.handlebars->25->1769"
10088
+ "default.handlebars->25->1772"
10089
]
10090
},
10091
{
@@ -10171,7 +10183,7 @@
10183
"en": "Enabled",
10184
"nl": "Ingeschakeld",
10185
"xloc": [
10174
- "default.handlebars->25->1706"
10186
+ "default.handlebars->25->1709"
10187
]
10188
},
10189
{
@@ -10195,7 +10207,7 @@
10207
"en": "End Time",
10208
"nl": "Eindtijd",
10209
"xloc": [
10198
- "default.handlebars->25->1703"
10210
+ "default.handlebars->25->1706"
10211
]
10212
},
10213
{
@@ -10451,7 +10463,7 @@
10463
"ru": "Введите разделенный запятыми список имен административных областей.",
10464
"zh-chs": "輸入管理領域名稱的逗號分隔列表。",
10465
"xloc": [
10454
- "default.handlebars->25->1486"
10466
+ "default.handlebars->25->1488"
10467
]
10468
},
10469
{
@@ -10758,7 +10770,7 @@
10770
"ru": "Внешний",
10771
"zh-chs": "外部",
10772
"xloc": [
10761
- "default.handlebars->25->1754"
10773
+ "default.handlebars->25->1757"
10774
]
10775
},
10776
{
@@ -10964,7 +10976,7 @@
10976
"default-mobile.handlebars->9->165",
10977
"default-mobile.handlebars->9->246",
10978
"default.handlebars->25->1250",
10967
- "default.handlebars->25->1691",
10979
+ "default.handlebars->25->1694",
10980
"default.handlebars->25->218",
10981
"default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevFiles",
10982
"default.handlebars->contextMenu->cxfiles"
@@ -11002,7 +11014,7 @@
11014
"zh-chs": "文件通知",
11015
"xloc": [
11016
"default.handlebars->25->1169",
11005
- "default.handlebars->25->1604",
11017
+ "default.handlebars->25->1607",
11018
"default.handlebars->25->517"
11019
]
11020
},
@@ -11021,7 +11033,7 @@
11033
"zh-chs": "文件提示",
11034
"xloc": [
11035
"default.handlebars->25->1168",
11024
- "default.handlebars->25->1603",
11036
+ "default.handlebars->25->1606",
11037
"default.handlebars->25->516"
11038
]
11039
},
@@ -11182,8 +11194,8 @@
11194
"ru": "Принудительно сбросить пароль при следующем входе в систему.",
11195
"zh-chs": "下次登錄時強制重置密碼。",
11196
"xloc": [
11185
- "default.handlebars->25->1480",
11186
- "default.handlebars->25->1642"
11197
+ "default.handlebars->25->1482",
11198
+ "default.handlebars->25->1645"
11199
]
11200
},
11201
{
@@ -11269,8 +11281,8 @@
11281
"ru": "Свободно",
11282
"zh-chs": "自由",
11283
"xloc": [
11272
- "default.handlebars->25->1715",
11273
- "default.handlebars->25->1717"
11284
+ "default.handlebars->25->1718",
11285
+ "default.handlebars->25->1720"
11286
]
11287
},
11288
{
@@ -11464,7 +11476,7 @@
11476
"default-mobile.handlebars->9->410",
11477
"default.handlebars->25->1136",
11478
"default.handlebars->25->1268",
11467
- "default.handlebars->25->1492"
11479
+ "default.handlebars->25->1494"
11480
]
11481
},
11482
{
@@ -11564,7 +11576,7 @@
11576
"ru": "Администратор с полным доступом",
11577
"zh-chs": "正式管理員",
11578
"xloc": [
11567
- "default.handlebars->25->1571"
11579
+ "default.handlebars->25->1573"
11580
]
11581
},
11582
{
@@ -11996,7 +12008,7 @@
12008
"zh-chs": "集體行動",
12009
"xloc": [
12010
"default.handlebars->25->1446",
11999
- "default.handlebars->25->1513",
12011
+ "default.handlebars->25->1515",
12012
"default.handlebars->25->406",
12013
"default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->devListToolbar",
12014
"default.handlebars->container->column_l->p4->3->1->0->3->3",
@@ -12017,7 +12029,7 @@
12029
"ru": "Члены группы",
12030
"zh-chs": "小組成員",
12031
"xloc": [
12020
- "default.handlebars->25->1534"
12032
+ "default.handlebars->25->1536"
12033
]
12034
},
12035
{
@@ -12189,7 +12201,7 @@
12201
"ru": "Всего кучи",
12202
"zh-chs": "堆總數",
12203
"xloc": [
12192
- "default.handlebars->25->1756"
12204
+ "default.handlebars->25->1759"
12205
]
12206
},
12207
{
@@ -12206,7 +12218,7 @@
12218
"ru": "Куча используется",
12219
"zh-chs": "堆使用",
12220
"xloc": [
12209
- "default.handlebars->25->1755"
12221
+ "default.handlebars->25->1758"
12222
]
12223
},
12224
{
@@ -12997,8 +13009,8 @@
13009
"xloc": [
13010
"default.handlebars->25->1352",
13011
"default.handlebars->25->1360",
13000
- "default.handlebars->25->1752",
13001
- "default.handlebars->25->1774"
13012
+ "default.handlebars->25->1755",
13013
+ "default.handlebars->25->1777"
13014
]
13015
},
13016
{
@@ -13039,14 +13051,14 @@
13051
"en": "Intel AMT Redirection",
13052
"nl": "Intel AMT omleiding",
13053
"xloc": [
13042
- "default.handlebars->25->1693"
13054
+ "default.handlebars->25->1696"
13055
]
13056
},
13057
{
13058
"en": "Intel AMT WSMAN",
13059
"nl": "Intel AMT WSMAN",
13060
"xloc": [
13049
- "default.handlebars->25->1692"
13061
+ "default.handlebars->25->1695"
13062
]
13063
},
13064
{
@@ -13731,7 +13743,7 @@
13743
"ru": "Некорректный тип группы устройств",
13744
"zh-chs": "無效的設備組類型",
13745
"xloc": [
13734
- "default.handlebars->25->1729"
13746
+ "default.handlebars->25->1732"
13747
]
13748
},
13749
{
@@ -13748,7 +13760,7 @@
13760
"ru": "Некорректный JSON",
13761
"zh-chs": "無效的JSON",
13762
"xloc": [
13751
- "default.handlebars->25->1723"
13763
+ "default.handlebars->25->1726"
13764
]
13765
},
13766
{
@@ -13800,7 +13812,7 @@
13812
"ru": "Некорректная сигнатура PKCS",
13813
"zh-chs": "無效的PKCS簽名",
13814
"xloc": [
13803
- "default.handlebars->25->1721"
13815
+ "default.handlebars->25->1724"
13816
]
13817
},
13818
{
@@ -13817,7 +13829,7 @@
13829
"ru": "Некорректная сигнатура RSA",
13830
"zh-chs": "無效的RSA密碼",
13831
"xloc": [
13820
- "default.handlebars->25->1722"
13832
+ "default.handlebars->25->1725"
13833
]
13834
},
13835
{
@@ -14644,7 +14656,7 @@
14656
"ru": "Последний вход в систему",
14657
"zh-chs": "上次登錄",
14658
"xloc": [
14647
- "default.handlebars->25->1586"
14659
+ "default.handlebars->25->1589"
14660
]
14661
},
14662
{
@@ -14707,7 +14719,7 @@
14719
"ru": "Последнее изменение: {0}",
14720
"zh-chs": "上次更改:{0}",
14721
"xloc": [
14710
- "default.handlebars->25->1590"
14722
+ "default.handlebars->25->1593"
14723
]
14724
},
14725
{
@@ -14874,7 +14886,7 @@
14886
"nl": "Leeg laten voor geen.",
14887
"zh-chs": "一无所有。",
14888
"xloc": [
14877
- "default.handlebars->25->1630"
14889
+ "default.handlebars->25->1633"
14890
]
14891
},
14892
{
@@ -14913,7 +14925,7 @@
14925
"ru": "Меньше",
14926
"zh-chs": "減",
14927
"xloc": [
14916
- "default.handlebars->25->1791"
14928
+ "default.handlebars->25->1794"
14929
]
14930
},
14931
{
@@ -15458,7 +15470,7 @@
15470
"ru": "Заблокировать учетную запись",
15471
"zh-chs": "鎖定賬戶",
15472
"xloc": [
15461
- "default.handlebars->25->1499"
15473
+ "default.handlebars->25->1501"
15474
]
15475
},
15476
{
@@ -15509,7 +15521,7 @@
15521
"ru": "Заблокированная учетная запись",
15522
"zh-chs": "賬戶鎖定",
15523
"xloc": [
15512
- "default.handlebars->25->1568"
15524
+ "default.handlebars->25->1570"
15525
]
15526
},
15527
{
@@ -16022,7 +16034,7 @@
16034
"ru": "Сообщения главного сервера",
16035
"zh-chs": "主服務器消息",
16036
"xloc": [
16025
- "default.handlebars->25->1763"
16037
+ "default.handlebars->25->1766"
16038
]
16039
},
16040
{
@@ -16154,7 +16166,7 @@
16166
"en": "Manage Recordings",
16167
"nl": "Beheeer opnames",
16168
"xloc": [
16157
- "default.handlebars->25->1498"
16169
+ "default.handlebars->25->1500"
16170
]
16171
},
16172
{
@@ -16188,7 +16200,7 @@
16200
"ru": "Управление группами пользователя",
16201
"zh-chs": "管理用戶組",
16202
"xloc": [
16191
- "default.handlebars->25->1497"
16203
+ "default.handlebars->25->1499"
16204
]
16205
},
16206
{
@@ -16205,7 +16217,7 @@
16217
"ru": "Управление пользователями",
16218
"zh-chs": "管理用戶",
16219
"xloc": [
16208
- "default.handlebars->25->1496",
16220
+ "default.handlebars->25->1498",
16221
"default.handlebars->25->597"
16222
]
16223
},
@@ -16448,7 +16460,7 @@
16460
"ru": "Достигнуто максимальное число сессий",
16461
"zh-chs": "達到的會話數上限",
16462
"xloc": [
16451
- "default.handlebars->25->1727"
16463
+ "default.handlebars->25->1730"
16464
]
16465
},
16466
{
@@ -16502,7 +16514,7 @@
16514
"ru": "Мегабайт",
16515
"zh-chs": "兆字節",
16516
"xloc": [
16505
- "default.handlebars->25->1753"
16517
+ "default.handlebars->25->1756"
16518
]
16519
},
16520
{
@@ -16520,7 +16532,7 @@
16532
"zh-chs": "記憶",
16533
"xloc": [
16534
"default-mobile.handlebars->9->366",
16523
- "default.handlebars->25->1744",
16535
+ "default.handlebars->25->1747",
16536
"default.handlebars->25->842",
16537
"default.handlebars->container->column_l->p40->3->1->p40type->3"
16538
]
@@ -16658,7 +16670,7 @@
16670
"ru": "Трафик MeshAgent",
16671
"zh-chs": "MeshAgent流量",
16672
"xloc": [
16661
- "default.handlebars->25->1765"
16673
+ "default.handlebars->25->1768"
16674
]
16675
},
16676
{
@@ -16675,7 +16687,7 @@
16687
"ru": "Обновление MeshAgent",
16688
"zh-chs": "MeshAgent更新",
16689
"xloc": [
16678
- "default.handlebars->25->1766"
16690
+ "default.handlebars->25->1769"
16691
]
16692
},
16693
{
@@ -16778,7 +16790,7 @@
16790
"ru": "Соединения сервера MeshCentral",
16791
"zh-chs": "MeshCentral服務器對等",
16792
"xloc": [
16781
- "default.handlebars->25->1764"
16793
+ "default.handlebars->25->1767"
16794
]
16795
},
16796
{
@@ -17042,7 +17054,7 @@
17054
"ru": "Диспетчер сообщения",
17055
"zh-chs": "郵件調度程序",
17056
"xloc": [
17045
- "default.handlebars->25->1762"
17057
+ "default.handlebars->25->1765"
17058
]
17059
},
17060
{
@@ -17191,7 +17203,7 @@
17203
"ru": "Еще",
17204
"zh-chs": "更多",
17205
"xloc": [
17194
- "default.handlebars->25->1790"
17206
+ "default.handlebars->25->1793"
17207
]
17208
},
17209
{
@@ -17267,7 +17279,7 @@
17279
"en": "Multiplexor",
17280
"nl": "Multiplexor",
17281
"xloc": [
17270
- "default.handlebars->25->1705"
17282
+ "default.handlebars->25->1708"
17283
]
17284
},
17285
{
@@ -17539,11 +17551,11 @@
17551
"default.handlebars->25->1154",
17552
"default.handlebars->25->1237",
17553
"default.handlebars->25->1413",
17542
- "default.handlebars->25->1504",
17543
- "default.handlebars->25->1518",
17544
- "default.handlebars->25->1525",
17545
- "default.handlebars->25->1555",
17546
- "default.handlebars->25->1574",
17554
+ "default.handlebars->25->1506",
17555
+ "default.handlebars->25->1520",
17556
+ "default.handlebars->25->1527",
17557
+ "default.handlebars->25->1557",
17558
+ "default.handlebars->25->1576",
17559
"default.handlebars->25->467",
17560
"default.handlebars->25->717",
17561
"default.handlebars->25->77",
@@ -17585,7 +17597,7 @@
17597
"ru": "Имя1, Имя2, Имя3",
17598
"zh-chs": "名稱1,名稱2,名稱3",
17599
"xloc": [
17588
- "default.handlebars->25->1488"
17600
+ "default.handlebars->25->1490"
17601
]
17602
},
17603
{
@@ -17939,7 +17951,7 @@
17951
"zh-chs": "找不到活動",
17952
"xloc": [
17953
"default.handlebars->25->1403",
17942
- "default.handlebars->25->1681",
17954
+ "default.handlebars->25->1684",
17955
"default.handlebars->25->788"
17956
]
17957
},
@@ -18083,7 +18095,7 @@
18095
"ru": "Нет членов",
18096
"zh-chs": "沒有會員",
18097
"xloc": [
18086
- "default.handlebars->25->1537"
18098
+ "default.handlebars->25->1539"
18099
]
18100
},
18101
{
@@ -18100,7 +18112,7 @@
18112
"ru": "Запретить создание групп устройств",
18113
"zh-chs": "沒有新的設備組",
18114
"xloc": [
18103
- "default.handlebars->25->1500"
18115
+ "default.handlebars->25->1502"
18116
]
18117
},
18118
{
@@ -18216,7 +18228,7 @@
18228
"ru": "Нет инструментов (MeshCmd/Router)",
18229
"zh-chs": "沒有工具(MeshCmd /路由器)",
18230
"xloc": [
18219
- "default.handlebars->25->1501"
18231
+ "default.handlebars->25->1503"
18232
]
18233
},
18234
{
@@ -18233,8 +18245,8 @@
18245
"ru": "Нет общих групп устройств",
18246
"zh-chs": "沒有共同的設備組",
18247
"xloc": [
18236
- "default.handlebars->25->1543",
18237
- "default.handlebars->25->1653"
18248
+ "default.handlebars->25->1545",
18249
+ "default.handlebars->25->1656"
18250
]
18251
},
18252
{
@@ -18330,8 +18342,8 @@
18342
"ru": "Нет общих устройств",
18343
"zh-chs": "沒有共同的設備",
18344
"xloc": [
18333
- "default.handlebars->25->1549",
18334
- "default.handlebars->25->1665"
18345
+ "default.handlebars->25->1551",
18346
+ "default.handlebars->25->1668"
18347
]
18348
},
18349
{
@@ -18418,7 +18430,7 @@
18430
"ru": "Группы не найдены.",
18431
"zh-chs": "找不到群組。",
18432
"xloc": [
18421
- "default.handlebars->25->1503"
18433
+ "default.handlebars->25->1505"
18434
]
18435
},
18436
{
@@ -18521,7 +18533,7 @@
18533
"ru": "Нет серверных прав",
18534
"zh-chs": "沒有服務器權限",
18535
"xloc": [
18524
- "default.handlebars->25->1569"
18536
+ "default.handlebars->25->1571"
18537
]
18538
},
18539
{
@@ -18538,7 +18550,7 @@
18550
"ru": "Нет членства в группах пользователей",
18551
"zh-chs": "沒有用戶組成員身份",
18552
"xloc": [
18541
- "default.handlebars->25->1659"
18553
+ "default.handlebars->25->1662"
18554
]
18555
},
18556
{
@@ -18640,13 +18652,13 @@
18652
"default.handlebars->25->1179",
18653
"default.handlebars->25->1354",
18654
"default.handlebars->25->1373",
18643
- "default.handlebars->25->1522",
18655
"default.handlebars->25->1524",
18656
+ "default.handlebars->25->1526",
18657
"default.handlebars->25->158",
18646
- "default.handlebars->25->1582",
18647
- "default.handlebars->25->1591",
18648
- "default.handlebars->25->1595",
18649
- "default.handlebars->25->1607",
18658
+ "default.handlebars->25->1585",
18659
+ "default.handlebars->25->1594",
18660
+ "default.handlebars->25->1598",
18661
+ "default.handlebars->25->1610",
18662
"default.handlebars->25->174",
18663
"default.handlebars->25->175",
18664
"default.handlebars->25->464",
@@ -18806,7 +18818,7 @@
18818
"en": "Not on server",
18819
"nl": "Niet op de server",
18820
"xloc": [
18809
- "default.handlebars->25->1697"
18821
+ "default.handlebars->25->1700"
18822
]
18823
},
18824
{
@@ -18823,7 +18835,7 @@
18835
"ru": "Не задано",
18836
"zh-chs": "沒有設置",
18837
"xloc": [
18826
- "default.handlebars->25->1575"
18838
+ "default.handlebars->25->1577"
18839
]
18840
},
18841
{
@@ -18840,7 +18852,7 @@
18852
"ru": "не подтверждено",
18853
"zh-chs": "未經審核的",
18854
"xloc": [
18843
- "default.handlebars->25->1635"
18855
+ "default.handlebars->25->1638"
18856
]
18857
},
18858
{
@@ -18858,7 +18870,7 @@
18870
"zh-chs": "筆記",
18871
"xloc": [
18872
"default.handlebars->25->1187",
18861
- "default.handlebars->25->1615",
18873
+ "default.handlebars->25->1618",
18874
"default.handlebars->25->536",
18875
"default.handlebars->25->590",
18876
"default.handlebars->25->609",
@@ -18966,7 +18978,7 @@
18978
"ru": "Уведомить",
18979
"zh-chs": "通知",
18980
"xloc": [
18969
- "default.handlebars->25->1621"
18981
+ "default.handlebars->25->1624"
18982
]
18983
},
18984
{
@@ -19080,7 +19092,7 @@
19092
"ru": "Произошло в {0}",
19093
"zh-chs": "發生在{0}",
19094
"xloc": [
19083
- "default.handlebars->25->1711"
19095
+ "default.handlebars->25->1714"
19096
]
19097
},
19098
{
@@ -19325,7 +19337,7 @@
19337
"xloc": [
19338
"default-mobile.handlebars->9->253",
19339
"default.handlebars->25->1442",
19328
- "default.handlebars->25->1511",
19340
+ "default.handlebars->25->1513",
19341
"default.handlebars->25->398",
19342
"default.handlebars->25->629"
19343
]
@@ -19564,7 +19576,7 @@
19576
"ru": "Частичные права",
19577
"zh-chs": "部分權利",
19578
"xloc": [
19567
- "default.handlebars->25->1572"
19579
+ "default.handlebars->25->1574"
19580
]
19581
},
19582
{
@@ -19599,12 +19611,12 @@
19611
"zh-chs": "密碼",
19612
"xloc": [
19613
"default-mobile.handlebars->9->258",
19602
- "default.handlebars->25->1476",
19603
- "default.handlebars->25->1477",
19604
- "default.handlebars->25->1587",
19605
- "default.handlebars->25->1589",
19606
- "default.handlebars->25->1638",
19607
- "default.handlebars->25->1639",
19614
+ "default.handlebars->25->1478",
19615
+ "default.handlebars->25->1479",
19616
+ "default.handlebars->25->1590",
19617
+ "default.handlebars->25->1592",
19618
+ "default.handlebars->25->1641",
19619
+ "default.handlebars->25->1642",
19620
"default.handlebars->25->249",
19621
"default.handlebars->25->278",
19622
"default.handlebars->25->635"
@@ -19713,7 +19725,7 @@
19725
"ru": "Подсказка пароля",
19726
"zh-chs": "密碼提示",
19727
"xloc": [
19716
- "default.handlebars->25->1640"
19728
+ "default.handlebars->25->1643"
19729
]
19730
},
19731
{
@@ -20035,7 +20047,7 @@
20047
"default-mobile.handlebars->9->65",
20048
"default-mobile.handlebars->9->67",
20049
"default.handlebars->25->143",
20038
- "default.handlebars->25->1632",
20050
+ "default.handlebars->25->1635",
20051
"default.handlebars->25->868",
20052
"default.handlebars->25->871"
20053
]
@@ -20050,7 +20062,7 @@
20062
"nl": "Telefoonnummer",
20063
"zh-chs": "电话号码",
20064
"xloc": [
20053
- "default.handlebars->25->1581"
20065
+ "default.handlebars->25->1584"
20066
]
20067
},
20068
{
@@ -20064,7 +20076,7 @@
20076
"zh-chs": "电话号码:",
20077
"xloc": [
20078
"default-mobile.handlebars->9->66",
20067
- "default.handlebars->25->1631",
20079
+ "default.handlebars->25->1634",
20080
"default.handlebars->25->870"
20081
]
20082
},
@@ -20201,7 +20213,7 @@
20213
"zh-chs": "插件動作",
20214
"xloc": [
20215
"default.handlebars->25->169",
20204
- "default.handlebars->25->1787"
20216
+ "default.handlebars->25->1790"
20217
]
20218
},
20219
{
@@ -20519,7 +20531,7 @@
20531
"en": "Present on server",
20532
"nl": "Aanwezig op de server",
20533
"xloc": [
20522
- "default.handlebars->25->1696"
20534
+ "default.handlebars->25->1699"
20535
]
20536
},
20537
{
@@ -20633,7 +20645,7 @@
20645
"ru": "Протокол",
20646
"zh-chs": "協議",
20647
"xloc": [
20636
- "default.handlebars->25->1694",
20648
+ "default.handlebars->25->1697",
20649
"player.handlebars->3->15"
20650
]
20651
},
@@ -20941,7 +20953,7 @@
20953
"ru": "RSS",
20954
"zh-chs": "的RSS",
20955
"xloc": [
20944
- "default.handlebars->25->1757"
20956
+ "default.handlebars->25->1760"
20957
]
20958
},
20959
{
@@ -20958,7 +20970,7 @@
20970
"ru": "Случайный пароль.",
20971
"zh-chs": "隨機化密碼。",
20972
"xloc": [
20961
- "default.handlebars->25->1478"
20973
+ "default.handlebars->25->1480"
20974
]
20975
},
20976
{
@@ -21009,7 +21021,7 @@
21021
"ru": "Области",
21022
"zh-chs": "境界",
21023
"xloc": [
21012
- "default.handlebars->25->1487"
21024
+ "default.handlebars->25->1489"
21025
]
21026
},
21027
{
@@ -21036,7 +21048,7 @@
21048
"en": "Recording Details",
21049
"nl": "Opname details",
21050
"xloc": [
21039
- "default.handlebars->25->1708"
21051
+ "default.handlebars->25->1711"
21052
]
21053
},
21054
{
@@ -21160,7 +21172,7 @@
21172
"ru": "Число ретрансляций",
21173
"zh-chs": "中繼計數",
21174
"xloc": [
21163
- "default.handlebars->25->1739"
21175
+ "default.handlebars->25->1742"
21176
]
21177
},
21178
{
@@ -21177,7 +21189,7 @@
21189
"ru": "Ошибки ретранслятора",
21190
"zh-chs": "中繼錯誤",
21191
"xloc": [
21180
- "default.handlebars->25->1732"
21192
+ "default.handlebars->25->1735"
21193
]
21194
},
21195
{
@@ -21194,8 +21206,8 @@
21206
"ru": "Сессии ретранслятора",
21207
"zh-chs": "接力會議",
21208
"xloc": [
21197
- "default.handlebars->25->1738",
21198
- "default.handlebars->25->1751"
21209
+ "default.handlebars->25->1741",
21210
+ "default.handlebars->25->1754"
21211
]
21212
},
21213
{
@@ -21515,8 +21527,8 @@
21527
"nl": "Apparaatgroepmachtigingen verwijderen",
21528
"zh-chs": "删除设备组权限",
21529
"xloc": [
21518
- "default.handlebars->25->1553",
21519
- "default.handlebars->25->1679"
21530
+ "default.handlebars->25->1555",
21531
+ "default.handlebars->25->1682"
21532
]
21533
},
21534
{
@@ -21530,8 +21542,8 @@
21542
"nl": "Apparaatmachtigingen verwijderen",
21543
"zh-chs": "删除设备权限",
21544
"xloc": [
21533
- "default.handlebars->25->1551",
21534
- "default.handlebars->25->1666"
21545
+ "default.handlebars->25->1553",
21546
+ "default.handlebars->25->1669"
21547
]
21548
},
21549
{
@@ -21559,7 +21571,7 @@
21571
"nl": "Lidmaatschap van gebruikersgroep verwijderen",
21572
"zh-chs": "删除用户组成员身份",
21573
"xloc": [
21562
- "default.handlebars->25->1675"
21574
+ "default.handlebars->25->1678"
21575
]
21576
},
21577
{
@@ -21574,7 +21586,7 @@
21586
"zh-chs": "删除用户组权限",
21587
"xloc": [
21588
"default.handlebars->25->1328",
21577
- "default.handlebars->25->1671"
21589
+ "default.handlebars->25->1674"
21590
]
21591
},
21592
{
@@ -21588,7 +21600,7 @@
21600
"nl": "Gebruikerslidmaatschap verwijderen",
21601
"zh-chs": "删除用户成员资格",
21602
"xloc": [
21591
- "default.handlebars->25->1561"
21603
+ "default.handlebars->25->1563"
21604
]
21605
},
21606
{
@@ -21603,7 +21615,7 @@
21615
"zh-chs": "删除用户权限",
21616
"xloc": [
21617
"default.handlebars->25->1326",
21606
- "default.handlebars->25->1668"
21618
+ "default.handlebars->25->1671"
21619
]
21620
},
21621
{
@@ -21620,7 +21632,7 @@
21632
"ru": "Удалить все двухфакторные аутентификации.",
21633
"zh-chs": "刪除所有第二因素驗證。",
21634
"xloc": [
21623
- "default.handlebars->25->1643"
21635
+ "default.handlebars->25->1646"
21636
]
21637
},
21638
{
@@ -21637,7 +21649,7 @@
21649
"ru": "Удалить все прошлые события для этого userid.",
21650
"zh-chs": "刪除此用戶標識的所有先前事件。",
21651
"xloc": [
21640
- "default.handlebars->25->1479"
21652
+ "default.handlebars->25->1481"
21653
]
21654
},
21655
{
@@ -21718,7 +21730,7 @@
21730
"ru": "Удалить этого пользователя",
21731
"zh-chs": "删除该用户",
21732
"xloc": [
21721
- "default.handlebars->25->1623"
21733
+ "default.handlebars->25->1626"
21734
]
21735
},
21736
{
@@ -21735,7 +21747,7 @@
21747
"ru": "Удалить членство пользователя в группе",
21748
"zh-chs": "刪除用戶組成員身份",
21749
"xloc": [
21738
- "default.handlebars->25->1657"
21750
+ "default.handlebars->25->1660"
21751
]
21752
},
21753
{
@@ -21749,7 +21761,7 @@
21761
"nl": "Gebruikersrechten voor dit apparaat verwijderen",
21762
"zh-chs": "删除此设备的用户组权限",
21763
"xloc": [
21752
- "default.handlebars->25->1547"
21764
+ "default.handlebars->25->1549"
21765
]
21766
},
21767
{
@@ -21766,7 +21778,7 @@
21778
"ru": "Удалить права группы пользователей для этой группы устройств",
21779
"zh-chs": "刪除該設備組的用戶組權限",
21780
"xloc": [
21769
- "default.handlebars->25->1541",
21781
+ "default.handlebars->25->1543",
21782
"default.handlebars->25->574"
21783
]
21784
},
@@ -21785,9 +21797,9 @@
21797
"zh-chs": "刪除此設備組的用戶權限",
21798
"xloc": [
21799
"default.handlebars->25->1204",
21788
- "default.handlebars->25->1535",
21789
- "default.handlebars->25->1651",
21790
- "default.handlebars->25->1663",
21800
+ "default.handlebars->25->1537",
21801
+ "default.handlebars->25->1654",
21802
+ "default.handlebars->25->1666",
21803
"default.handlebars->25->575"
21804
]
21805
},
@@ -21849,8 +21861,8 @@
21861
"zh-chs": "要求:{0}。",
21862
"xloc": [
21863
"default-mobile.handlebars->9->89",
21852
- "default.handlebars->25->1484",
21853
- "default.handlebars->25->1641"
21864
+ "default.handlebars->25->1486",
21865
+ "default.handlebars->25->1644"
21866
]
21867
},
21868
{
@@ -22092,7 +22104,7 @@
22104
"ru": "Ограничения",
22105
"zh-chs": "限制條件",
22106
"xloc": [
22095
- "default.handlebars->25->1573"
22107
+ "default.handlebars->25->1575"
22108
]
22109
},
22110
{
@@ -22315,8 +22327,8 @@
22327
"nl": "SMS",
22328
"zh-chs": "短信",
22329
"xloc": [
22318
- "default.handlebars->25->1612",
22319
- "default.handlebars->25->1617",
22330
+ "default.handlebars->25->1615",
22331
+ "default.handlebars->25->1620",
22332
"login-mobile.handlebars->container->page_content->column_l->1->1->0->1->tokenpanel->1->7->1->4->1->3",
22333
"login.handlebars->container->column_l->centralTable->1->0->logincell->tokenpanel->1->7->1->4->1->3"
22334
]
@@ -22331,7 +22343,7 @@
22343
"nl": "SMS geschikt telefoonnummer voor deze gebruiker.",
22344
"zh-chs": "此用户的短信功能电话号码。",
22345
"xloc": [
22334
- "default.handlebars->25->1629"
22346
+ "default.handlebars->25->1632"
22347
]
22348
},
22349
{
@@ -22735,7 +22747,7 @@
22747
"xloc": [
22748
"default-mobile.handlebars->9->259",
22749
"default-mobile.handlebars->9->345",
22738
- "default.handlebars->25->1613",
22750
+ "default.handlebars->25->1616",
22751
"default.handlebars->25->250",
22752
"default.handlebars->25->636",
22753
"default.handlebars->25->821"
@@ -22755,7 +22767,7 @@
22767
"ru": "Ключ безопасности",
22768
"zh-chs": "安全密鑰",
22769
"xloc": [
22758
- "default.handlebars->25->1610"
22770
+ "default.handlebars->25->1613"
22771
]
22772
},
22773
{
@@ -22791,7 +22803,7 @@
22803
"xloc": [
22804
"default.handlebars->25->1383",
22805
"default.handlebars->25->1440",
22794
- "default.handlebars->25->1509",
22806
+ "default.handlebars->25->1511",
22807
"default.handlebars->25->394",
22808
"default.handlebars->25->751",
22809
"default.handlebars->25->753",
@@ -22819,7 +22831,7 @@
22831
"xloc": [
22832
"default.handlebars->25->1382",
22833
"default.handlebars->25->1439",
22822
- "default.handlebars->25->1508",
22834
+ "default.handlebars->25->1510",
22835
"default.handlebars->25->393",
22836
"default.handlebars->25->752",
22837
"default.handlebars->meshContextMenu->cxselectnone"
@@ -22905,7 +22917,7 @@
22917
"zh-chs": "选择要对所有选定用户执行的操作。",
22918
"xloc": [
22919
"default.handlebars->25->1441",
22908
- "default.handlebars->25->1510"
22920
+ "default.handlebars->25->1512"
22921
]
22922
},
22923
{
@@ -23046,14 +23058,14 @@
23058
"nl": "Stuur een SMS bericht naar deze gebruiker",
23059
"zh-chs": "发送短信给该用户",
23060
"xloc": [
23049
- "default.handlebars->25->1618"
23061
+ "default.handlebars->25->1621"
23062
]
23063
},
23064
{
23065
"en": "Send a email message to this user",
23066
"nl": "Stuur een e-mailbericht naar deze gebruiker",
23067
"xloc": [
23056
- "default.handlebars->25->1620"
23068
+ "default.handlebars->25->1623"
23069
]
23070
},
23071
{
@@ -23070,7 +23082,7 @@
23082
"ru": "Отправить уведомление всем пользователям этой группы.",
23083
"zh-chs": "向該組中的所有用戶發送通知。",
23084
"xloc": [
23073
- "default.handlebars->25->1532"
23085
+ "default.handlebars->25->1534"
23086
]
23087
},
23088
{
@@ -23137,7 +23149,7 @@
23149
"ru": "Отправить приглашение по email.",
23150
"zh-chs": "發送邀請電子郵件。",
23151
"xloc": [
23140
- "default.handlebars->25->1483"
23152
+ "default.handlebars->25->1485"
23153
]
23154
},
23155
{
@@ -23203,7 +23215,7 @@
23215
"ru": "Отправить уведомление пользователю",
23216
"zh-chs": "發送用戶通知",
23217
"xloc": [
23206
- "default.handlebars->25->1622"
23218
+ "default.handlebars->25->1625"
23219
]
23220
},
23221
{
@@ -23255,7 +23267,7 @@
23267
"ru": "Резервное копирование сервера",
23268
"zh-chs": "服務器備份",
23269
"xloc": [
23258
- "default.handlebars->25->1493"
23270
+ "default.handlebars->25->1495"
23271
]
23272
},
23273
{
@@ -23272,7 +23284,7 @@
23284
"ru": "Сертификат сервера",
23285
"zh-chs": "服務器證書",
23286
"xloc": [
23275
- "default.handlebars->25->1767"
23287
+ "default.handlebars->25->1770"
23288
]
23289
},
23290
{
@@ -23289,7 +23301,7 @@
23301
"ru": "База данных сервера",
23302
"zh-chs": "服務器數據庫",
23303
"xloc": [
23292
- "default.handlebars->25->1768"
23304
+ "default.handlebars->25->1771"
23305
]
23306
},
23307
{
@@ -23310,7 +23322,7 @@
23322
"default-mobile.handlebars->9->416",
23323
"default.handlebars->25->1280",
23324
"default.handlebars->25->1308",
23313
- "default.handlebars->25->1490",
23325
+ "default.handlebars->25->1492",
23326
"default.handlebars->25->588",
23327
"default.handlebars->25->607"
23328
]
@@ -23330,7 +23342,7 @@
23342
"zh-chs": "服務器權限",
23343
"xloc": [
23344
"default.handlebars->25->1427",
23333
- "default.handlebars->25->1502"
23345
+ "default.handlebars->25->1504"
23346
]
23347
},
23348
{
@@ -23347,7 +23359,7 @@
23359
"ru": "Квота сервера",
23360
"zh-chs": "服務器配額",
23361
"xloc": [
23350
- "default.handlebars->25->1584"
23362
+ "default.handlebars->25->1587"
23363
]
23364
},
23365
{
@@ -23364,7 +23376,7 @@
23376
"ru": "Восстановление сервера",
23377
"zh-chs": "服務器還原",
23378
"xloc": [
23367
- "default.handlebars->25->1494"
23379
+ "default.handlebars->25->1496"
23380
]
23381
},
23382
{
@@ -23381,7 +23393,7 @@
23393
"ru": "Права",
23394
"zh-chs": "服務器權限",
23395
"xloc": [
23384
- "default.handlebars->25->1583"
23396
+ "default.handlebars->25->1586"
23397
]
23398
},
23399
{
@@ -23398,7 +23410,7 @@
23410
"ru": "Состояние сервера",
23411
"zh-chs": "服務器狀態",
23412
"xloc": [
23401
- "default.handlebars->25->1718"
23413
+ "default.handlebars->25->1721"
23414
]
23415
},
23416
{
@@ -23432,7 +23444,7 @@
23444
"ru": "Трассировка сервера",
23445
"zh-chs": "服務器跟踪",
23446
"xloc": [
23435
- "default.handlebars->25->1778"
23447
+ "default.handlebars->25->1781"
23448
]
23449
},
23450
{
@@ -23449,7 +23461,7 @@
23461
"ru": "Обновление сервера",
23462
"zh-chs": "服務器更新",
23463
"xloc": [
23452
- "default.handlebars->25->1495"
23464
+ "default.handlebars->25->1497"
23465
]
23466
},
23467
{
@@ -23571,7 +23583,7 @@
23583
"ru": "ServerStats.csv",
23584
"zh-chs": "ServerStats.csv",
23585
"xloc": [
23574
- "default.handlebars->25->1759"
23586
+ "default.handlebars->25->1762"
23587
]
23588
},
23589
{
@@ -23612,7 +23624,7 @@
23624
"en": "Session",
23625
"nl": "Sessie",
23626
"xloc": [
23615
- "default.handlebars->25->1682"
23627
+ "default.handlebars->25->1685"
23628
]
23629
},
23630
{
@@ -24151,8 +24163,8 @@
24163
"ru": "Размер",
24164
"zh-chs": "尺寸",
24165
"xloc": [
24154
- "default.handlebars->25->1685",
24155
- "default.handlebars->25->1700",
24166
+ "default.handlebars->25->1688",
24167
+ "default.handlebars->25->1703",
24168
"default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->9->devListToolbarSize"
24169
]
24170
},
@@ -24963,8 +24975,8 @@
24975
"en": "Start Time",
24976
"nl": "Start tijd",
24977
"xloc": [
24966
- "default.handlebars->25->1683",
24967
- "default.handlebars->25->1702",
24978
+ "default.handlebars->25->1686",
24979
+ "default.handlebars->25->1705",
24980
"default.handlebars->25->700"
24981
]
24982
},
@@ -25017,8 +25029,8 @@
25029
"ru": "Статус",
25030
"zh-chs": "狀態",
25031
"xloc": [
25020
- "default.handlebars->25->1634",
25021
- "default.handlebars->25->1695",
25032
+ "default.handlebars->25->1637",
25033
+ "default.handlebars->25->1698",
25034
"default.handlebars->container->column_l->p42->p42tbl->1->0->7"
25035
]
25036
},
@@ -25570,7 +25582,7 @@
25582
"xloc": [
25583
"default-mobile.handlebars->9->162",
25584
"default.handlebars->25->1247",
25573
- "default.handlebars->25->1689",
25585
+ "default.handlebars->25->1692",
25586
"default.handlebars->25->215",
25587
"default.handlebars->25->445",
25588
"default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevTerminal",
@@ -25609,7 +25621,7 @@
25621
"zh-chs": "終端通知",
25622
"xloc": [
25623
"default.handlebars->25->1167",
25612
- "default.handlebars->25->1602",
25624
+ "default.handlebars->25->1605",
25625
"default.handlebars->25->515"
25626
]
25627
},
@@ -25628,7 +25640,7 @@
25640
"zh-chs": "終端提示",
25641
"xloc": [
25642
"default.handlebars->25->1166",
25631
- "default.handlebars->25->1601",
25643
+ "default.handlebars->25->1604",
25644
"default.handlebars->25->514"
25645
]
25646
},
@@ -25772,7 +25784,7 @@
25784
"ru": "На данный момент уведомлений нет",
25785
"zh-chs": "目前沒有任何通知",
25786
"xloc": [
25775
- "default.handlebars->25->1710"
25787
+ "default.handlebars->25->1713"
25788
]
25789
},
25790
{
@@ -27005,9 +27017,9 @@
27017
"default.handlebars->25->1144",
27018
"default.handlebars->25->1145",
27019
"default.handlebars->25->13",
27008
- "default.handlebars->25->1674",
27009
- "default.handlebars->25->1687",
27010
- "default.handlebars->25->1688",
27020
+ "default.handlebars->25->1677",
27021
+ "default.handlebars->25->1690",
27022
+ "default.handlebars->25->1691",
27023
"default.handlebars->25->392",
27024
"default.handlebars->25->41",
27025
"default.handlebars->25->42",
@@ -27052,7 +27064,7 @@
27064
"ru": "Неизвестное действие",
27065
"zh-chs": "未知動作",
27066
"xloc": [
27055
- "default.handlebars->25->1724"
27067
+ "default.handlebars->25->1727"
27068
]
27069
},
27070
{
@@ -27069,8 +27081,8 @@
27081
"ru": "Неизвестное устройство",
27082
"zh-chs": "未知設備",
27083
"xloc": [
27072
- "default.handlebars->25->1546",
27073
- "default.handlebars->25->1662"
27084
+ "default.handlebars->25->1548",
27085
+ "default.handlebars->25->1665"
27086
]
27087
},
27088
{
@@ -27087,9 +27099,9 @@
27099
"ru": "Неизвестная группа устройств",
27100
"zh-chs": "未知設備組",
27101
"xloc": [
27090
- "default.handlebars->25->1540",
27091
- "default.handlebars->25->1650",
27092
- "default.handlebars->25->1728"
27102
+ "default.handlebars->25->1542",
27103
+ "default.handlebars->25->1653",
27104
+ "default.handlebars->25->1731"
27105
]
27106
},
27107
{
@@ -27106,7 +27118,7 @@
27118
"ru": "Неизвестная группа",
27119
"zh-chs": "未知群組",
27120
"xloc": [
27109
- "default.handlebars->25->1720"
27121
+ "default.handlebars->25->1723"
27122
]
27123
},
27124
{
@@ -27141,7 +27153,7 @@
27153
"ru": "Неизвестная группа пользователей",
27154
"zh-chs": "未知用戶組",
27155
"xloc": [
27144
- "default.handlebars->25->1656"
27156
+ "default.handlebars->25->1659"
27157
]
27158
},
27159
{
@@ -27230,7 +27242,7 @@
27242
"ru": "Актуально",
27243
"zh-chs": "最新",
27244
"xloc": [
27233
- "default.handlebars->25->1785"
27245
+ "default.handlebars->25->1788"
27246
]
27247
},
27248
{
@@ -27479,8 +27491,8 @@
27491
"ru": "Использовано",
27492
"zh-chs": "用過的",
27493
"xloc": [
27482
- "default.handlebars->25->1714",
27483
- "default.handlebars->25->1716"
27494
+ "default.handlebars->25->1717",
27495
+ "default.handlebars->25->1719"
27496
]
27497
},
27498
{
@@ -27499,8 +27511,8 @@
27511
"xloc": [
27512
"default.handlebars->25->1205",
27513
"default.handlebars->25->1428",
27502
- "default.handlebars->25->1536",
27503
- "default.handlebars->25->1707",
27514
+ "default.handlebars->25->1538",
27515
+ "default.handlebars->25->1710",
27516
"default.handlebars->25->193",
27517
"default.handlebars->25->577"
27518
]
@@ -27556,7 +27568,7 @@
27568
"ru": "Учетные записи пользователей",
27569
"zh-chs": "用戶帳號",
27570
"xloc": [
27559
- "default.handlebars->25->1733"
27571
+ "default.handlebars->25->1736"
27572
]
27573
},
27574
{
@@ -27593,7 +27605,7 @@
27605
"zh-chs": "用戶同意",
27606
"xloc": [
27607
"default.handlebars->25->1173",
27596
- "default.handlebars->25->1608",
27608
+ "default.handlebars->25->1611",
27609
"default.handlebars->25->521"
27610
]
27611
},
@@ -27613,9 +27625,9 @@
27625
"xloc": [
27626
"default.handlebars->25->1261",
27627
"default.handlebars->25->1262",
27616
- "default.handlebars->25->1517",
27617
- "default.handlebars->25->1658",
27618
- "default.handlebars->25->1677",
27628
+ "default.handlebars->25->1519",
27629
+ "default.handlebars->25->1661",
27630
+ "default.handlebars->25->1680",
27631
"default.handlebars->25->576"
27632
]
27633
},
@@ -27650,7 +27662,7 @@
27662
"ru": "Членство в группах пользователей",
27663
"zh-chs": "用戶組成員資格",
27664
"xloc": [
27653
- "default.handlebars->25->1655"
27665
+ "default.handlebars->25->1658"
27666
]
27667
},
27668
{
@@ -27674,14 +27686,15 @@
27686
"zh-chs": "用戶標識",
27687
"xloc": [
27688
"default.handlebars->25->1322",
27677
- "default.handlebars->25->1578"
27689
+ "default.handlebars->25->1580",
27690
+ "default.handlebars->25->1581"
27691
]
27692
},
27693
{
27694
"en": "User Identifiers",
27695
"xloc": [
27696
"default.handlebars->25->1259",
27684
- "default.handlebars->25->1565"
27697
+ "default.handlebars->25->1567"
27698
]
27699
},
27700
{
@@ -27778,7 +27791,7 @@
27791
"ru": "Сессии пользователя",
27792
"zh-chs": "用戶會話",
27793
"xloc": [
27781
- "default.handlebars->25->1750"
27794
+ "default.handlebars->25->1753"
27795
]
27796
},
27797
{
@@ -27912,7 +27925,7 @@
27925
"zh-chs": "用戶名",
27926
"xloc": [
27927
"default-mobile.handlebars->9->257",
27915
- "default.handlebars->25->1474",
27928
+ "default.handlebars->25->1476",
27929
"default.handlebars->25->247",
27930
"default.handlebars->25->277",
27931
"default.handlebars->25->634",
@@ -27972,9 +27985,9 @@
27985
"ru": "Пользователи",
27986
"zh-chs": "用戶數",
27987
"xloc": [
27975
- "default.handlebars->25->1505",
27976
- "default.handlebars->25->1528",
27977
- "default.handlebars->25->1749",
27988
+ "default.handlebars->25->1507",
27989
+ "default.handlebars->25->1530",
27990
+ "default.handlebars->25->1752",
27991
"default.handlebars->container->topbar->1->1->UsersSubMenuSpan->UsersSubMenu->1->0->UsersGeneral"
27992
]
27993
},
@@ -27992,7 +28005,7 @@
28005
"ru": "Сессии пользователей",
28006
"zh-chs": "用戶會話",
28007
"xloc": [
27995
- "default.handlebars->25->1737"
28008
+ "default.handlebars->25->1740"
28009
]
28010
},
28011
{
@@ -28077,7 +28090,7 @@
28090
"ru": "Проверенный",
28091
"zh-chs": "已驗證",
28092
"xloc": [
28080
- "default.handlebars->25->1636"
28093
+ "default.handlebars->25->1639"
28094
]
28095
},
28096
{
@@ -28181,7 +28194,7 @@
28194
"ru": "Версия несовместима, пожалуйста, сначала обновите установку MeshCentral",
28195
"zh-chs": "版本不兼容,请先升级您的MeshCentral安装",
28196
"xloc": [
28184
- "default.handlebars->25->1781"
28197
+ "default.handlebars->25->1784"
28198
]
28199
},
28200
{
@@ -28249,8 +28262,8 @@
28262
"ru": "Просмотр журнала изменений",
28263
"zh-chs": "查看变更日志",
28264
"xloc": [
28252
- "default.handlebars->25->1784",
28253
- "default.handlebars->25->1786"
28265
+ "default.handlebars->25->1787",
28266
+ "default.handlebars->25->1789"
28267
]
28268
},
28269
{
@@ -28301,7 +28314,7 @@
28314
"ru": "Посмотреть примечания об этом пользователе",
28315
"zh-chs": "查看有關此用戶的註釋",
28316
"xloc": [
28304
- "default.handlebars->25->1616"
28317
+ "default.handlebars->25->1619"
28318
]
28319
},
28320
{
@@ -28508,8 +28521,8 @@
28521
"ru": "Веб-сервер",
28522
"zh-chs": "網絡服務器",
28523
"xloc": [
28511
- "default.handlebars->25->1770",
28512
- "default.handlebars->25->1771"
28524
+ "default.handlebars->25->1773",
28525
+ "default.handlebars->25->1774"
28526
]
28527
},
28528
{
@@ -28526,7 +28539,7 @@
28539
"ru": "Запросы веб-сервера",
28540
"zh-chs": "Web服務器請求",
28541
"xloc": [
28529
- "default.handlebars->25->1772"
28542
+ "default.handlebars->25->1775"
28543
]
28544
},
28545
{
@@ -28543,7 +28556,7 @@
28556
"ru": "Ретранслятор Web Socket",
28557
"zh-chs": "Web套接字中繼",
28558
"xloc": [
28546
- "default.handlebars->25->1773"
28559
+ "default.handlebars->25->1776"
28560
]
28561
},
28562
{
@@ -28648,7 +28661,7 @@
28661
"ru": "Будет изменено при следующем входе в систему.",
28662
"zh-chs": "下次登錄時將更改。",
28663
"xloc": [
28651
- "default.handlebars->25->1588"
28664
+ "default.handlebars->25->1591"
28665
]
28666
},
28667
{
@@ -29601,7 +29614,7 @@
29614
"ru": "\\\\'",
29615
"zh-chs": "\\\\'",
29616
"xloc": [
29604
- "default.handlebars->25->1782"
29617
+ "default.handlebars->25->1785"
29618
]
29619
},
29620
{
@@ -29876,7 +29889,7 @@
29889
"ru": "свободно",
29890
"zh-chs": "自由",
29891
"xloc": [
29879
- "default.handlebars->25->1745"
29892
+ "default.handlebars->25->1748"
29893
]
29894
},
29895
{
@@ -30162,7 +30175,7 @@
30175
"ru": "k max, пусто по умолчанию",
30176
"zh-chs": "k max,默认为空白",
30177
"xloc": [
30165
- "default.handlebars->25->1491"
30178
+ "default.handlebars->25->1493"
30179
]
30180
},
30181
{
@@ -30246,7 +30259,7 @@
30259
"ru": "servertrace.csv",
30260
"zh-chs": "servertrace.csv",
30261
"xloc": [
30249
- "default.handlebars->25->1780"
30262
+ "default.handlebars->25->1783"
30263
]
30264
},
30265
{
@@ -30303,7 +30316,7 @@
30316
"ru": "time, conn.agent, conn.users, conn.usersessions, conn.relaysession, conn.intelamt, mem.external, mem.heapused, mem.heaptotal, mem.rss",
30317
"zh-chs": "時間,conn.agent,conn.users,conn.usersessions,conn.relaysession,conn.intelamt,mem.external,mem.heapused,mem.heaptotal,mem.rss",
30318
"xloc": [
30306
- "default.handlebars->25->1758"
30319
+ "default.handlebars->25->1761"
30320
]
30321
},
30322
{
@@ -30320,7 +30333,7 @@
30333
"ru": "time, source, message",
30334
"zh-chs": "時間,來源,訊息",
30335
"xloc": [
30323
- "default.handlebars->25->1779"
30336
+ "default.handlebars->25->1782"
30337
]
30338
},
30339
{
@@ -30351,7 +30364,7 @@
30364
"ru": "всего",
30365
"zh-chs": "總",
30366
"xloc": [
30354
- "default.handlebars->25->1746"
30367
+ "default.handlebars->25->1749"
30368
]
30369
},
30370
{
@@ -30510,7 +30523,7 @@
30523
"zh-chs": "{0} Kb",
30524
"xloc": [
30525
"default.handlebars->25->1375",
30513
- "default.handlebars->25->1686"
30526
+ "default.handlebars->25->1689"
30527
]
30528
},
30529
{
@@ -30564,7 +30577,7 @@
30577
"ru": "{0} активных сессий",
30578
"zh-chs": "{0}個活動會話",
30579
"xloc": [
30567
- "default.handlebars->25->1628"
30580
+ "default.handlebars->25->1631"
30581
]
30582
},
30583
{
@@ -30600,7 +30613,7 @@
30613
"xloc": [
30614
"default-mobile.handlebars->9->119",
30615
"default.handlebars->25->1385",
30603
- "default.handlebars->25->1701"
30616
+ "default.handlebars->25->1704"
30617
]
30618
},
30619
{
@@ -30658,7 +30671,7 @@
30671
"ru": "{0} групп",
30672
"zh-chs": "{0}個群組",
30673
"xloc": [
30661
- "default.handlebars->25->1593"
30674
+ "default.handlebars->25->1596"
30675
]
30676
},
30677
{
views/default.handlebars
+30
-7
@@ -2866,8 +2866,10 @@
2866
go(xviewmode);
2867
goBackStack.push(2);
2868
} else if (args.gotouser != null) {
2869
- if ((users == null) || (users['user/' + domain + '/' + args.gotouser] == null)) return; // This user is not loaded yet
2870
- gotoUser('user/' + domain + '/' + args.gotouser);
2869
+ var xuserid = args.gotouser;
2870
+ if (args.gotouser.indexOf('/') < 0) { xuserid = 'user/' + domain + '/' + args.gotouser; }
2871
+ if ((users == null) || (users[xuserid] == null)) return; // This user is not loaded yet
2872
+ gotoUser(xuserid);
2873
go(xviewmode);
2874
goBackStack.push(4);
2875
} else if (args.gotougrp != null) {
@@ -10025,7 +10027,7 @@
10027
}
10028
10029
function addUserHtml(user, sessions) {
10028
- var x = '', gray = ' gray', icon = 'm2', msg = '', self = (user.name != userinfo.name), lastAccess = '', permissions = '';
10030
+ var x = '', gray = ' gray', icon = 'm2', msg = '', self = (user._id != userinfo._id), lastAccess = '', permissions = '';
10031
if (sessions != null) {
10032
gray = '';
10033
if (self) {
@@ -10072,6 +10074,12 @@
10074
}
10075
}
10076
10077
+ // If we are a cross-domain administrator, add the domain.
10078
+ if ((userinfo.crossDomain != null)) {
10079
+ var userdomain = user._id.split('/')[1];
10080
+ if (userdomain != '') { username += ', <span style=color:#26F>' + userdomain + '</span>'; }
10081
+ }
10082
+
10083
if ((user.otpsecret > 0) || (user.otphkeys > 0) || ((user.otpekey == 1) && (features & 0x00800000)) || ((user.phone != null) && (features & 0x04000000))) { username += ' <img src="images/key12.png" height=12 width=11 title="' + "2nd factor authentication enabled" + '" style="margin-top:2px" />'; }
10084
if (user.phone != null) { username += ' <img src="images/phone12.png" height=12 width=7 title="' + "Verified phone number" + '" style="margin-top:2px" />'; }
10085
if ((user.siteadmin != null) && ((user.siteadmin & 32) != 0) && (user.siteadmin != 0xFFFFFFFF)) { username += ' <img src="images/padlock12.png" height=12 width=8 title="' + "Account is locked" + '" style="margin-top:2px" />'; }
@@ -10288,6 +10296,14 @@
10296
function showCreateNewAccountDialog() {
10297
if (xxdialogMode) return;
10298
var x = '';
10299
+
10300
+ if (userinfo.crossDomain) {
10301
+ var y = '<select style=width:240px id=p4domain>';
10302
+ for (var i in userinfo.crossDomain) { y += '<option value=' + i + '>' + ((userinfo.crossDomain[i] == '')?"Default":EscapeHtml(userinfo.crossDomain[i])) + '</option>'; }
10303
+ y += '</select>';
10304
+ x += addHtmlValue("Domain", y);
10305
+ }
10306
+
10307
if ((features & 0x200000) == 0) { x += addHtmlValue('<span id=p4hname>' + "Username" + '</span>', '<input id=p4name maxlength=64 autocomplete=username onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />'); }
10308
x += addHtmlValue('<span id=p4hemail>' + "Email" + '</span>', '<input id=p4email maxlength=256 autocomplete="email" inputmode="email" onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />');
10309
x += addHtmlValue('<span id=p4hp1>' + "Password" + '</span>', '<input id=p4pass1 type=password maxlength=256 autocomplete="new-password" onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />');
@@ -10345,6 +10361,7 @@
10361
x.emailVerified = Q('p4verifiedEmail').checked;
10362
x.emailInvitation = Q('p4invitationEmail').checked;
10363
}
10364
+ if (userinfo.crossDomain) { x.domain = userinfo.crossDomain[parseInt(Q('p4domain').value)]; }
10365
meshserver.send(x);
10366
}
10367
@@ -10916,7 +10933,13 @@
10933
if ((args.hide & 8) != 0) { x += '<br />' + addDeviceAttribute("Name", user.name); } // If title bar is hidden, display the user name here
10934
var email = user.email?EscapeHtml(user.email):'<i>' + "Not set" + '</i>', everify = '';
10935
if (serverinfo.emailcheck) { everify = ((user.emailVerified == true) ? '<b style=color:green;cursor:pointer title="' + "Email is verified" + '">✓</b> ' : '<b style=color:red;cursor:pointer title="' + "Email not verified" + '">✗</b> '); }
10919
- if (user.name.toLowerCase() != user._id.split('/')[2]) { x += addDeviceAttribute("User Identifier", user._id.split('/')[2]); }
10936
+
10937
+ if (userinfo.crossDomain) {
10938
+ x += addDeviceAttribute("User Identifier", EscapeHtml(user._id));
10939
+ } else {
10940
+ if (user.name.toLowerCase() != user._id.split('/')[2]) { x += addDeviceAttribute("User Identifier", EscapeHtml(user._id.split('/')[2])); }
10941
+ }
10942
+
10943
if (((user.siteadmin != 0xFFFFFFFF) || (userinfo.siteadmin == 0xFFFFFFFF))) { // If we are not site admin, we can't change a admin email.
10944
x += addDeviceAttribute("Email", everify + email + ' <a href="mailto:' + user.email + '" \'><img class=hoverButton src="images/link1.png" /></a>' + ' <img class=hoverButton style=cursor:pointer src="images/link5.png" onclick=p30showUserEmailChangeDialog(event,"' + userid + '") />');
10945
} else {
@@ -11016,7 +11039,7 @@
11039
// Change the URL
11040
var urlviewmode = '';
11041
if (((features & 0x10000000) == 0) && (xxcurrentView >= 30) && (xxcurrentView <= 39) && (currentUser != null)) {
11019
- urlviewmode = '?viewmode=' + xxcurrentView + '&gotouser=' + currentUser._id.split('/')[2];
11042
+ urlviewmode = '?viewmode=' + xxcurrentView + '&gotouser=' + ((userinfo.crossDomain)?currentUser._id:currentUser._id.split('/')[2]);
11043
for (var i in urlargs) { urlviewmode += ('&' + i + '=' + urlargs[i]); }
11044
try { window.history.replaceState({}, document.title, window.location.pathname + urlviewmode); } catch (ex) { }
11045
}
@@ -12004,7 +12027,7 @@
12027
} else if ((x >= 20) && (x <= 29)) {
12028
if (currentMesh) { window.open(window.location.origin + '{{{domainurl}}}' + '?gotomesh=' + currentMesh._id.split('/')[2] + '&viewmode=' + x + '&hide=16', 'meshcentral:' + currentMesh._id); }
12029
} else if ((x >= 30) && (x <= 39)) {
12007
- if (currentUser) { window.open(window.location.origin + '{{{domainurl}}}' + '?gotouser=' + currentUser._id.split('/')[2] + '&viewmode=' + x + '&hide=16', 'meshcentral:' + currentUser._id); }
12030
+ if (currentUser) { window.open(window.location.origin + '{{{domainurl}}}' + '?gotouser=' + ((userinfo.crossDomain)?currentUser._id:currentUser._id.split('/')[2]) + '&viewmode=' + x + '&hide=16', 'meshcentral:' + currentUser._id); }
12031
} else if ((x >= 50) && (x <= 59)) {
12032
if (currentUserGroup) { window.open(window.location.origin + '{{{domainurl}}}' + '?gotougrp=' + currentUserGroup._id.split('/')[2] + '&viewmode=' + x + '&hide=16', 'meshcentral:' + currentUserGroup._id); }
12033
} else { // if (x < 10))
@@ -12043,7 +12066,7 @@
12066
} else if ((xxcurrentView >= 20) && (xxcurrentView <= 29)) { // Device Group Link
12067
if (currentMesh != null) { urlviewmode = '?viewmode=' + xxcurrentView + '&gotomesh=' + currentMesh._id.split('/')[2]; }
12068
} else if ((xxcurrentView >= 30) && (xxcurrentView <= 39)) { // User Link
12046
- if (currentUser != null) { urlviewmode = '?viewmode=' + xxcurrentView + '&gotouser=' + currentUser._id.split('/')[2]; }
12069
+ if (currentUser != null) { urlviewmode = '?viewmode=' + xxcurrentView + '&gotouser=' + ((userinfo.crossDomain)?currentUser._id:currentUser._id.split('/')[2]); }
12070
} else if ((xxcurrentView >= 51) && (xxcurrentView <= 51)) { // User Group Link
12071
if ((currentUserGroup != null) && (currentUserGroup._id != null)) { urlviewmode = '?viewmode=' + xxcurrentView + '&gotougrp=' + currentUserGroup._id.split('/')[2]; }
12072
} else if (xxcurrentView > 1) { urlviewmode = '?viewmode=' + xxcurrentView; }