From 1f71339a642d0bd0d0e099c83223e8ccd6db0a7a Mon Sep 17 00:00:00 2001 From: Pascal Kosak <pascal.kosak@ruhr-uni-bochum.de> Date: Thu, 2 Sep 2021 15:30:39 +0200 Subject: [PATCH] Codestyle and Linting fixes, GraphQL Subscription Auth --- src/app.module.ts | 15 ++++-- src/auth/agent-auth.guard.ts | 4 +- ...phql-auth.guard.ts => group-auth.guard.ts} | 4 +- src/main.ts | 2 +- src/resolvers/agent.resolver.ts | 2 +- src/resolvers/entry.resolver.ts | 2 +- src/resolvers/group.resolver.ts | 6 +-- src/resolvers/resolver.module.ts | 2 +- ...ode.resolver.ts => token-code.resolver.ts} | 52 ++++++++++--------- src/telegram/telegram.service.ts | 19 ++++--- 10 files changed, 60 insertions(+), 48 deletions(-) rename src/auth/{graphql-auth.guard.ts => group-auth.guard.ts} (92%) rename src/resolvers/{tokenCode.resolver.ts => token-code.resolver.ts} (70%) diff --git a/src/app.module.ts b/src/app.module.ts index 7c7d319..b076a4b 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,9 +1,9 @@ -import { Module } from '@nestjs/common'; +import { ForbiddenException, Module, NotFoundException } from '@nestjs/common'; import { PrismaModule } from './prisma/prisma.module'; import { TelegramModule } from './telegram/telegram.module'; import { GraphQLModule } from '@nestjs/graphql'; import { ResolverModule } from './resolvers/resolver.module'; -import { GroupAuthGuard } from './auth/graphql-auth.guard'; +import { GroupAuthGuard } from './auth/group-auth.guard'; import { ImageController } from './images.controller'; import { WebAuthGuard } from './auth/web-auth.guard'; @@ -16,8 +16,15 @@ import { WebAuthGuard } from './auth/web-auth.guard'; autoSchemaFile: true, playground: true, installSubscriptionHandlers: true, - context: ({ request }) => ({ - req: request, + subscriptions: { + 'subscriptions-transport-ws': { + onConnect: (headers) => ({ + token: headers['Authorization'], + }), + }, + }, + context: (ctx) => ({ + req: ctx.request || ctx.req, }), }), ], diff --git a/src/auth/agent-auth.guard.ts b/src/auth/agent-auth.guard.ts index ebabd4b..87b1299 100644 --- a/src/auth/agent-auth.guard.ts +++ b/src/auth/agent-auth.guard.ts @@ -20,8 +20,6 @@ export class AgentAuthGuard implements CanActivate { where: { id: token }, }); - if (!req.agent) return false; - - return true; + return !!req.agent; } } diff --git a/src/auth/graphql-auth.guard.ts b/src/auth/group-auth.guard.ts similarity index 92% rename from src/auth/graphql-auth.guard.ts rename to src/auth/group-auth.guard.ts index 95ae5a8..3ec093a 100644 --- a/src/auth/graphql-auth.guard.ts +++ b/src/auth/group-auth.guard.ts @@ -20,8 +20,6 @@ export class GroupAuthGuard implements CanActivate { where: { code: token }, }); - if (!req.group) return false; - - return true; + return !!req.group; } } diff --git a/src/main.ts b/src/main.ts index 66614b2..bc9cbd4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,5 +1,5 @@ import { NestFactory } from '@nestjs/core'; -import { Group, Agent, TokenCode } from '@prisma/client'; +import { Group, Agent } from '@prisma/client'; declare module 'express' { interface Request { diff --git a/src/resolvers/agent.resolver.ts b/src/resolvers/agent.resolver.ts index 843b0fe..ee01185 100644 --- a/src/resolvers/agent.resolver.ts +++ b/src/resolvers/agent.resolver.ts @@ -10,7 +10,7 @@ import { Agent } from './models/agent.model'; import { PrismaService } from '../prisma/prisma.service'; import { GraphQLString } from 'graphql'; import { NotFoundException, UseGuards } from '@nestjs/common'; -import { GroupAuthGuard } from '../auth/graphql-auth.guard'; +import { GroupAuthGuard } from '../auth/group-auth.guard'; import { Request } from 'express'; @Resolver(() => Agent) diff --git a/src/resolvers/entry.resolver.ts b/src/resolvers/entry.resolver.ts index 22af1ec..a2ff9e8 100644 --- a/src/resolvers/entry.resolver.ts +++ b/src/resolvers/entry.resolver.ts @@ -16,7 +16,7 @@ import { UseGuards, } from '@nestjs/common'; import { Request } from 'express'; -import { GroupAuthGuard } from '../auth/graphql-auth.guard'; +import { GroupAuthGuard } from '../auth/group-auth.guard'; import { pubSub } from '../pubSub.instance'; @Resolver(() => Entry) diff --git a/src/resolvers/group.resolver.ts b/src/resolvers/group.resolver.ts index 2ebf54d..af7bc5d 100644 --- a/src/resolvers/group.resolver.ts +++ b/src/resolvers/group.resolver.ts @@ -13,7 +13,7 @@ import { PrismaService } from '../prisma/prisma.service'; import { GraphQLString } from 'graphql'; import * as seedWords from 'mnemonic-words'; import { NotFoundException, UseGuards } from '@nestjs/common'; -import { GroupAuthGuard } from '../auth/graphql-auth.guard'; +import { GroupAuthGuard } from '../auth/group-auth.guard'; import { Request } from 'express'; import { pubSub } from '../pubSub.instance'; import { AgentAuthGuard } from 'src/auth/agent-auth.guard'; @@ -23,8 +23,8 @@ export class GroupResolver { constructor(private prismaService: PrismaService) {} @Subscription(() => Group, { - filter: (payload, variables) => - payload.updateToken.code === variables.code, + filter: (payload, variables, state) => + payload.updateToken.code === state.token, }) // eslint-disable-next-line @typescript-eslint/no-unused-vars updateToken(@Args('code') code: string) { diff --git a/src/resolvers/resolver.module.ts b/src/resolvers/resolver.module.ts index dba4f82..5df537d 100644 --- a/src/resolvers/resolver.module.ts +++ b/src/resolvers/resolver.module.ts @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common'; import { GroupResolver } from './group.resolver'; import { EntryResolver } from './entry.resolver'; import { AgentResolver } from './agent.resolver'; -import { TokenCodeResolver } from './tokenCode.resolver'; +import { TokenCodeResolver } from './token-code.resolver'; @Module({ providers: [GroupResolver, EntryResolver, AgentResolver, TokenCodeResolver], diff --git a/src/resolvers/tokenCode.resolver.ts b/src/resolvers/token-code.resolver.ts similarity index 70% rename from src/resolvers/tokenCode.resolver.ts rename to src/resolvers/token-code.resolver.ts index 73bfd95..684c17c 100644 --- a/src/resolvers/tokenCode.resolver.ts +++ b/src/resolvers/token-code.resolver.ts @@ -1,23 +1,30 @@ -import { UseGuards, NotFoundException } from "@nestjs/common"; -import { Args, Context, Mutation, Parent, ResolveField, Resolver, Subscription } from "@nestjs/graphql"; +import { UseGuards, NotFoundException } from '@nestjs/common'; +import { + Args, + Context, + Mutation, + Parent, + ResolveField, + Resolver, + Subscription, +} from '@nestjs/graphql'; import { GraphQLString, GraphQLInt } from 'graphql'; -import { Request } from "express"; -import { GroupAuthGuard } from "../auth/graphql-auth.guard"; -import { PrismaService } from "../prisma/prisma.service"; -import { TokenCode } from "./models/tokenCode.model"; -import { AgentAuthGuard } from "../auth/agent-auth.guard"; -import { pubSub } from "../pubSub.instance"; +import { Request } from 'express'; +import { GroupAuthGuard } from '../auth/group-auth.guard'; +import { PrismaService } from '../prisma/prisma.service'; +import { TokenCode } from './models/tokenCode.model'; +import { AgentAuthGuard } from '../auth/agent-auth.guard'; +import { pubSub } from '../pubSub.instance'; @Resolver(() => TokenCode) export class TokenCodeResolver { constructor(private prismaService: PrismaService) {} - // TODO: protect subscription @Subscription(() => TokenCode, { - filter: (payload, variables) => - payload.newTokenCode.agent.id === variables.id, + filter: (payload, variables, state) => + payload.newTokenCode.agent.id === state.token, }) - newTokenCode(@Args('id') id: string){ + newTokenCode() { return pubSub.asyncIterator('newTokenCode'); } @@ -39,9 +46,9 @@ export class TokenCodeResolver { }, }, }); - - pubSub.publish('newTokenCode', { - newTokenCode: tokenCode + + await pubSub.publish('newTokenCode', { + newTokenCode: tokenCode, }); } @@ -58,13 +65,11 @@ export class TokenCodeResolver { where: { id: code }, include: { agent: true, - } + }, }); - if (!tokenCode) - throw new NotFoundException(); + if (!tokenCode) throw new NotFoundException(); - const newTokenCode = await this.prismaService.tokenCode.create({ data: { value: 1, @@ -74,10 +79,10 @@ export class TokenCodeResolver { }, include: { agent: true, - } + }, }); - pubSub.publish('newTokenCode', { + await pubSub.publish('newTokenCode', { newTokenCode: newTokenCode, }); @@ -94,7 +99,7 @@ export class TokenCodeResolver { }, }); - pubSub.publish('updateToken', { + await pubSub.publish('updateToken', { updateToken: req.group, }); @@ -109,5 +114,4 @@ export class TokenCodeResolver { }, }); } - -} \ No newline at end of file +} diff --git a/src/telegram/telegram.service.ts b/src/telegram/telegram.service.ts index d149f90..a4dc101 100644 --- a/src/telegram/telegram.service.ts +++ b/src/telegram/telegram.service.ts @@ -19,7 +19,10 @@ export class TelegramService { polling: true, }); - this.telegram.onText(/^\/register ([\w|-]+) (.+)/, this.register.bind(this)); + this.telegram.onText( + /^\/register ([\w|-]+) (.+)/, + this.register.bind(this), + ); this.telegram.onText(/^\/unregister/, this.unregister.bind(this)); this.telegram.onText(/^\/profile/, this.profile.bind(this)); this.telegram.onText(/^\/start/, this.start.bind(this)); @@ -115,7 +118,7 @@ export class TelegramService { } async register(msg: Message, match: RegExpMatchArray) { - if (!match[1]&&!match[2]) return; + if (!match[1] && !match[2]) return; if (await this.isRegistered(msg.from.id)) return void (await this.telegram.sendMessage( @@ -123,17 +126,19 @@ export class TelegramService { 'Already registered', )); - if((await this.prismaService.agent.count({ - where: { id: match[1], uid: "" }, - })) == 0) + const existsCheck = await this.prismaService.agent.count({ + where: { id: match[1], uid: '' }, + }); + + if (existsCheck == 0) return void (await this.telegram.sendMessage( msg.chat.id, 'AgentId not found or already taken!', )); const agent = await this.prismaService.agent.update({ - where:{ - id: match[1] + where: { + id: match[1], }, data: { uid: String(msg.from.id), -- GitLab