import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; import { hasPermission } from '../../app/authorization'; import { Users, Subscriptions, Messages } from '../../app/models'; import { settings } from '../../app/settings'; import { api } from '../sdk/api'; import { Team } from '../sdk'; Meteor.methods({ removeRoomModerator(rid, userId) { check(rid, String); check(userId, String); if (!Meteor.userId()) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'removeRoomModerator', }); } if (!hasPermission(Meteor.userId(), 'set-moderator', rid)) { throw new Meteor.Error('error-not-allowed', 'Not allowed', { method: 'removeRoomModerator', }); } const user = Users.findOneById(userId); if (!user || !user.username) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'removeRoomModerator', }); } const subscription = Subscriptions.findOneByRoomIdAndUserId(rid, user._id); if (!subscription) { throw new Meteor.Error('error-invalid-room', 'Invalid room', { method: 'removeRoomModerator', }); } if (Array.isArray(subscription.roles) === false || subscription.roles.includes('moderator') === false) { throw new Meteor.Error('error-user-not-moderator', 'User is not a moderator', { method: 'removeRoomModerator', }); } Subscriptions.removeRoleById(subscription._id, 'moderator'); const fromUser = Users.findOneById(Meteor.userId()); Messages.createSubscriptionRoleRemovedWithRoomIdAndUser(rid, user, { u: { _id: fromUser._id, username: fromUser.username, }, role: 'moderator', }); const team = Promise.await(Team.getOneByMainRoomId(rid)); if (team) { Promise.await(Team.removeRolesFromMember(team._id, userId, ['moderator'])); } if (settings.get('UI_DisplayRoles')) { api.broadcast('user.roleUpdate', { type: 'removed', _id: 'moderator', u: { _id: user._id, username: user.username, name: user.name, }, scope: rid, }); } return true; }, });