mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2025-02-12 11:01:52 +00:00
Added multi-language support for user notifications.
This commit is contained in:
parent
2dfae1dc07
commit
e86459ebf2
3 changed files with 398 additions and 127 deletions
80
meshuser.js
80
meshuser.js
|
@ -488,7 +488,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
const lastLoginTime = parent.users[user._id].pastlogin;
|
const lastLoginTime = parent.users[user._id].pastlogin;
|
||||||
if (lastLoginTime != null) {
|
if (lastLoginTime != null) {
|
||||||
db.GetFailedLoginCount(user.name, user.domain, new Date(lastLoginTime * 1000), function (count) {
|
db.GetFailedLoginCount(user.name, user.domain, new Date(lastLoginTime * 1000), function (count) {
|
||||||
if (count > 0) { try { ws.send(JSON.stringify({ action: 'msg', type: 'notify', title: "Security Warning", tag: 'ServerNotify', id: Math.random(), value: "There has been " + count + " failed login attempts on this account since the last login." })); } catch (ex) { } delete user.pastlogin; }
|
if (count > 0) { try { ws.send(JSON.stringify({ action: 'msg', type: 'notify', title: "Security Warning", tag: 'ServerNotify', id: Math.random(), value: "There has been " + count + " failed login attempts on this account since the last login.", titleid: 3, msgid: 12, args: [count] })); } catch (ex) { } delete user.pastlogin; }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1540,7 +1540,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
db.GetUserWithVerifiedEmail(domain.id, command.email, function (err, docs) {
|
db.GetUserWithVerifiedEmail(domain.id, command.email, function (err, docs) {
|
||||||
if ((docs != null) && (docs.length > 0)) {
|
if ((docs != null) && (docs.length > 0)) {
|
||||||
// Notify the duplicate email error
|
// Notify the duplicate email error
|
||||||
try { ws.send(JSON.stringify({ action: 'msg', type: 'notify', title: 'Account Settings', id: Math.random(), tag: 'ServerNotify', value: 'Failed to change email address, another account already using: ' + command.email + '.' })); } catch (ex) { }
|
try { ws.send(JSON.stringify({ action: 'msg', type: 'notify', title: 'Account Settings', id: Math.random(), tag: 'ServerNotify', value: 'Failed to change email address, another account already using: ' + command.email + '.', titleid: 4, msgid: 13, args: [command.email] })); } catch (ex) { }
|
||||||
} else {
|
} else {
|
||||||
// Update the user's email
|
// Update the user's email
|
||||||
var oldemail = user.email;
|
var oldemail = user.email;
|
||||||
|
@ -1815,7 +1815,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
// Account count exceed, do notification
|
// Account count exceed, do notification
|
||||||
|
|
||||||
// Create the notification message
|
// Create the notification message
|
||||||
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 };
|
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, titleid: 2, msgid: 10 };
|
||||||
|
|
||||||
// Get the list of sessions for this user
|
// Get the list of sessions for this user
|
||||||
var sessions = parent.wssessions[user._id];
|
var sessions = parent.wssessions[user._id];
|
||||||
|
@ -1870,36 +1870,36 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
if (command.randomPassword === true) { command.pass = getRandomPassword(); }
|
if (command.randomPassword === true) { command.pass = getRandomPassword(); }
|
||||||
|
|
||||||
// Add a new user account
|
// Add a new user account
|
||||||
var err = null, newusername, newuserid, newuserdomain;
|
var err = null, errid = 0, newusername, newuserid, newuserdomain;
|
||||||
try {
|
try {
|
||||||
if ((user.siteadmin & 2) == 0) { err = 'Permission denied'; }
|
if ((user.siteadmin & 2) == 0) { err = "Permission denied"; errid = 1; }
|
||||||
else if (common.validateUsername(command.username, 1, 256) == false) { err = 'Invalid username'; } // Username is between 1 and 64 characters, no spaces
|
else if (common.validateUsername(command.username, 1, 256) == false) { err = "Invalid username"; errid = 2; } // Username is between 1 and 64 characters, no spaces
|
||||||
else if ((command.username[0] == '~') || (command.username.indexOf('/') >= 0)) { err = 'Invalid username'; } // Usernames cant' start with ~ and can't have '/'
|
else if ((command.username[0] == '~') || (command.username.indexOf('/') >= 0)) { err = "Invalid username"; errid = 2; } // Usernames cant' start with ~ and can't have '/'
|
||||||
else if (common.validateString(command.pass, 1, 256) == false) { err = 'Invalid password'; } // Password is between 1 and 256 characters
|
else if (common.validateString(command.pass, 1, 256) == false) { err = "Invalid password"; errid = 3; } // Password is between 1 and 256 characters
|
||||||
else if ((command.randomPassword !== true) && (common.checkPasswordRequirements(command.pass, domain.passwordrequirements) == false)) { err = 'Invalid password'; } // Password does not meet requirements
|
else if ((command.randomPassword !== true) && (common.checkPasswordRequirements(command.pass, domain.passwordrequirements) == false)) { err = "Invalid password"; errid = 3; } // Password does not meet requirements
|
||||||
else if ((command.email != null) && (common.validateEmail(command.email, 1, 1024) == false)) { err = 'Invalid email'; } // Check if this is a valid email address
|
else if ((command.email != null) && (common.validateEmail(command.email, 1, 1024) == false)) { err = "Invalid email"; errid = 4; } // Check if this is a valid email address
|
||||||
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
|
else if ((obj.crossDomain === true) && (command.domain != null) && ((typeof command.domain != 'string') || (parent.parent.config.domains[command.domain] == null))) { err = "Invalid domain"; errid = 5; } // Check if this is a valid domain
|
||||||
else {
|
else {
|
||||||
newuserdomain = domain;
|
newuserdomain = domain;
|
||||||
if ((obj.crossDomain === true) && (command.domain != null)) { newuserdomain = parent.parent.config.domains[command.domain]; }
|
if ((obj.crossDomain === true) && (command.domain != null)) { newuserdomain = parent.parent.config.domains[command.domain]; }
|
||||||
newusername = command.username;
|
newusername = command.username;
|
||||||
newuserid = 'user/' + newuserdomain.id + '/' + command.username.toLowerCase();
|
newuserid = 'user/' + newuserdomain.id + '/' + command.username.toLowerCase();
|
||||||
if (command.siteadmin != null) {
|
if (command.siteadmin != null) {
|
||||||
if ((typeof command.siteadmin != 'number') || (Number.isInteger(command.siteadmin) == false)) { err = 'Invalid site permissions'; } // Check permissions
|
if ((typeof command.siteadmin != 'number') || (Number.isInteger(command.siteadmin) == false)) { err = "Invalid site permissions"; errid = 6; } // Check permissions
|
||||||
else if ((user.siteadmin != SITERIGHT_ADMIN) && ((command.siteadmin & (SITERIGHT_ADMIN - 224)) != 0)) { err = 'Invalid site permissions'; }
|
else if ((user.siteadmin != SITERIGHT_ADMIN) && ((command.siteadmin & (SITERIGHT_ADMIN - 224)) != 0)) { err = "Invalid site permissions"; errid = 6; }
|
||||||
}
|
}
|
||||||
if (parent.users[newuserid]) { err = 'User already exists'; } // Account already exists
|
if (parent.users[newuserid]) { err = "User already exists"; errid = 7; } // Account already exists
|
||||||
else if ((newuserdomain.auth == 'sspi') || (newuserdomain.auth == 'ldap')) { err = 'Unable to add user in this mode'; }
|
else if ((newuserdomain.auth == 'sspi') || (newuserdomain.auth == 'ldap')) { err = "Unable to add user in this mode"; errid = 8; }
|
||||||
}
|
}
|
||||||
} catch (ex) { err = 'Validation exception'; }
|
} catch (ex) { err = "Validation exception"; errid = 9; }
|
||||||
|
|
||||||
// Handle any errors
|
// Handle any errors
|
||||||
if (err != null) {
|
if (err != null) {
|
||||||
if (command.responseid != null) {
|
if (command.responseid != null) {
|
||||||
try { ws.send(JSON.stringify({ action: 'adduser', responseid: command.responseid, result: err })); } catch (ex) { }
|
try { ws.send(JSON.stringify({ action: 'adduser', responseid: command.responseid, result: err, msgid: errid })); } catch (ex) { }
|
||||||
} else {
|
} else {
|
||||||
// Send error back, user not found.
|
// Send error back, user not found.
|
||||||
displayNotificationMessage(err, 'New Account', 'ServerNotify');
|
displayNotificationMessage(err, "New Account", 'ServerNotify', null, 1, errid);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1913,7 +1913,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
try { ws.send(JSON.stringify({ action: 'adduser', responseid: command.responseid, result: 'maxUsersExceed' })); } catch (ex) { }
|
try { ws.send(JSON.stringify({ action: 'adduser', responseid: command.responseid, result: 'maxUsersExceed' })); } catch (ex) { }
|
||||||
} else {
|
} else {
|
||||||
// Create the notification message
|
// Create the notification message
|
||||||
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 };
|
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, titleid: 2, msgid: 10 };
|
||||||
|
|
||||||
// Get the list of sessions for this user
|
// Get the list of sessions for this user
|
||||||
var sessions = parent.wssessions[user._id];
|
var sessions = parent.wssessions[user._id];
|
||||||
|
@ -2420,7 +2420,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
|
|
||||||
if (unknownUsers.length > 0) {
|
if (unknownUsers.length > 0) {
|
||||||
// Send error back, user not found.
|
// Send error back, user not found.
|
||||||
displayNotificationMessage('User' + ((unknownUsers.length > 1) ? 's' : '') + ' ' + EscapeHtml(unknownUsers.join(', ')) + ' not found.', 'Device Group', 'ServerNotify');
|
displayNotificationMessage('User' + ((unknownUsers.length > 1) ? 's' : '') + ' ' + EscapeHtml(unknownUsers.join(', ')) + ' not found.', "Device Group", 'ServerNotify', 5, (unknownUsers.length > 1) ? 16 : 15, [EscapeHtml(unknownUsers.join(', '))]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2553,16 +2553,16 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
parent.checkOldUserPasswords(domain, user, command.newpass, function (result) {
|
parent.checkOldUserPasswords(domain, user, command.newpass, function (result) {
|
||||||
if (result == 1) {
|
if (result == 1) {
|
||||||
// Send user notification of error
|
// Send user notification of error
|
||||||
displayNotificationMessage('Error, unable to change to previously used password.', 'Account Settings', 'ServerNotify');
|
displayNotificationMessage("Error, unable to change to previously used password.", "Account Settings", 'ServerNotify', 4, 17);
|
||||||
} else if (result == 2) {
|
} else if (result == 2) {
|
||||||
// Send user notification of error
|
// Send user notification of error
|
||||||
displayNotificationMessage('Error, unable to change to commonly used password.', 'Account Settings', 'ServerNotify');
|
displayNotificationMessage("Error, unable to change to commonly used password.", "Account Settings", 'ServerNotify', 4, 18);
|
||||||
} else {
|
} else {
|
||||||
// Update the password
|
// Update the password
|
||||||
require('./pass').hash(command.newpass, function (err, salt, hash, tag) {
|
require('./pass').hash(command.newpass, function (err, salt, hash, tag) {
|
||||||
if (err) {
|
if (err) {
|
||||||
// Send user notification of error
|
// Send user notification of error
|
||||||
displayNotificationMessage('Error, password not changed.', 'Account Settings', 'ServerNotify');
|
displayNotificationMessage("Error, password not changed.", "Account Settings", 'ServerNotify', 4, 19);
|
||||||
} else {
|
} else {
|
||||||
const nowSeconds = Math.floor(Date.now() / 1000);
|
const nowSeconds = Math.floor(Date.now() / 1000);
|
||||||
|
|
||||||
|
@ -2592,7 +2592,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
parent.parent.DispatchEvent(targets, obj, event);
|
parent.parent.DispatchEvent(targets, obj, event);
|
||||||
|
|
||||||
// Send user notification of password change
|
// Send user notification of password change
|
||||||
displayNotificationMessage('Password changed.', 'Account Settings', 'ServerNotify');
|
displayNotificationMessage("Password changed.", "Account Settings", 'ServerNotify', 4, 20);
|
||||||
|
|
||||||
// Log in the auth log
|
// Log in the auth log
|
||||||
if (parent.parent.authlog) { parent.parent.authLog('https', 'User ' + user.name + ' changed this password'); }
|
if (parent.parent.authlog) { parent.parent.authLog('https', 'User ' + user.name + ' changed this password'); }
|
||||||
|
@ -2602,7 +2602,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// Send user notification of error
|
// Send user notification of error
|
||||||
displayNotificationMessage('Current password not correct.', 'Account Settings', 'ServerNotify');
|
displayNotificationMessage("Current password not correct.", "Account Settings", 'ServerNotify', 4, 21);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
@ -2699,7 +2699,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
|
|
||||||
// Create the notification message
|
// Create the notification message
|
||||||
var notification = {
|
var notification = {
|
||||||
'action': 'msg', 'type': 'notify', id: Math.random(), 'value': "Chat Request, Click here to accept.", 'title': user.name, 'userid': user._id, 'username': user.name, 'tag': 'meshmessenger/' + encodeURIComponent(command.userid) + '/' + encodeURIComponent(user._id)
|
'action': 'msg', 'type': 'notify', id: Math.random(), 'value': "Chat Request, Click here to accept.", 'title': user.name, 'userid': user._id, 'username': user.name, 'tag': 'meshmessenger/' + encodeURIComponent(command.userid) + '/' + encodeURIComponent(user._id), msgid: 11
|
||||||
};
|
};
|
||||||
|
|
||||||
// Get the list of sessions for this user
|
// Get the list of sessions for this user
|
||||||
|
@ -2977,7 +2977,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
}
|
}
|
||||||
if (dup != null) {
|
if (dup != null) {
|
||||||
// A duplicate was found, don't allow this change.
|
// A duplicate was found, don't allow this change.
|
||||||
displayNotificationMessage('Error, invite code \"' + dup + '\" already in use.', 'Invite Codes');
|
displayNotificationMessage("Error, invite code \"" + dup + "\" already in use.", "Invite Codes", null, 6, 22, [ dup ]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mesh.invite = { codes: command.invite.codes, flags: command.invite.flags };
|
mesh.invite = { codes: command.invite.codes, flags: command.invite.flags };
|
||||||
|
@ -3123,7 +3123,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
|
|
||||||
if (unknownUsers.length > 0) {
|
if (unknownUsers.length > 0) {
|
||||||
// Send error back, user not found.
|
// Send error back, user not found.
|
||||||
displayNotificationMessage('User' + ((unknownUsers.length > 1) ? 's' : '') + ' ' + EscapeHtml(unknownUsers.join(', ')) + ' not found.', 'Device Group', 'ServerNotify');
|
displayNotificationMessage('User' + ((unknownUsers.length > 1) ? 's' : '') + ' ' + EscapeHtml(unknownUsers.join(', ')) + ' not found.', "Device Group", 'ServerNotify', 5, (unknownUsers.length > 1) ? 16 : 15, [EscapeHtml(unknownUsers.join(', '))]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (command.responseid != null) { try { ws.send(JSON.stringify({ action: 'addmeshuser', responseid: command.responseid, result: msgs.join(', '), success: successCount, failed: failCount })); } catch (ex) { } }
|
if (command.responseid != null) { try { ws.send(JSON.stringify({ action: 'addmeshuser', responseid: command.responseid, result: msgs.join(', '), success: successCount, failed: failCount })); } catch (ex) { } }
|
||||||
|
@ -4489,24 +4489,24 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'smsuser': { // Send a SMS message to a user
|
case 'smsuser': { // Send a SMS message to a user
|
||||||
var errMsg = null, smsuser = null;
|
var errMsg = null, errId = 0, smsuser = null;
|
||||||
if (parent.parent.smsserver == null) { errMsg = 'SMS gateway not enabled'; }
|
if (parent.parent.smsserver == null) { errMsg = "SMS gateway not enabled"; errId = 23; }
|
||||||
else if ((user.siteadmin & 2) == 0) { errMsg = 'No user management rights'; }
|
else if ((user.siteadmin & 2) == 0) { errMsg = "No user management rights"; errId = 24; }
|
||||||
else if (common.validateString(command.userid, 1, 2048) == false) { errMsg = 'Invalid userid'; }
|
else if (common.validateString(command.userid, 1, 2048) == false) { errMsg = "Invalid username"; errId = 2; }
|
||||||
else if (common.validateString(command.msg, 1, 160) == false) { errMsg = 'Invalid SMS message'; }
|
else if (common.validateString(command.msg, 1, 160) == false) { errMsg = "Invalid SMS message"; errId = 25; }
|
||||||
else {
|
else {
|
||||||
smsuser = parent.users[command.userid];
|
smsuser = parent.users[command.userid];
|
||||||
if (smsuser == null) { errMsg = 'Invalid userid'; }
|
if (smsuser == null) { errMsg = "Invalid username"; errId = 2; }
|
||||||
else if (smsuser.phone == null) { errMsg = 'No phone number for this user'; }
|
else if (smsuser.phone == null) { errMsg = "No phone number for this user"; errId = 26; }
|
||||||
}
|
}
|
||||||
|
|
||||||
if (errMsg != null) { displayNotificationMessage(errMsg); break; }
|
if (errMsg != null) { displayNotificationMessage(errMsg); break; }
|
||||||
|
|
||||||
parent.parent.smsserver.sendSMS(smsuser.phone, command.msg, function (success, msg) {
|
parent.parent.smsserver.sendSMS(smsuser.phone, command.msg, function (success, msg) {
|
||||||
if (success) {
|
if (success) {
|
||||||
displayNotificationMessage('SMS succesfuly sent.');
|
displayNotificationMessage("SMS succesfuly sent.", null, null, null, 27);
|
||||||
} else {
|
} else {
|
||||||
if (typeof msg == 'string') { displayNotificationMessage('SMS error: ' + msg); } else { displayNotificationMessage('SMS error'); }
|
if (typeof msg == 'string') { displayNotificationMessage("SMS error: " + msg, null, null, null, 29, [msg]); } else { displayNotificationMessage("SMS error", null, null, null, 28); }
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
@ -4527,7 +4527,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
|
|
||||||
if (errMsg != null) { displayNotificationMessage(errMsg); break; }
|
if (errMsg != null) { displayNotificationMessage(errMsg); break; }
|
||||||
parent.parent.mailserver.sendMail(emailuser.email, command.subject, command.msg);
|
parent.parent.mailserver.sendMail(emailuser.email, command.subject, command.msg);
|
||||||
displayNotificationMessage("Email sent.");
|
displayNotificationMessage("Email sent.", null, null, null, 14);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'getClip': {
|
case 'getClip': {
|
||||||
|
@ -5105,7 +5105,9 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display a notification message for this session only.
|
// Display a notification message for this session only.
|
||||||
function displayNotificationMessage(msg, title, tag) { ws.send(JSON.stringify({ 'action': 'msg', 'type': 'notify', id: Math.random(), 'value': msg, 'title': title, 'userid': user._id, 'username': user.name, 'tag': tag })); }
|
function displayNotificationMessage(msg, title, tag, titleid, msgid, args) {
|
||||||
|
ws.send(JSON.stringify({ 'action': 'msg', 'type': 'notify', id: Math.random(), 'value': msg, 'title': title, 'userid': user._id, 'username': user.name, 'tag': tag, 'titleid': titleid, 'msgid': msgid, 'args': args }));
|
||||||
|
}
|
||||||
|
|
||||||
// Read the folder and all sub-folders and serialize that into json.
|
// Read the folder and all sub-folders and serialize that into json.
|
||||||
function readFilesRec(path) {
|
function readFilesRec(path) {
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -2185,7 +2185,7 @@
|
||||||
else if (message.type == 'notify') { // This is a notification message.
|
else if (message.type == 'notify') { // This is a notification message.
|
||||||
var n = getstore('notifications', 0);
|
var n = getstore('notifications', 0);
|
||||||
if (((n & 8) == 0) && (message.amtMessage != null)) { break; } // Intel AMT desktop & terminal messages should be ignored.
|
if (((n & 8) == 0) && (message.amtMessage != null)) { break; } // Intel AMT desktop & terminal messages should be ignored.
|
||||||
var n = { text: message.value, title: message.title, icon: message.icon };
|
var n = { text: message.value, title: message.title, icon: message.icon, titleid: message.titleid, msgid: message.msgid, args: message.args };
|
||||||
if (message.id != null) { n.id = message.id; }
|
if (message.id != null) { n.id = message.id; }
|
||||||
if (message.nodeid != null) { n.nodeid = message.nodeid; }
|
if (message.nodeid != null) { n.nodeid = message.nodeid; }
|
||||||
if (message.tag != null) { n.tag = message.tag; }
|
if (message.tag != null) { n.tag = message.tag; }
|
||||||
|
@ -2226,7 +2226,7 @@
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (message.type == 'notify') { // This is a notification message.
|
if (message.type == 'notify') { // This is a notification message.
|
||||||
var n = { text: message.value, title: message.title, icon: message.icon };
|
var n = { text: message.value, title: message.title, icon: message.icon, titleid: message.titleid, msgid: message.msgid, args: message.args };
|
||||||
if (message.id != null) { n.id = message.id; }
|
if (message.id != null) { n.id = message.id; }
|
||||||
if (message.tag != null) { n.tag = message.tag; }
|
if (message.tag != null) { n.tag = message.tag; }
|
||||||
if (message.username != null) { n.username = message.username; }
|
if (message.username != null) { n.username = message.username; }
|
||||||
|
@ -3027,7 +3027,7 @@
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'notify': {
|
case 'notify': {
|
||||||
var n = { text: message.event.value, title: message.event.title, icon: message.event.icon };
|
var n = { text: message.event.value, title: message.event.title, icon: message.event.icon, titleid: message.titleid, msgid: message.msgid, args: message.args };
|
||||||
if (message.id != null) { n.id = message.id; }
|
if (message.id != null) { n.id = message.id; }
|
||||||
if (message.event.tag != null) { n.tag = message.event.tag; }
|
if (message.event.tag != null) { n.tag = message.event.tag; }
|
||||||
if (typeof message.maxtime == 'number') { n.maxtime = message.maxtime; }
|
if (typeof message.maxtime == 'number') { n.maxtime = message.maxtime; }
|
||||||
|
@ -13168,6 +13168,51 @@
|
||||||
|
|
||||||
// Add a new notification and play the notification sound
|
// Add a new notification and play the notification sound
|
||||||
function addNotification(n) {
|
function addNotification(n) {
|
||||||
|
// Perform message translation
|
||||||
|
var translatedTitles = [
|
||||||
|
null,
|
||||||
|
"New Account", // 1
|
||||||
|
"Server Limit",
|
||||||
|
"Security Warning",
|
||||||
|
"Account Settings",
|
||||||
|
"Device Group",
|
||||||
|
"Invite Codes"
|
||||||
|
];
|
||||||
|
var translatedMessages = [
|
||||||
|
null,
|
||||||
|
"Permission denied", // 1
|
||||||
|
"Invalid username",
|
||||||
|
"Invalid password",
|
||||||
|
"Invalid email",
|
||||||
|
"Invalid domain",
|
||||||
|
"Invalid site permissions",
|
||||||
|
"User already exists",
|
||||||
|
"Unable to add user in this mode",
|
||||||
|
"Validation exception",
|
||||||
|
"Account limit reached.", // 10
|
||||||
|
"Chat Request, Click here to accept.",
|
||||||
|
"There has been {0} failed login attempts on this account since the last login.",
|
||||||
|
"Failed to change email address, another account already using: {0}.",
|
||||||
|
"Email sent.",
|
||||||
|
"User {0} not found.",
|
||||||
|
"Users {0} not found.",
|
||||||
|
"Error, unable to change to previously used password.",
|
||||||
|
"Error, unable to change to commonly used password.",
|
||||||
|
"Error, password not changed.",
|
||||||
|
"Password changed.", // 20
|
||||||
|
"Current password not correct.",
|
||||||
|
"Error, invite code \"{0}\" already in use.",
|
||||||
|
"SMS gateway not enabled",
|
||||||
|
"No user management rights",
|
||||||
|
"Invalid SMS message",
|
||||||
|
"No phone number for this user",
|
||||||
|
"SMS succesfuly sent.",
|
||||||
|
"SMS error",
|
||||||
|
"SMS error: {0}"
|
||||||
|
];
|
||||||
|
if (typeof n.titleid == 'number') { try { n.title = translatedTitles[n.titleid]; } catch (ex) {} }
|
||||||
|
if (typeof n.msgid == 'number') { try { n.text = translatedMessages[n.msgid]; if (Array.isArray(n.args)) { format(n.text, ...n.args); } } catch (ex) {} }
|
||||||
|
|
||||||
// Show notification within the web page.
|
// Show notification within the web page.
|
||||||
if (n.time == null) { n.time = Date.now(); }
|
if (n.time == null) { n.time = Date.now(); }
|
||||||
if (n.id == null) { n.id = Math.random(); }
|
if (n.id == null) { n.id = Math.random(); }
|
||||||
|
|
Loading…
Reference in a new issue