From 287b20574d2c1bd7e78a385c5d8ef7c85bd2495f Mon Sep 17 00:00:00 2001 From: Akshit Batra Date: Thu, 12 Dec 2024 00:02:15 +0530 Subject: [PATCH 1/2] Add. static authentication for signin api --- .talismanrc | 12 +++++++----- apis.rest | 9 +++++++++ backend/src/app.controller.ts | 14 +++----------- backend/src/app.module.ts | 4 +++- backend/src/auth/auth.controller.ts | 24 ++++++++++++++++++++++++ backend/src/auth/auth.module.ts | 11 +++++++++++ backend/src/auth/auth.service.ts | 21 +++++++++++++++++++++ backend/src/auth/guards/auth.guard.ts | 0 backend/src/main.ts | 4 ++-- backend/src/users/users.dto.ts | 5 +++++ backend/src/users/users.module.ts | 10 ++++++++++ backend/src/users/users.service.ts | 23 +++++++++++++++++++++++ 12 files changed, 118 insertions(+), 19 deletions(-) create mode 100644 apis.rest create mode 100644 backend/src/auth/auth.controller.ts create mode 100644 backend/src/auth/auth.module.ts create mode 100644 backend/src/auth/auth.service.ts create mode 100644 backend/src/auth/guards/auth.guard.ts create mode 100644 backend/src/users/users.dto.ts create mode 100644 backend/src/users/users.module.ts create mode 100644 backend/src/users/users.service.ts diff --git a/.talismanrc b/.talismanrc index 054153f..af9e0da 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,6 +1,8 @@ fileignoreconfig: -- filename: frontend/src/app/auth/auth.tsx - checksum: 4ffb9648d31740f2a6fff7fa3368d13d2bfaea047f2eb0f2bc342984ca1d633f -- filename: frontend/src/app/signup/page.tsx - checksum: 98adba90b3c2e6e6b2c9d43996a844467b8afb4881e606f9b22dbd5f239d69ea -version: "" +- filename: apis.rest + checksum: 2e52807fb85686dd07d53d8af0296040d2c4b0cd0e3389fee66bd9c86ad501c0 +- filename: backend/src/auth/auth.service.ts + checksum: b1e774f02679869d2647ea66be0b6f56163b3dff854af6f66b9512db235a2529 +- filename: backend/src/users/users.service.ts + checksum: d6456d97232e89cec4e3960ebb6d1b29d9d9cf571a23ec72035ea7de8e63c60f +version: "" \ No newline at end of file diff --git a/apis.rest b/apis.rest new file mode 100644 index 0000000..89e31ad --- /dev/null +++ b/apis.rest @@ -0,0 +1,9 @@ +POST http://localhost:3001/login +Content-Type: application/json + +{ + "userId": 2, + "username": "maria", + "password": "guess" +} + diff --git a/backend/src/app.controller.ts b/backend/src/app.controller.ts index 0e5b6c7..141cbcb 100644 --- a/backend/src/app.controller.ts +++ b/backend/src/app.controller.ts @@ -2,23 +2,15 @@ import { Controller, Get } from '@nestjs/common'; import { AppService } from './app.service'; import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger'; -@ApiTags('App') +@ApiTags('App') @Controller() export class AppController { constructor(private readonly appService: AppService) {} @Get() - @ApiOperation({ summary: 'Get a welcome message' }) - @ApiResponse({ status: 200, description: 'Return Hello World message' }) + @ApiOperation({ summary: 'Get a welcome message' }) + @ApiResponse({ status: 200, description: 'Return Hello World message' }) getHello(): string { return this.appService.getHello(); } - - // Dummy API - @Get('dummy') - @ApiOperation({ summary: 'Get dummy data' }) - @ApiResponse({ status: 200, description: 'Dummy data returned successfully' }) - getDummy(): string { - return 'This is dummy data'; - } } diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 8662803..d41f6c6 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -1,9 +1,11 @@ import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; +import { AuthModule } from './auth/auth.module'; +import { UsersModule } from './users/users.module'; @Module({ - imports: [], + imports: [AuthModule, UsersModule], controllers: [AppController], providers: [AppService], }) diff --git a/backend/src/auth/auth.controller.ts b/backend/src/auth/auth.controller.ts new file mode 100644 index 0000000..c560c24 --- /dev/null +++ b/backend/src/auth/auth.controller.ts @@ -0,0 +1,24 @@ +import { Body, Controller, HttpCode, HttpStatus, Post } from '@nestjs/common'; +import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger'; +import { AuthService } from './auth.service'; +import { UserDto } from 'src/users/users.dto'; + +@ApiTags('Authentication') +@Controller() +export class AuthController { + constructor(private readonly authService: AuthService) {} + + @Post('signup') + @ApiOperation({ summary: 'Register new user' }) + @ApiResponse({ status: 201, description: 'API for registering new user' }) + async signupUser(): Promise { + return this.authService.signupUser(); + } + + @HttpCode(HttpStatus.OK) + @ApiOperation({ summary: 'Login user' }) + @Post('login') + signIn(@Body() signInDto: UserDto) { + return this.authService.signIn(signInDto.username, signInDto.password); + } +} diff --git a/backend/src/auth/auth.module.ts b/backend/src/auth/auth.module.ts new file mode 100644 index 0000000..dcaee67 --- /dev/null +++ b/backend/src/auth/auth.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { AuthController } from './auth.controller'; +import { AuthService } from './auth.service'; +import { UsersModule } from 'src/users/users.module'; + +@Module({ + imports: [UsersModule], + controllers: [AuthController], + providers: [AuthService], +}) +export class AuthModule {} diff --git a/backend/src/auth/auth.service.ts b/backend/src/auth/auth.service.ts new file mode 100644 index 0000000..70244d2 --- /dev/null +++ b/backend/src/auth/auth.service.ts @@ -0,0 +1,21 @@ +import { Injectable, UnauthorizedException } from '@nestjs/common'; +import { UsersService } from 'src/users/users.service'; + +@Injectable() +export class AuthService { + constructor(private readonly usersService: UsersService) {} + async signupUser() { + return 'hello'; + } + + async signIn(username: string, pass: string): Promise { + const user = await this.usersService.findOne(username); + if (user?.password !== pass) { + throw new UnauthorizedException(); + } + const { password, ...result } = user; + // TODO: Generate a JWT and return it here + // instead of the user object + return { success: true, result }; + } +} diff --git a/backend/src/auth/guards/auth.guard.ts b/backend/src/auth/guards/auth.guard.ts new file mode 100644 index 0000000..e69de29 diff --git a/backend/src/main.ts b/backend/src/main.ts index fddafd7..bcda550 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -6,8 +6,8 @@ async function bootstrap() { const app = await NestFactory.create(AppModule); const config = new DocumentBuilder() - .setTitle('NestJS API') - .setDescription('NestJS API documentation') + .setTitle('NetVibe') + .setDescription('Emphasizing networking with an energetic twist') .setVersion('1.0') .build(); const document = SwaggerModule.createDocument(app, config); diff --git a/backend/src/users/users.dto.ts b/backend/src/users/users.dto.ts new file mode 100644 index 0000000..94cd277 --- /dev/null +++ b/backend/src/users/users.dto.ts @@ -0,0 +1,5 @@ +export class UserDto { + userId: string; + username: string; + password: string; +} diff --git a/backend/src/users/users.module.ts b/backend/src/users/users.module.ts new file mode 100644 index 0000000..01cc709 --- /dev/null +++ b/backend/src/users/users.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { UsersService } from './users.service'; + +@Module({ + imports: [], + controllers: [], + providers: [UsersService], + exports: [UsersService], +}) +export class UsersModule {} diff --git a/backend/src/users/users.service.ts b/backend/src/users/users.service.ts new file mode 100644 index 0000000..6470b03 --- /dev/null +++ b/backend/src/users/users.service.ts @@ -0,0 +1,23 @@ +import { Injectable } from '@nestjs/common'; + +export type User = { userId: number; username: string; password: string }; + +@Injectable() +export class UsersService { + private readonly users = [ + { + userId: 1, + username: 'john', + password: 'changeme', + }, + { + userId: 2, + username: 'maria', + password: 'guess', + }, + ]; + + async findOne(username: string): Promise { + return this.users.find((user) => user.username === username); + } +} From 664888755882149c183a8a883280f9037808a216 Mon Sep 17 00:00:00 2001 From: Akshit Batra Date: Thu, 12 Dec 2024 00:09:20 +0530 Subject: [PATCH 2/2] update swagger doc --- backend/src/users/users.dto.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/backend/src/users/users.dto.ts b/backend/src/users/users.dto.ts index 94cd277..da61fdd 100644 --- a/backend/src/users/users.dto.ts +++ b/backend/src/users/users.dto.ts @@ -1,5 +1,10 @@ +import { ApiProperty } from '@nestjs/swagger'; + export class UserDto { + @ApiProperty() userId: string; + @ApiProperty() username: string; + @ApiProperty() password: string; }