Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 8x 8x 8x 8x | import { createError } from '../error/error.service';
import { Container } from '../../../utils/container/index';
import { ConfigService } from '../../services/config/config.service';
function MakeError() {
throw new createError('unauthorized', 'You are unable to fetch data');
}
export class HookService {
static AttachHooks(graphQLFields) {
graphQLFields.forEach(type => {
if (!type) {
return;
}
const resolvers = type.getFields();
Object.keys(resolvers).forEach(resolver => {
resolvers[resolver].scope = resolvers[resolver].scope || [process.env.APP_DEFAULT_SCOPE || 'ADMIN'];
if (!resolvers[resolver].public) {
HookService.AddHooks(resolvers[resolver]);
}
});
});
}
static canAccess(routeScope, context) {
return context && routeScope.filter(scope => scope === context.type).length ? true : MakeError();
}
static AuthenticationHooks(resolver, root, args, context, info) {
HookService.canAccess(resolver.scope, context);
}
static ResolverHooks(resolver, root, args, context, info) {
HookService.AuthenticationHooks(resolver, root, args, context, info);
}
static AddHooks(resolver) {
if (Container.get(ConfigService).cert) {
const resolve = resolver.resolve;
resolver.resolve = async (root, args, context, info) => {
HookService.ResolverHooks(resolver, root, args, context, info);
return await resolve(root, args, context, info);
};
}
}
}
|