Remove User and AdminUser controllers; update import paths in UserModule to reflect new directory structure.
This commit is contained in:
@@ -0,0 +1,50 @@
|
|||||||
|
import { CanActivate, ExecutionContext, Injectable, UnauthorizedException, Inject } from '@nestjs/common';
|
||||||
|
import { Request } from 'express';
|
||||||
|
import { JwtService } from '@nestjs/jwt';
|
||||||
|
import { ConfigService } from '@nestjs/config';
|
||||||
|
import { IAdminTokenPayload, ITokenPayload } from '../interfaces/IToken-payload';
|
||||||
|
|
||||||
|
export interface AdminAuthRequest extends Request {
|
||||||
|
adminId: string;
|
||||||
|
restId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class AuthGuard implements CanActivate {
|
||||||
|
constructor(
|
||||||
|
@Inject(JwtService)
|
||||||
|
private readonly jwtService: JwtService,
|
||||||
|
@Inject(ConfigService)
|
||||||
|
private readonly configService: ConfigService,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
async canActivate(context: ExecutionContext) {
|
||||||
|
const request = context.switchToHttp().getRequest<AdminAuthRequest>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
const secret = this.configService.get<string>('JWT_SECRET');
|
||||||
|
const token = this.extractTokenFromHeader(request);
|
||||||
|
if (!token) {
|
||||||
|
throw new UnauthorizedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const payload = await this.jwtService.verifyAsync<ITokenPayload>(token, {
|
||||||
|
secret,
|
||||||
|
});
|
||||||
|
request['userId'] = payload.userId;
|
||||||
|
request['restId'] = payload.restId;
|
||||||
|
} catch {
|
||||||
|
throw new UnauthorizedException();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} catch (err) {
|
||||||
|
console.log('error in AuthGuard', err);
|
||||||
|
throw new UnauthorizedException('Invalid or expired token');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private extractTokenFromHeader(request: Request): string | undefined {
|
||||||
|
const [type, token] = request.headers.authorization?.split(' ') ?? [];
|
||||||
|
return type === 'Bearer' ? token : undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
-2
@@ -1,11 +1,13 @@
|
|||||||
import { Controller, Get, UseGuards, Query, ValidationPipe } from '@nestjs/common';
|
import { Controller, Get, UseGuards, Query, ValidationPipe } from '@nestjs/common';
|
||||||
import { ApiTags, ApiBearerAuth, ApiOperation, ApiOkResponse } from '@nestjs/swagger';
|
import { ApiTags, ApiBearerAuth, ApiOperation, ApiOkResponse } from '@nestjs/swagger';
|
||||||
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
|
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
|
||||||
import { UserService } from './user.service';
|
import { UserService } from '../user.service';
|
||||||
import { FindUsersDto } from './dto/find-user.dto';
|
import { FindUsersDto } from '../dto/find-user.dto';
|
||||||
import { UserId } from 'src/common/decorators/user-id.decorator';
|
import { UserId } from 'src/common/decorators/user-id.decorator';
|
||||||
import { RestId } from 'src/common/decorators';
|
import { RestId } from 'src/common/decorators';
|
||||||
|
|
||||||
|
@UseGuards(AdminAuthGuard)
|
||||||
|
@ApiBearerAuth()
|
||||||
@ApiTags('Admin/User')
|
@ApiTags('Admin/User')
|
||||||
@Controller('admin/user')
|
@Controller('admin/user')
|
||||||
export class AdminUserController {
|
export class AdminUserController {
|
||||||
+8
-17
@@ -1,41 +1,32 @@
|
|||||||
import { Controller, Get, UseGuards, Patch, Body, ValidationPipe } from '@nestjs/common';
|
import { Controller, Get, UseGuards, Patch, Body, ValidationPipe } from '@nestjs/common';
|
||||||
import { ApiTags, ApiBearerAuth, ApiOperation } from '@nestjs/swagger';
|
import { ApiTags, ApiBearerAuth, ApiOperation, ApiBody } from '@nestjs/swagger';
|
||||||
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
|
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
|
||||||
import { UserService } from './user.service';
|
import { UserService } from '../user.service';
|
||||||
import { UpdateUserDto } from './dto/update-user.dto';
|
import { UpdateUserDto } from '../dto/update-user.dto';
|
||||||
import { UserId } from 'src/common/decorators/user-id.decorator';
|
import { UserId } from 'src/common/decorators/user-id.decorator';
|
||||||
|
|
||||||
|
@UseGuards(AdminAuthGuard)
|
||||||
|
@ApiBearerAuth()
|
||||||
@ApiTags('User')
|
@ApiTags('User')
|
||||||
@Controller('user')
|
@Controller('user')
|
||||||
export class UserController {
|
export class UserController {
|
||||||
constructor(private readonly userService: UserService) {}
|
constructor(private readonly userService: UserService) {}
|
||||||
|
|
||||||
@UseGuards(AdminAuthGuard)
|
|
||||||
@ApiBearerAuth()
|
|
||||||
@ApiOperation({ summary: 'Get the current authenticated user profile' })
|
@ApiOperation({ summary: 'Get the current authenticated user profile' })
|
||||||
@Get('/me')
|
@Get('/me')
|
||||||
async getUser(@UserId() userId: string) {
|
async getUser(@UserId() userId: string) {
|
||||||
const user = await this.userService.findById(userId);
|
const user = await this.userService.findById(userId);
|
||||||
return {
|
return user;
|
||||||
message: `GET request: Retrieving profile for authenticated user`,
|
|
||||||
user,
|
|
||||||
userId,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@UseGuards(AdminAuthGuard)
|
|
||||||
@ApiBearerAuth()
|
|
||||||
@ApiOperation({ summary: 'Update the authenticated user profile' })
|
@ApiOperation({ summary: 'Update the authenticated user profile' })
|
||||||
|
@ApiBody({ type: UpdateUserDto })
|
||||||
@Patch('/')
|
@Patch('/')
|
||||||
async updateUser(
|
async updateUser(
|
||||||
@UserId() userId: string,
|
@UserId() userId: string,
|
||||||
@Body(new ValidationPipe({ transform: true, whitelist: true })) dto: UpdateUserDto,
|
@Body(new ValidationPipe({ transform: true, whitelist: true })) dto: UpdateUserDto,
|
||||||
) {
|
) {
|
||||||
const user = await this.userService.updateUser(userId, dto);
|
const user = await this.userService.updateUser(userId, dto);
|
||||||
return {
|
return user;
|
||||||
message: `PATCH request: Updating profile for user ${userId}`,
|
|
||||||
userId,
|
|
||||||
user,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
import { UserService } from './user.service';
|
import { UserService } from './user.service';
|
||||||
import { AdminUserController } from './adminUser.controller';
|
import { AdminUserController } from './controllers/adminUser.controller';
|
||||||
import { MikroOrmModule } from '@mikro-orm/nestjs';
|
import { MikroOrmModule } from '@mikro-orm/nestjs';
|
||||||
import { User } from './entities/user.entity';
|
import { User } from './entities/user.entity';
|
||||||
import { JwtModule } from '@nestjs/jwt';
|
import { JwtModule } from '@nestjs/jwt';
|
||||||
|
|||||||
Reference in New Issue
Block a user