const errors = require('../../errors'); const TokensService = require('../../services/tokens'); const { CREATE_TOKEN, REVOKE_TOKEN } = require('../../perms/constants'); // Creates a new token for a user. const createToken = async ({user}, {name}) => { let {pat, jwt} = await TokensService.create(user.id, name); // Attach the token to the PAT. pat.jwt = jwt; // Return that PAT! return pat; }; // Revokes the token from the user. const revokeToken = async ({user}, {id}) => { return TokensService.revoke(user.id, id); }; module.exports = (context) => { let mutators = { Token: { create: () => Promise.reject(errors.ErrNotAuthorized), revoke: () => Promise.reject(errors.ErrNotAuthorized) } }; if (context.user && context.user.can(CREATE_TOKEN)) { mutators.Token.create = (input) => createToken(context, input); } if (context.user && context.user.can(REVOKE_TOKEN)) { mutators.Token.revoke = (input) => revokeToken(context, input); } return mutators; };