Skip to content
Snippets Groups Projects
Commit 472304e5 authored by Diego Sampaio's avatar Diego Sampaio Committed by Gabriel Engel
Browse files

Close #2708 Remove user's avatar from filesystem when deleting the user (#2853)

parent 5809607f
No related branches found
No related tags found
No related merge requests found
......@@ -71,6 +71,7 @@ Package.onUse(function(api) {
// SERVER FUNCTIONS
api.addFiles('server/functions/checkUsernameAvailability.coffee', 'server');
api.addFiles('server/functions/checkEmailAvailability.js', 'server');
api.addFiles('server/functions/deleteUser.js', 'server');
api.addFiles('server/functions/sendMessage.coffee', 'server');
api.addFiles('server/functions/settings.coffee', 'server');
api.addFiles('server/functions/setUsername.coffee', 'server');
......
/* globals RocketChat */
RocketChat.deleteUser = function(userId) {
const user = RocketChat.models.Users.findOneById(userId);
RocketChat.models.Messages.removeByUserId(userId); // Remove user messages
RocketChat.models.Subscriptions.findByUserId(userId).forEach((subscription) => {
let room = RocketChat.models.Rooms.findOneById(subscription.rid);
if (room) {
if (room.t !== 'c' && room.usernames.length === 1) {
RocketChat.models.Rooms.removeById(subscription.rid); // Remove non-channel rooms with only 1 user (the one being deleted)
}
if (room.t === 'd') {
RocketChat.models.Subscriptions.removeByRoomId(subscription.rid);
RocketChat.models.Messages.removeByRoomId(subscription.rid);
}
}
});
RocketChat.models.Subscriptions.removeByUserId(userId); // Remove user subscriptions
RocketChat.models.Rooms.removeByTypeContainingUsername('d', user.username); // Remove direct rooms with the user
RocketChat.models.Rooms.removeUsernameFromAll(user.username); // Remove user from all other rooms
// removes user's avatar
if (user.avatarOrigin === 'upload' || user.avatarOrigin === 'url') {
RocketChatFileAvatarInstance.deleteFile(encodeURIComponent(user.username + '.jpg'));
}
RocketChat.models.Users.removeById(userId); // Remove user from users database
};
......@@ -25,24 +25,7 @@ Meteor.methods({
}
Meteor.defer(function() {
RocketChat.models.Messages.removeByUserId(userId); // Remove user messages
RocketChat.models.Subscriptions.findByUserId(userId).forEach((subscription) => {
let room = RocketChat.models.Rooms.findOneById(subscription.rid);
if (room) {
if (room.t !== 'c' && room.usernames.length === 1) {
RocketChat.models.Rooms.removeById(subscription.rid); // Remove non-channel rooms with only 1 user (the one being deleted)
}
if (room.t === 'd') {
RocketChat.models.Subscriptions.removeByRoomId(subscription.rid);
RocketChat.models.Messages.removeByRoomId(subscription.rid);
}
}
});
RocketChat.models.Subscriptions.removeByUserId(userId); // Remove user subscriptions
RocketChat.models.Rooms.removeByTypeContainingUsername('d', user.username); // Remove direct rooms with the user
RocketChat.models.Rooms.removeUsernameFromAll(user.username); // Remove user from all other rooms
RocketChat.models.Users.removeById(userId); // Remove user from users database
RocketChat.deleteUser(userId);
});
return true;
......
......@@ -12,20 +12,6 @@ Meteor.methods
unless user?
throw new Meteor.Error 'not-found', '[methods] deleteUser -> User not found'
RocketChat.models.Messages.removeByUserId userId # Remove user messages
RocketChat.models.Subscriptions.findByUserId(userId).forEach (subscription) ->
room = RocketChat.models.Rooms.findOneById subscription.rid
if room.t isnt 'c' and room.usernames.length is 1
RocketChat.models.Rooms.removeById subscription.rid # Remove non-channel rooms with only 1 user (the one being deleted)
if room.t is 'd'
RocketChat.models.Subscriptions.removeByRoomId subscription.rid
RocketChat.models.Messages.removeByRoomId subscription.rid
RocketChat.models.Subscriptions.removeByUserId userId # Remove user subscriptions
RocketChat.models.Rooms.removeByTypeContainingUsername 'd', user.username # Remove direct rooms with the user
RocketChat.models.Rooms.removeUsernameFromAll user.username # Remove user from all other rooms
RocketChat.models.Users.removeById userId # Remove user from users database
RocketChat.deleteUser(userId)
return true
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment