const UserError = require('vn-loopback/util/user-error'); module.exports = Self => { Self.remoteMethod('addAlias', { description: 'Add an alias if the user has the grant', accessType: 'WRITE', accepts: [ { arg: 'ctx', type: 'Object', http: {source: 'context'} }, { arg: 'id', type: 'number', required: true, description: 'The user id', http: {source: 'path'} }, { arg: 'mailAlias', type: 'number', description: 'The new alias for user', required: true } ], http: { path: `/:id/addAlias`, verb: 'POST' } }); Self.addAlias = async function(ctx, id, mailAlias, options) { const models = Self.app.models; const userId = ctx.req.accessToken.userId; const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); const user = await Self.findById(userId, {fields: ['hasGrant']}, myOptions); 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'] } } }, myOptions); const aliases = account.aliases().map(alias => alias.mailAlias); const hasAlias = aliases.includes(mailAlias); if (!hasAlias) throw new UserError(`You cannot assign an alias that you are not assigned to`); return models.MailAliasAccount.create({ mailAlias: mailAlias, account: id }, myOptions); }; };