From 035eb2a46a013ce99fb1fbaf8b3e5f13fec7c0be Mon Sep 17 00:00:00 2001 From: simplonco Date: Wed, 18 Jan 2023 03:54:39 +0100 Subject: [PATCH] fixed a mutitudes of errors in chat --- .../api_back/src/chat/chat.controller.ts | 46 ++++++++++++++++++- .../nestjs/api_back/src/chat/chat.service.ts | 44 +++++++++++++++--- .../src/pieces/chat/Layout_mute.svelte | 38 +++++---------- .../src/pieces/chat/Layout_room_set.svelte | 5 +- .../src/pieces/chat/Layout_user.svelte | 25 +++++++--- .../src/pieces/chat/Request_rooms.ts | 24 ++++++++-- .../api_front/src/pieces/chat/Types_chat.ts | 3 ++ 7 files changed, 137 insertions(+), 48 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 24272c2c..c2998e20 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts @@ -97,7 +97,7 @@ export class ChatController { @UseGuards(AuthenticateGuard) @UseGuards(TwoFactorGuard) @Get('currentroom') - async getCurrentRooms(@Req() req, @Res() res): Promise + async getCurrentRoom(@Req() req, @Res() res): Promise { printCaller("- in "); @@ -572,6 +572,42 @@ export class ChatController { printCaller("- out "); } + @UseGuards(AuthenticateGuard) + @UseGuards(TwoFactorGuard) + @Post('userinfos') + async getUserInfos(@Body('username') username: string, @Req() req, @Res() res): Promise + { + printCaller("- in "); + + const room_name = await this.chatService.getCurrentRoomName(username); + if (!room_name) + { + console.log("throw error: error: true, code: 'CURRENT_ROOM_NAME_NOT_FOUND', message: 'current_room_name_not_found'"); + throw new HttpException({ error: true, code: 'CURRENT_ROOM_NAME_NOT_FOUND', message: `current_room_name_not_found` }, HttpStatus.UNAUTHORIZED); + } + const current_room = await this.chatService.getRoomByName(room_name); + if (!current_room) + { + console.log("throw error: error: true, code: 'CURRENT_ROOM_NOT_FOUND', message: 'current_room_not_found'"); + throw new HttpException({ error: true, code: 'CURRENT_ROOM_NOT_FOUND', message: `current_room_not_found` }, HttpStatus.UNAUTHORIZED); + } + const blocked = await this.chatService.getListBlockUser(req.user.username); + const mute = await this.chatService.getUserMute(req.user.username, username); + + let user: any = { name: username, ismute: false, mute_date: null }; + user.isadmin = current_room.admins.includes(username); + if (blocked) + user.isblocked = blocked.includes(username); + if (mute && mute.name === username) + { + user.ismute = true; + user.mute_date = mute.date; + } + + res.status(HttpStatus.OK).json({ user: user }); + printCaller("- out "); + } + @UseGuards(AuthenticateGuard) @UseGuards(TwoFactorGuard) @Post('setmute') @@ -583,6 +619,7 @@ export class ChatController { await this.chatService.addMute(req.user.username, room_name, mute); // inform other connected users + console.log("mute object:", mute); let message = `${req.user.username} has muted ${mute.name} untill ${time}`; let socket: socketDto = this.chatService.getSocket(req.user.username); let server = this.chatGateway.server; @@ -598,7 +635,7 @@ export class ChatController { @UseGuards(AuthenticateGuard) @UseGuards(TwoFactorGuard) @Post('ismute') - async isuserMute(@Body('username') username: string, @Req() req, @Res() res): Promise + async isUserMute(@Body('username') username: string, @Req() req, @Res() res): Promise { printCaller("- in "); @@ -618,6 +655,11 @@ export class ChatController { printCaller("- in "); const room_name = await this.chatService.getCurrentRoomName(req.user.username); + if (!room_name) + { + console.log("throw error: error: true, code: 'CURRENT_ROOM_NOT_FOUND', message: 'current_room_not_found'"); + throw new HttpException({ error: true, code: 'CURRENT_ROOM_NOT_FOUND', message: `current_room_not_found` }, HttpStatus.UNAUTHORIZED); + } const fields = ["admins"]; const room_db = await this.chatService.getRoomByName(room_name, fields); 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 d99f9dca..315c2258 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts @@ -285,6 +285,18 @@ export class ChatService { } } + async getUserMute(current_username: string, username: string, ): Promise + { + printCaller("- in "); + + const room_name = await this.getCurrentRoomName(current_username); + const current_room = await this.getRoomByName(room_name); + let mute = current_room.mutes.find(mute => mute.name === username); + + printCaller("- out "); + return mute; + } + /* SETTERS ************************************************ */ @@ -447,8 +459,8 @@ export class ChatService { const room_db = await this.getRoomByName(room_name); if (!room_db) { - printCallerError(`ERROR in chat: room ${room_name} not found`); - return; + printCaller(`throw error: error: true, code: 'ROOM_NOT_FOUND', message: 'room ${room_name} not found'`); + throw new HttpException({ error: true, code: 'ROOM_NOT_FOUND', message: `room ${room_name} not found` }, HttpStatus.UNAUTHORIZED); } if (room_db.type === "direct") { @@ -460,6 +472,11 @@ export class ChatService { printCaller(`throw error: error: true, code: 'NOT_ADMIN', message: 'you cannot set someone else as admin, since you are not admin yourself'`); throw new HttpException({ error: true, code: 'NOT_ADMIN', message: `you cannot set someone else as admin, since you are not admin yourself` }, HttpStatus.UNAUTHORIZED); } + if (room_db.admins.includes(user_username)) + { + printCaller(`throw error: error: true, code: 'ALREADY_ADMIN', message: 'this user is already an admin'`); + throw new HttpException({ error: true, code: 'ALREADY_ADMIN', message: `this user is already an admin` }, HttpStatus.UNAUTHORIZED); + } room_db.admins.push(user_username); await this.chatroomRepository.save(room_db); @@ -653,8 +670,8 @@ export class ChatService { const room_db = await this.getRoomByName(room_name); if(!room_db) { - printCallerError(`ERROR in chat: room not found for ${username}`); - return; + console.log("throw error: error: true, code: 'ROOM_NOT_FOUND', message: 'room not found for ${username}'"); + throw new HttpException({ error: true, code: 'ROOM_NOT_FOUND', message: `room not found for ${username}` }, HttpStatus.FORBIDDEN); } if (!room_db.admins.includes(username)) @@ -678,6 +695,11 @@ export class ChatService { }); if (!already_here) room_db.mutes.push(mute); + else + { + console.log("throw error: error: true, code: 'ALREADY_MUTE', message: 'this user is already mute for this room'"); + throw new HttpException({ error: true, code: 'ALREADY_MUTE', message: `this user is already mute for this room` }, HttpStatus.FORBIDDEN); + } } await this.chatroomRepository.save(room_db); @@ -904,9 +926,17 @@ export class ChatService { { printCaller("-- in "); - socket.leave(socket.room); - socket.join(room_name); - socket.room = room_name; + if (socket) + { + socket.leave(socket.room); + socket.join(room_name); + socket.room = room_name; + } + else + { + printCaller(`throw error: error: true, code: 'SOCKET_UNDEFINED', message: 'socket_undefined'`); + throw new HttpException({ error: true, code: 'SOCKET_UNDEFINED', message: `socket_undefined` }, HttpStatus.BAD_REQUEST); + } printCaller("-- out "); } diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_mute.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_mute.svelte index e83a13ae..8c60e62c 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_mute.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_mute.svelte @@ -1,7 +1,7 @@ @@ -105,12 +108,20 @@ {/if} {#if is_admin && back === "room_set" && $current_room.type !== "direct"} - - + {#if !$settings_user.isadmin} + + {/if} + {#if $settings_user.ismute} + + {:else} + + {/if} {/if} diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Request_rooms.ts b/srcs/requirements/svelte/api_front/src/pieces/chat/Request_rooms.ts index b67ed000..5ad3152e 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Request_rooms.ts +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Request_rooms.ts @@ -1,4 +1,4 @@ -import { msgs, user, layout, socket, current_room } from './Store_chat'; +import { msgs, user, layout, socket, current_room, settings_user } from './Store_chat'; import type { Room, FetchResponse } from './Types_chat'; import { FetchMethod, Mute, User } from './Types_chat'; import { to_print } from './Utils_chat'; @@ -66,14 +66,30 @@ export async function change_room(room: Room): Promise return response; } -export async function get_current_room() +export async function set_current_room() { - to_print("in validate_password"); + to_print("in set_current_room"); let response: FetchResponse = await fetch_chat_request('currentroom', FetchMethod.GET); to_print("response from get_current_room:", response); - return response; + if (response && response.room) + { + set_client_name_on_room(response.room); + current_room.set(response.room); + } +} + +export async function set_settings_user(username: string) +{ + to_print("in set_settings_user"); + + to_print("username for set_settings_user:", username); + let response: FetchResponse = await fetch_chat_request('userinfos', FetchMethod.POST, {username: username}); + to_print("response from set_settings_user:", response); + + if (response && response.user) + settings_user.set(response.user); } export async function validate_password(room: 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 a142fa64..2af2e6bf 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 @@ -25,6 +25,8 @@ export interface User name: string; isadmin: boolean; isblocked: boolean; + ismute: boolean; + mute_date: Date; } export interface FetchResponse @@ -34,6 +36,7 @@ export interface FetchResponse code?: string; message?: string; messages?: Message[]; + user?: User; users?: User[]; room?: Room; rooms?: Room[];