From 571bb93e28bd7bdc5f71a9392e9d1acd4e3c62d8 Mon Sep 17 00:00:00 2001 From: Ly Tuan Kiet Date: Sun, 27 Oct 2024 20:24:06 +0700 Subject: [PATCH] fix return value in context --- nest-cli.json | 4 ++++ src/Graphql/graphql.service.ts | 11 ++++++----- src/KeyStore/private_key.pem | 28 ++++++++++++++++++++++++++++ src/KeyStore/public_key.pem | 9 +++++++++ src/main.ts | 18 ++++++++++++++++++ 5 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 src/KeyStore/private_key.pem create mode 100644 src/KeyStore/public_key.pem diff --git a/nest-cli.json b/nest-cli.json index d7497e5..1e040b4 100644 --- a/nest-cli.json +++ b/nest-cli.json @@ -10,6 +10,10 @@ { "include": "**/*.pug", "outDir": "./dist/src/" + }, + { + "include": "**/*.pem", + "outDir": "./dist/src/" } ] } diff --git a/src/Graphql/graphql.service.ts b/src/Graphql/graphql.service.ts index 635fc1d..ee5777d 100644 --- a/src/Graphql/graphql.service.ts +++ b/src/Graphql/graphql.service.ts @@ -1,4 +1,4 @@ -import { Injectable, UnauthorizedException } from '@nestjs/common'; +import { Injectable, Logger, UnauthorizedException } from '@nestjs/common'; import { PrismaService } from '../Prisma/prisma.service'; import { Request } from 'express'; @@ -11,18 +11,19 @@ export class GraphqlService { async acquireContext(req: Request) { // get x-session-id from headers let sessionId: string; + const disableAuth = process.env.DISABLE_AUTH === 'true'; try { sessionId = req.headers['x-session-id'] as string; //eslint-disable-next-line @typescript-eslint/no-unused-vars } catch (error) { - if ( - process.env.NODE_ENV === 'development' && - process.env.DISABLE_AUTH === 'true' - ) { + if (disableAuth) { return null; } throw new UnauthorizedException('Must provide a session ID'); } + if (disableAuth) { + return null; + } // check if the token is valid const session = await clerkClient.sessions.getSession(sessionId as string); if (!session) { diff --git a/src/KeyStore/private_key.pem b/src/KeyStore/private_key.pem new file mode 100644 index 0000000..6eb6c5b --- /dev/null +++ b/src/KeyStore/private_key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDEDA8fysKwLu5V +A+yN8fTf5XQAVT5HXUoE1lO7Nyk8QhYOYGBO9tn8tBsmwKbXLdV7bwTtuXdctd1Y +qNpgPj1BVg+IwG3NDIhUoEfrnaPQVedLrS3LFlHIUY9r/jVLquyrIqF2pk+Kvmjs +nIMex9GcnN4DRbyrJeL7MSBp0a3KL5h478DDCkiFdGdFcZX4j3cMEBQLEd4MCgBL +8rL7+PmZRyZbyRbHGrRsAX5fq4gI0pmDCG14qmuo2y01Kg9Z1MjvNhD7DX+Ook76 +Lfwzk/ivM9Y8X+kN396/Q7tHXRc1PoRtwfBPNCHTJip4HwBHW43ITATNtipIpU0O +MapN6hiDAgMBAAECggEATen1AM+WfGrKcaMzml400d7hMVivfbFHv5BmipsrmjUx +itkmrXtRuyrhN4+NPyuKEppWvRveokvtAlVpJKLXuWW4msLPYJTAgdGJg8yM1Dmv +yNW0w2fFbPVtKKBJEh+GG6WRwhPqvNtb292ABvWnCrUVTvuiNerCwM4Pcb7RcO6y +2tn6SOD1pbS9OY4WYmvqPVfJXu7ed8tsvczxIkxphkU8nhmUtcnjfRgl9SaUD66Z +sl2FRifuEQhG3BNZM/Q4Cx3sfHk34AoOwsiuVmICJyyTmeLx5eKXb1gKx/A/83zr +/YAeDt8Ni7wWOferyRDCuxPDDLtLAAoLl2jGziKV0QKBgQDzjtcHdoCUoOLCRX+X +0Xlu44wLkz33JKA4VgCgd95+GYAmvj2de0cBHjyuzfL2D0DtC/Nk6QC/ypvxLPSV +FNn4z7+9sYP6phEXY3BfVBvaZtjbX+VikbSmugtnhudFvPffOJAgeeHAj5v06xRJ +OkkB5LqTgMOmhzMr3ZQR19ocRQKBgQDOD+PLajBapCCz78YeJm82Kgd00DSkfoqV +kQHeJ+T58wWeYEo9/uGqEyJKq+tQZRHOvQgGEV74ds5DhKOWJpNB1B1/MsHLlacH +dXxRsSwd9NzZf3QtleVNvhqusA5Dcl7AJ3PxsYi/ocMULANnpaYZDR6LBwWp6t+l +NxlWbC5CJwKBgQDrmAZEP8rM+nuedF+h2YzfSNjU8Y8FG7aoB/j/QDRGQiCGWYt8 +ZB0g5cDJTopwnfytz9uWhxSkcTY7KsND2jGmzj6pHaeOs0jhGN1AOTngH5AxVCet +G0hl5pzVfdcEzG/wyuQPphZLkB7J4QN0eh7Y6AnaWLnowesryWBLikJ/CQKBgQCV +j4TnrFAiScQOtbZXRdAsQP8ecsvypIHToub3Jn+URyZJ2FuqeaeyuKaIChYGSQVO +x3beaJdEwX5eFRRis+bnvZwXKXDtYdZUnJo59N0vdP0iw9ZAC+7dqWBWcCQ6IfXR +hBEsWI4HgNJFftiNzvYqcpI7mEItHPNsR/yU9HnyuwKBgCErKT8cabERrUI4T9yH +MNjuSg+l4jsK1zcddfzaT0L4d1LDGGy4m6bd8ZoCpRfo0LY1znZfeD6IaBFaJD+v +xE9BxA9cbsK6Fq1+1ID24kS1f27Ag9sh80tnRJgjb6JkDe82fG/Vzc0wuqkx3SR7 +XyCLdknYuVWyMOadOPRPj1/a +-----END PRIVATE KEY----- diff --git a/src/KeyStore/public_key.pem b/src/KeyStore/public_key.pem new file mode 100644 index 0000000..70ff202 --- /dev/null +++ b/src/KeyStore/public_key.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxAwPH8rCsC7uVQPsjfH0 +3+V0AFU+R11KBNZTuzcpPEIWDmBgTvbZ/LQbJsCm1y3Ve28E7bl3XLXdWKjaYD49 +QVYPiMBtzQyIVKBH652j0FXnS60tyxZRyFGPa/41S6rsqyKhdqZPir5o7JyDHsfR +nJzeA0W8qyXi+zEgadGtyi+YeO/AwwpIhXRnRXGV+I93DBAUCxHeDAoAS/Ky+/j5 +mUcmW8kWxxq0bAF+X6uICNKZgwhteKprqNstNSoPWdTI7zYQ+w1/jqJO+i38M5P4 +rzPWPF/pDd/ev0O7R10XNT6EbcHwTzQh0yYqeB8AR1uNyEwEzbYqSKVNDjGqTeoY +gwIDAQAB +-----END PUBLIC KEY----- diff --git a/src/main.ts b/src/main.ts index eb5ac00..af4acf5 100644 --- a/src/main.ts +++ b/src/main.ts @@ -5,10 +5,28 @@ import { Logger } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { clerkMiddleware } from '@clerk/express'; import graphqlUploadExpress from 'graphql-upload/graphqlUploadExpress.js'; +import path from 'node:path'; +import { readFileSync } from 'node:fs'; async function bootstrap() { const app = await NestFactory.create(AppModule); + // load private key and public key + const privateKey = readFileSync( + path.join(__dirname, 'KeyStore', 'private_key.pem'), + 'utf8', + ); + const publicKey = readFileSync( + path.join(__dirname, 'KeyStore', 'public_key.pem'), + 'utf8', + ); + // set private key and public key to env + process.env.JWT_RS256_PRIVATE_KEY = privateKey; + process.env.JWT_RS256_PUBLIC_KEY = publicKey; + + Logger.log(`Private key: ${privateKey.slice(0, 10)}...`, 'Bootstrap'); + Logger.log(`Public key: ${publicKey.slice(0, 10)}...`, 'Bootstrap'); + const corsOrigin = (process.env.CORS_ORIGIN ?? '').split(','); // split by comma to array app.enableCors({ origin: corsOrigin,