From 81b67a54e68e754f9c5e06b525f30cf275489b90 Mon Sep 17 00:00:00 2001 From: simplonco Date: Sat, 14 Jan 2023 19:17:46 +0100 Subject: [PATCH] protected room working at least --- .../api_back/src/chat/chat.controller.ts | 21 ++++++++++++++++--- .../nestjs/api_back/src/chat/chat.service.ts | 2 +- .../nestjs/api_back/src/chat/dev/dev_utils.ts | 2 +- .../nestjs/api_back/src/chat/dto/room.dto.ts | 4 ++++ .../src/chat/entities/chatroom.entity.ts | 5 +++++ .../src/pieces/chat/Layout_create.svelte | 2 +- .../src/pieces/chat/Layout_home.svelte | 3 ++- .../src/pieces/chat/Layout_protected.svelte | 2 +- .../api_front/src/pieces/chat/Types_chat.ts | 1 + 9 files changed, 34 insertions(+), 8 deletions(-) diff --git a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts index 59d700d5..81037ddc 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts @@ -30,6 +30,8 @@ export class ChatController { new_room.owner = room.owner; if (room.users) new_room.users = room.users; + if (room.allowed) + new_room.allowed = room.allowed; return new_room; } @@ -48,9 +50,19 @@ export class ChatController { { printCaller("- in "); - let fields = ["name", "type", "users", "protection"]; + let fields = ["name", "type", "users", "protection", "allowed_users"]; const rooms = await this.chatService.getMyRooms(req.user.username, fields); + rooms.forEach(room => { + if (room.protection) + { + if (room.allowed_users.includes(req.user.username)) + room.allowed = true; + else + room.allowed = false; + } + }); + const ret_rooms = rooms.map(room => this.format_room(room)); res.status(HttpStatus.OK).json({ rooms: ret_rooms }); printCaller("- out "); @@ -107,7 +119,7 @@ export class ChatController { if (test_regex.test(room.name) === false) { let forbidden_chars = room.name.replace(new RegExp(regex_base, "g"), ""); - console.log(`throw error: error: true, code: 'FORBIDDEN_CHARACTERS', message: 'Your room name can not contains these characters : ${forbidden_chars}'`); + printCaller(`throw error: error: true, code: 'FORBIDDEN_CHARACTERS', message: 'Your room name can not contains these characters : ${forbidden_chars}'`); throw new HttpException({ error: true, code: 'FORBIDDEN_CHARACTERS', message: `Your room name can not contains these characters : ${forbidden_chars}` }, HttpStatus.OK); } @@ -117,7 +129,7 @@ export class ChatController { { if (!room.password || room.password.length === 0) { - console.log(`throw error: error: true, code: 'PASSWORD_TOO_SHORT', message: 'your password is too short'`); + printCaller(`throw error: error: true, code: 'PASSWORD_TOO_SHORT', message: 'your password is too short'`); throw new HttpException({ error: true, code: 'PASSWORD_TOO_SHORT', message: `your password is too short` }, HttpStatus.OK); } } @@ -221,6 +233,9 @@ export class ChatController { if (!room_db.allowed_users.includes(req.user.username)) await this.chatService.setPasswordValidation(req.user.username, room); } + + const ret_room = this.format_room(room); + res.status(HttpStatus.OK).json({ room: ret_room }); printCaller("- out "); } diff --git a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts index 0eac1fd5..066a7361 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts @@ -197,7 +197,7 @@ export class ChatService { const is_match = await bcrypt.compare(room.password, room_db.hash); if (!is_match) { - console.log(`throw error: error: true, code: 'BAD_PASSWORD', message: 'bad password'`); + printCaller(`throw error: error: true, code: 'BAD_PASSWORD', message: 'bad password'`); throw new HttpException({ error: true, code: 'BAD_PASSWORD', message: `bad password` }, HttpStatus.BAD_REQUEST); } diff --git a/srcs/requirements/nestjs/api_back/src/chat/dev/dev_utils.ts b/srcs/requirements/nestjs/api_back/src/chat/dev/dev_utils.ts index 1d37db38..309c1e34 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/dev/dev_utils.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/dev/dev_utils.ts @@ -8,6 +8,6 @@ export function printCaller(prefix: string = "") { Error.captureStackTrace(e); let stack = e.stack.split('\n'); let caller = stack[2].trim(); - console.log(prefix + caller); + console.log(prefix + ' ' + caller); } } diff --git a/srcs/requirements/nestjs/api_back/src/chat/dto/room.dto.ts b/srcs/requirements/nestjs/api_back/src/chat/dto/room.dto.ts index 578aadf3..e3451468 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/dto/room.dto.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/dto/room.dto.ts @@ -19,6 +19,10 @@ export class roomDto @IsBoolean() protection: boolean; + @IsBoolean() + @IsOptional() + allowed?: boolean; + @IsString() @IsOptional() password?: string; diff --git a/srcs/requirements/nestjs/api_back/src/chat/entities/chatroom.entity.ts b/srcs/requirements/nestjs/api_back/src/chat/entities/chatroom.entity.ts index ece8702e..82522e1a 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/entities/chatroom.entity.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/entities/chatroom.entity.ts @@ -25,6 +25,11 @@ export class Chatroom @IsBoolean() protection: boolean = false; + @Column({ nullable: true }) + @IsBoolean() + @IsOptional() + allowed?: boolean; + @Column({ nullable: true }) @IsString() @IsOptional() diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_create.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_create.svelte index ee22198c..b23f1179 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_create.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_create.svelte @@ -44,7 +44,7 @@ response = await create_room(room); // go to room - if (response.error) + if (response.status >= 300) show_error = response.error; else await change_room(response.room); diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_home.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_home.svelte index 2ccac35a..096d2733 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_home.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_home.svelte @@ -12,7 +12,8 @@ { console.log("inside go_to_room"); - if (room.protection) + console.log("room:", room); + if (room.protection && !room.allowed) { await current_room.set(room); layout.set("protected"); diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_protected.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_protected.svelte index ddf46def..9b614bf0 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_protected.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_protected.svelte @@ -32,7 +32,7 @@ response = await send_password(room); // go to room - if (response.error) + if (response.status >= 300) show_error = response.error; else await change_room(response.room); diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Types_chat.ts b/srcs/requirements/svelte/api_front/src/pieces/chat/Types_chat.ts index b156f69c..a484a42c 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Types_chat.ts +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Types_chat.ts @@ -5,6 +5,7 @@ export interface Room users?: string[]; client_name?: string; protection: boolean; + allowed?: boolean; } export interface FetchResponse