refactor source code
This commit is contained in:
@@ -5,9 +5,9 @@ import {
|
||||
ExecutionContext,
|
||||
Inject,
|
||||
UnauthorizedException,
|
||||
} from '@nestjs/common';
|
||||
import Clerk from '@clerk/express';
|
||||
import { GqlExecutionContext } from '@nestjs/graphql';
|
||||
} from '@nestjs/common'
|
||||
import Clerk from '@clerk/express'
|
||||
import { GqlExecutionContext } from '@nestjs/graphql'
|
||||
|
||||
@Injectable()
|
||||
export class ClerkAuthGuard implements CanActivate {
|
||||
@@ -15,36 +15,36 @@ export class ClerkAuthGuard implements CanActivate {
|
||||
|
||||
async canActivate(context: ExecutionContext): Promise<boolean> {
|
||||
// For GraphQL, get the request from the GQL context
|
||||
const ctx = GqlExecutionContext.create(context);
|
||||
const request = ctx.getContext().req;
|
||||
const ctx = GqlExecutionContext.create(context)
|
||||
const request = ctx.getContext().req
|
||||
|
||||
// Get the token from the Authorization header
|
||||
const authHeader = request.headers['authorization'];
|
||||
const authHeader = request.headers['authorization']
|
||||
|
||||
if (!authHeader) {
|
||||
throw new UnauthorizedException('Authorization header not found');
|
||||
throw new UnauthorizedException('Authorization header not found')
|
||||
}
|
||||
|
||||
const token = authHeader.split(' ')[1]; // Assuming 'Bearer TOKEN'
|
||||
const token = authHeader.split(' ')[1] // Assuming 'Bearer TOKEN'
|
||||
|
||||
if (!token) {
|
||||
throw new UnauthorizedException('Token not found');
|
||||
throw new UnauthorizedException('Token not found')
|
||||
}
|
||||
|
||||
try {
|
||||
// Verify the token with Clerk
|
||||
const session = await this.clerk.verifyToken(token, {});
|
||||
const session = await this.clerk.verifyToken(token, {})
|
||||
|
||||
if (!session) {
|
||||
throw new UnauthorizedException('Invalid session');
|
||||
throw new UnauthorizedException('Invalid session')
|
||||
}
|
||||
|
||||
// Attach user info to the request context if needed
|
||||
request.user = session.user;
|
||||
request.user = session.user
|
||||
|
||||
return true;
|
||||
return true
|
||||
} catch (error: any) {
|
||||
throw new UnauthorizedException(error.message);
|
||||
throw new UnauthorizedException(error.message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,9 +7,9 @@ import {
|
||||
Param,
|
||||
Body,
|
||||
Headers,
|
||||
} from '@nestjs/common';
|
||||
import { ClerkService } from './clerk.service';
|
||||
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
|
||||
} from '@nestjs/common'
|
||||
import { ClerkService } from './clerk.service'
|
||||
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger'
|
||||
@ApiTags('Clerk')
|
||||
@Controller('clerk')
|
||||
export class ClerkController {
|
||||
@@ -19,8 +19,8 @@ export class ClerkController {
|
||||
@ApiOperation({ summary: 'Clerk Webhook' })
|
||||
@ApiResponse({ status: 200, description: 'Webhook created successfully' })
|
||||
webhook(@Headers() headers: any, @Body() body: any) {
|
||||
return this.clerkService.webhook(body);
|
||||
return this.clerkService.webhook(body)
|
||||
}
|
||||
}
|
||||
|
||||
export default ClerkController;
|
||||
export default ClerkController
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Module, Global } from '@nestjs/common';
|
||||
import Clerk from '@clerk/express';
|
||||
import { ClerkService } from './clerk.service';
|
||||
import ClerkController from './clerk.controller';
|
||||
import { Module, Global } from '@nestjs/common'
|
||||
import Clerk from '@clerk/express'
|
||||
import { ClerkService } from './clerk.service'
|
||||
import ClerkController from './clerk.controller'
|
||||
@Global()
|
||||
@Module({
|
||||
providers: [
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
import { Injectable, Logger } from '@nestjs/common'
|
||||
|
||||
import { PrismaService } from '../Prisma/prisma.service';
|
||||
import { clerkClient } from '@clerk/express';
|
||||
import { PrismaService } from '../Prisma/prisma.service'
|
||||
import { clerkClient } from '@clerk/express'
|
||||
|
||||
@Injectable()
|
||||
export class ClerkService {
|
||||
constructor(private readonly prisma: PrismaService) {}
|
||||
webhook(body: any) {
|
||||
// get the event type
|
||||
const eventType = body.type;
|
||||
const eventType = body.type
|
||||
// dispatch the event
|
||||
this.dispatchEvent(eventType, body.data);
|
||||
return { message: `Webhook received: ${eventType}` };
|
||||
this.dispatchEvent(eventType, body.data)
|
||||
return { message: `Webhook received: ${eventType}` }
|
||||
}
|
||||
// dispatch the event
|
||||
dispatchEvent(eventType: string, data: any) {
|
||||
@@ -23,53 +23,53 @@ export class ClerkService {
|
||||
// session.removed
|
||||
// session.ended
|
||||
// email.created
|
||||
console.log(eventType, data);
|
||||
console.log(eventType, data)
|
||||
if (eventType === 'user.created') {
|
||||
this.eventUserCreated(data);
|
||||
this.eventUserCreated(data)
|
||||
}
|
||||
|
||||
if (eventType === 'user.updated') {
|
||||
this.eventUserUpdated(data);
|
||||
this.eventUserUpdated(data)
|
||||
}
|
||||
|
||||
if (eventType === 'session.created') {
|
||||
this.eventSessionCreated(data);
|
||||
this.eventSessionCreated(data)
|
||||
}
|
||||
|
||||
if (eventType === 'session.revoked') {
|
||||
this.eventSessionRevoked(data);
|
||||
this.eventSessionRevoked(data)
|
||||
}
|
||||
|
||||
if (eventType === 'session.removed') {
|
||||
this.eventSessionRemoved(data);
|
||||
this.eventSessionRemoved(data)
|
||||
}
|
||||
|
||||
if (eventType === 'session.ended') {
|
||||
this.eventSessionEnded(data);
|
||||
this.eventSessionEnded(data)
|
||||
}
|
||||
|
||||
if (eventType === 'email.created') {
|
||||
this.eventEmailCreated(data);
|
||||
this.eventEmailCreated(data)
|
||||
}
|
||||
}
|
||||
async eventUserCreated(data: any) {
|
||||
const primary_email_address_id = data.primary_email_address_id;
|
||||
const primary_email_address_id = data.primary_email_address_id
|
||||
// get primary email address on email_addresses by querying email_addresses with primary_email_address_id
|
||||
let primary_email_address = data.email_addresses.find(
|
||||
(email: any) => email.id === primary_email_address_id,
|
||||
);
|
||||
console.log(primary_email_address);
|
||||
)
|
||||
console.log(primary_email_address)
|
||||
if (!primary_email_address) {
|
||||
primary_email_address = '';
|
||||
primary_email_address = ''
|
||||
}
|
||||
// get user id
|
||||
const user_id = data.id;
|
||||
const user_id = data.id
|
||||
// get created at and convert to date
|
||||
const created_at = new Date(data.created_at);
|
||||
const created_at = new Date(data.created_at)
|
||||
// get name by combining first_name and last_name
|
||||
const name = `${data.first_name} ${data.last_name}`;
|
||||
const role = 'CUSTOMER';
|
||||
const phoneNumber = '';
|
||||
const name = `${data.first_name} ${data.last_name}`
|
||||
const role = 'CUSTOMER'
|
||||
const phoneNumber = ''
|
||||
// create user in database
|
||||
try {
|
||||
await this.prisma.user.create({
|
||||
@@ -81,32 +81,32 @@ export class ClerkService {
|
||||
createdAt: created_at,
|
||||
phoneNumber: phoneNumber ?? '',
|
||||
},
|
||||
});
|
||||
})
|
||||
} catch (err) {
|
||||
Logger.error(err);
|
||||
Logger.error(err)
|
||||
}
|
||||
}
|
||||
|
||||
async eventUserUpdated(data: any) {
|
||||
console.log(data);
|
||||
const user_id = data.id;
|
||||
const name = `${data.first_name} ${data.last_name}`;
|
||||
console.log(data)
|
||||
const user_id = data.id
|
||||
const name = `${data.first_name} ${data.last_name}`
|
||||
await this.prisma.user.update({
|
||||
where: { id: user_id },
|
||||
data: { name: name },
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
async eventSessionCreated(data: any) {
|
||||
console.log(data);
|
||||
console.log(data)
|
||||
// check if user exists in database or create user
|
||||
const user = await this.prisma.user.findUnique({
|
||||
where: { id: data.user_id },
|
||||
});
|
||||
})
|
||||
if (!user) {
|
||||
// get user info from clerk
|
||||
const userInfo = await clerkClient.users.getUser(data.user_id);
|
||||
console.log(userInfo);
|
||||
const userInfo = await clerkClient.users.getUser(data.user_id)
|
||||
console.log(userInfo)
|
||||
try {
|
||||
await this.prisma.user.create({
|
||||
data: {
|
||||
@@ -115,27 +115,27 @@ export class ClerkService {
|
||||
name: `${userInfo.firstName} ${userInfo.lastName}`,
|
||||
avatarUrl: userInfo.imageUrl,
|
||||
},
|
||||
});
|
||||
})
|
||||
} catch (err) {
|
||||
Logger.error(err);
|
||||
Logger.error(err)
|
||||
}
|
||||
}
|
||||
// to do: get session info
|
||||
}
|
||||
|
||||
eventSessionRevoked(data: any) {
|
||||
console.log(data);
|
||||
console.log(data)
|
||||
}
|
||||
|
||||
eventSessionRemoved(data: any) {
|
||||
console.log(data);
|
||||
console.log(data)
|
||||
}
|
||||
|
||||
eventSessionEnded(data: any) {
|
||||
console.log(data);
|
||||
console.log(data)
|
||||
}
|
||||
|
||||
eventEmailCreated(data: any) {
|
||||
console.log(data);
|
||||
console.log(data)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user