mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Update server.js to trust UserAccounts securely (#2447)
* Update server.js to trust UserAccounts securely * Update zh-cn.json btw * Clarify security logic * update logic * Fix filtering of enabled users. * Fix account name logging * More friendly log * Even friendlier message * Revert deleted keys --------- Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>
This commit is contained in:
57
server.js
57
server.js
@ -609,10 +609,6 @@ const postSetupTasks = async function () {
|
||||
console.warn(color.yellow('Basic Authentication is enabled, but username or password is not set or empty!'));
|
||||
}
|
||||
}
|
||||
|
||||
if (listen && !basicAuthMode && enableAccounts) {
|
||||
await userModule.checkAccountsProtection();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
@ -631,16 +627,6 @@ async function loadPlugins() {
|
||||
}
|
||||
}
|
||||
|
||||
if (listen && !enableWhitelist && !basicAuthMode) {
|
||||
if (getConfigValue('securityOverride', false)) {
|
||||
console.warn(color.red('Security has been overridden. If it\'s not a trusted network, change the settings.'));
|
||||
}
|
||||
else {
|
||||
console.error(color.red('Your SillyTavern is currently unsecurely open to the public. Enable whitelisting or basic authentication.'));
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the title of the terminal window
|
||||
* @param {string} title Desired title for the window
|
||||
@ -654,10 +640,53 @@ function setWindowTitle(title) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints an error message and exits the process if necessary
|
||||
* @param {string} message The error message to print
|
||||
* @returns {void}
|
||||
*/
|
||||
function logSecurityAlert(message) {
|
||||
if (basicAuthMode || enableWhitelist) return; // safe!
|
||||
console.error(color.red(message));
|
||||
if (getConfigValue('securityOverride', false)) {
|
||||
console.warn(color.red('Security has been overridden. If it\'s not a trusted network, change the settings.'));
|
||||
return;
|
||||
}
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
async function verifySecuritySettings() {
|
||||
// Skip all security checks as listen is set to false
|
||||
if (!listen) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!enableAccounts) {
|
||||
logSecurityAlert('Your SillyTavern is currently insecurely open to the public. Enable whitelisting, basic authentication or user accounts.');
|
||||
}
|
||||
|
||||
const users = await userModule.getAllEnabledUsers();
|
||||
const unprotectedUsers = users.filter(x => !x.password);
|
||||
const unprotectedAdminUsers = unprotectedUsers.filter(x => x.admin);
|
||||
|
||||
if (unprotectedUsers.length > 0) {
|
||||
console.warn(color.blue('A friendly reminder that the following users are not password protected:'));
|
||||
unprotectedUsers.map(x => `${color.yellow(x.handle)} ${color.red(x.admin ? '(admin)' : '')}`).forEach(x => console.warn(x));
|
||||
console.log();
|
||||
console.warn(`Consider setting a password in the admin panel or by using the ${color.blue('recover.js')} script.`);
|
||||
console.log();
|
||||
|
||||
if (unprotectedAdminUsers.length > 0) {
|
||||
logSecurityAlert('If you are not using basic authentication or whitelisting, you should set a password for all admin users.');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// User storage module needs to be initialized before starting the server
|
||||
userModule.initUserStorage(dataRoot)
|
||||
.then(userModule.ensurePublicDirectoriesExist)
|
||||
.then(userModule.migrateUserData)
|
||||
.then(verifySecuritySettings)
|
||||
.then(preSetupTasks)
|
||||
.finally(() => {
|
||||
if (cliArguments.ssl) {
|
||||
|
Reference in New Issue
Block a user