const UserError = require('vn-loopback/util/user-error'); module.exports = Self => { require('../methods/account/sync')(Self); require('../methods/account/sync-by-id')(Self); require('../methods/account/sync-all')(Self); require('../methods/account/login')(Self); require('../methods/account/logout')(Self); require('../methods/account/change-password')(Self); require('../methods/account/set-password')(Self); require('../methods/mail-alias-account/addAlias')(Self); require('../methods/mail-alias-account/removeAlias')(Self); /** * Checks if current user has * read privileges over a dms * * @param {Object} ctx - Request context * @param {Interger} mailAlias - mailAlias id * @param {Object} options - Query options * @return {Boolean} True for user with grant */ Self.hasGrant = async function(ctx, mailAlias, options) { const models = Self.app.models; const userId = ctx.req.accessToken.userId; const canEditAlias = await models.ACL.checkAccessAcl(ctx, 'MailAliasAccount', 'canEditAlias', 'WRITE'); if (canEditAlias) return true; const user = await models.VnUser.findById(userId, {fields: ['hasGrant']}, options); if (!user.hasGrant) throw new UserError(`You don't have grant privilege`); const account = await models.Account.findById(userId, { fields: ['id'], include: { relation: 'aliases', scope: { fields: ['mailAlias'] } } }, options); const aliases = account.aliases().map(alias => alias.mailAlias); const hasAlias = aliases.includes(mailAlias); if (!hasAlias) throw new UserError(`You cannot assign/remove an alias that you are not assigned to`); return true; }; };