mirror of
https://github.com/wassname/talk.git
synced 2026-06-29 03:38:13 +08:00
39 lines
1021 B
JavaScript
39 lines
1021 B
JavaScript
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;
|
|
};
|