You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.0 KiB
JavaScript
82 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
const user = require('../../user');
|
|
const plugins = require('../../plugins');
|
|
|
|
module.exports = function (SocketUser) {
|
|
SocketUser.changePicture = async function (socket, data) {
|
|
if (!socket.uid) {
|
|
throw new Error('[[error:invalid-uid]]');
|
|
}
|
|
|
|
if (!data) {
|
|
throw new Error('[[error:invalid-data]]');
|
|
}
|
|
|
|
const { type } = data;
|
|
let picture = '';
|
|
await user.isAdminOrGlobalModOrSelf(socket.uid, data.uid);
|
|
if (type === 'default') {
|
|
picture = '';
|
|
} else if (type === 'uploaded') {
|
|
picture = await user.getUserField(data.uid, 'uploadedpicture');
|
|
} else {
|
|
const returnData = await plugins.hooks.fire('filter:user.getPicture', {
|
|
uid: socket.uid,
|
|
type: type,
|
|
picture: undefined,
|
|
});
|
|
picture = returnData && returnData.picture;
|
|
}
|
|
|
|
const validBackgrounds = await user.getIconBackgrounds(socket.uid);
|
|
if (!validBackgrounds.includes(data.bgColor)) {
|
|
data.bgColor = validBackgrounds[0];
|
|
}
|
|
|
|
await user.updateProfile(socket.uid, {
|
|
uid: data.uid,
|
|
picture: picture,
|
|
'icon:bgColor': data.bgColor,
|
|
}, ['picture', 'icon:bgColor']);
|
|
};
|
|
|
|
SocketUser.removeUploadedPicture = async function (socket, data) {
|
|
if (!socket.uid || !data || !data.uid) {
|
|
throw new Error('[[error:invalid-data]]');
|
|
}
|
|
await user.isAdminOrSelf(socket.uid, data.uid);
|
|
// 'keepAllUserImages' is ignored, since there is explicit user intent
|
|
const userData = await user.removeProfileImage(data.uid);
|
|
plugins.hooks.fire('action:user.removeUploadedPicture', {
|
|
callerUid: socket.uid,
|
|
uid: data.uid,
|
|
user: userData,
|
|
});
|
|
};
|
|
|
|
SocketUser.getProfilePictures = async function (socket, data) {
|
|
if (!data || !data.uid) {
|
|
throw new Error('[[error:invalid-data]]');
|
|
}
|
|
|
|
const [list, uploaded] = await Promise.all([
|
|
plugins.hooks.fire('filter:user.listPictures', {
|
|
uid: data.uid,
|
|
pictures: [],
|
|
}),
|
|
user.getUserField(data.uid, 'uploadedpicture'),
|
|
]);
|
|
|
|
if (uploaded) {
|
|
list.pictures.push({
|
|
type: 'uploaded',
|
|
url: uploaded,
|
|
text: '[[user:uploaded_picture]]',
|
|
});
|
|
}
|
|
|
|
return list.pictures;
|
|
};
|
|
};
|