mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Customizable avatars for users
This commit is contained in:
26
src/users.js
26
src/users.js
@@ -15,6 +15,7 @@ const { getConfigValue, color, delay, setConfigValue, generateTimestamp } = requ
|
||||
const { readSecret, writeSecret } = require('./endpoints/secrets');
|
||||
|
||||
const KEY_PREFIX = 'user:';
|
||||
const AVATAR_PREFIX = 'avatar:';
|
||||
const ENABLE_ACCOUNTS = getConfigValue('enableUserAccounts', false);
|
||||
const ANON_CSRF_SECRET = crypto.randomBytes(64).toString('base64');
|
||||
|
||||
@@ -51,7 +52,7 @@ const STORAGE_KEYS = {
|
||||
* @property {string} handle - The user's short handle. Used for directories and other references
|
||||
* @property {string} name - The user's name. Displayed in the UI
|
||||
* @property {string} avatar - The user's avatar image
|
||||
* @property {boolean} admin - Whether the user is an admin (can manage other users)
|
||||
* @property {boolean} [admin] - Whether the user is an admin (can manage other users)
|
||||
* @property {boolean} password - Whether the user is password protected
|
||||
* @property {boolean} [enabled] - Whether the user is enabled
|
||||
* @property {number} [created] - The timestamp when the user was created
|
||||
@@ -315,6 +316,15 @@ function toKey(handle) {
|
||||
return `${KEY_PREFIX}${handle}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a user handle to a storage key for avatars.
|
||||
* @param {string} handle User handle
|
||||
* @returns {string} The key for the avatar storage
|
||||
*/
|
||||
function toAvatarKey(handle) {
|
||||
return `${AVATAR_PREFIX}${handle}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the user storage. Currently a no-op.
|
||||
* @param {string} dataRoot The root directory for user data
|
||||
@@ -435,10 +445,19 @@ function getUserDirectories(handle) {
|
||||
/**
|
||||
* Gets the avatar URL for the provided user.
|
||||
* @param {string} handle User handle
|
||||
* @returns {string} User avatar URL
|
||||
* @returns {Promise<string>} User avatar URL
|
||||
*/
|
||||
function getUserAvatar(handle) {
|
||||
async function getUserAvatar(handle) {
|
||||
try {
|
||||
// Check if the user has a custom avatar
|
||||
const avatarKey = toAvatarKey(handle);
|
||||
const avatar = await storage.getItem(avatarKey);
|
||||
|
||||
if (avatar) {
|
||||
return avatar;
|
||||
}
|
||||
|
||||
// Fallback to reading from files if custom avatar is not set
|
||||
const directory = getUserDirectories(handle);
|
||||
const pathToSettings = path.join(directory.root, SETTINGS_FILE);
|
||||
const settings = fs.existsSync(pathToSettings) ? JSON.parse(fs.readFileSync(pathToSettings, 'utf8')) : {};
|
||||
@@ -665,6 +684,7 @@ router.use('/scripts/extensions/third-party/*', createRouteHandler(req => req.us
|
||||
module.exports = {
|
||||
KEY_PREFIX,
|
||||
toKey,
|
||||
toAvatarKey,
|
||||
initUserStorage,
|
||||
ensurePublicDirectoriesExist,
|
||||
getAllUserHandles,
|
||||
|
Reference in New Issue
Block a user