mirror of
https://github.com/wassname/talk.git
synced 2026-06-29 02:00:29 +08:00
62 lines
1.9 KiB
JavaScript
62 lines
1.9 KiB
JavaScript
const errors = require('../../errors');
|
|
const UsersService = require('../../services/users');
|
|
const {SET_USER_STATUS, SUSPEND_USER, REJECT_USERNAME} = require('../../perms/constants');
|
|
|
|
const setUserStatus = async ({user, pubsub}, {id, status}) => {
|
|
const result = await UsersService.setStatus(id, status);
|
|
if (result && result.status === 'BANNED') {
|
|
pubsub.publish('userBanned', result);
|
|
}
|
|
return result;
|
|
};
|
|
|
|
const suspendUser = async ({user, pubsub}, {id, message, until}) => {
|
|
const result = await UsersService.suspendUser(id, message, until);
|
|
if (result) {
|
|
pubsub.publish('userSuspended', result);
|
|
}
|
|
return result;
|
|
};
|
|
|
|
const rejectUsername = async ({user, pubsub}, {id, message}) => {
|
|
const result = await UsersService.rejectUsername(id, message);
|
|
if (result) {
|
|
pubsub.publish('usernameRejected', result);
|
|
}
|
|
return result;
|
|
};
|
|
|
|
const ignoreUser = ({user}, userToIgnore) => {
|
|
return UsersService.ignoreUsers(user.id, [userToIgnore.id]);
|
|
};
|
|
|
|
const stopIgnoringUser = ({user}, userToStopIgnoring) => {
|
|
return UsersService.stopIgnoringUsers(user.id, [userToStopIgnoring.id]);
|
|
};
|
|
|
|
module.exports = (context) => {
|
|
let mutators = {
|
|
User: {
|
|
setUserStatus: () => Promise.reject(errors.ErrNotAuthorized),
|
|
suspendUser: () => Promise.reject(errors.ErrNotAuthorized),
|
|
rejectUsername: () => Promise.reject(errors.ErrNotAuthorized),
|
|
ignoreUser: (action) => ignoreUser(context, action),
|
|
stopIgnoringUser: (action) => stopIgnoringUser(context, action),
|
|
}
|
|
};
|
|
|
|
if (context.user && context.user.can(SET_USER_STATUS)) {
|
|
mutators.User.setUserStatus = (action) => setUserStatus(context, action);
|
|
}
|
|
|
|
if (context.user && context.user.can(SUSPEND_USER)) {
|
|
mutators.User.suspendUser = (action) => suspendUser(context, action);
|
|
}
|
|
|
|
if (context.user && context.user.can(REJECT_USERNAME)) {
|
|
mutators.User.rejectUsername = (action) => rejectUsername(context, action);
|
|
}
|
|
|
|
return mutators;
|
|
};
|