From 77c420a17471bb567382b08fbedc26bc161d3a0a Mon Sep 17 00:00:00 2001 From: simplonco Date: Sun, 15 Jan 2023 19:50:27 +0100 Subject: [PATCH] make admin ok --- .../api_back/src/chat/chat.controller.ts | 14 ++++----- .../nestjs/api_back/src/chat/chat.service.ts | 19 +++++++++++- .../src/pieces/chat/Element_button.svelte | 1 + .../src/pieces/chat/Layout_room_set.svelte | 1 + .../src/pieces/chat/Layout_user.svelte | 29 ++++++++++++++----- .../src/pieces/chat/Request_rooms.ts | 11 +++++++ 6 files changed, 57 insertions(+), 18 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 57c82afb..7456b26f 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts @@ -87,21 +87,18 @@ export class ChatController { @UseGuards(AuthenticateGuard) @UseGuards(TwoFactorGuard) - @Get('isadmin') - async isAdmin(@Req() req, @Res() res): Promise + @Post('setadmin') + async setAdmin(@Body('username') username: string, @Req() req, @Res() res): Promise { printCaller("- in "); - const room_name = await this.chatService.getCurrentRoomName(req.user.username); - const fields = ["admins"]; - const room_db = await this.chatService.getRoomByName(room_name, fields); - const is_admin = room_db.admins.includes(req.user.username); + const current_room_name = await this.chatService.getCurrentRoomName(req.user.username); + await this.chatService.setAdmin(req.user.username, username, current_room_name); - res.status(HttpStatus.OK).json({ is_admin: is_admin }); + res.status(HttpStatus.OK).json({ message: `${username} is now admin in room ${current_room_name}` }); printCaller("- out "); } -/* @UseGuards(AuthenticateGuard) @UseGuards(TwoFactorGuard) @Get('isadmin') @@ -117,7 +114,6 @@ export class ChatController { res.status(HttpStatus.OK).json({ is_admin: is_admin }); printCaller("- out "); } -*/ @UseGuards(AuthenticateGuard) @UseGuards(TwoFactorGuard) 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 de5792f5..88736f99 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts @@ -204,8 +204,9 @@ export class ChatService { } room_db.allowed_users.push(username); - printCaller("-- out "); await this.chatroomRepository.save(room_db); + + printCaller("-- out "); } async setPassword(username: string, message: string, room: roomDto, old_password?: string): Promise @@ -274,6 +275,22 @@ export class ChatService { printCaller("-- out "); } + async setAdmin(current_username: string, user_username: string, room_name: string): Promise + { + printCaller("-- in "); + + const room_db = await this.getRoomByName(room_name); + if (!room_db.admins.includes(current_username)) + { + 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); + } + + room_db.admins.push(user_username); + await this.chatroomRepository.save(room_db); + + printCaller("-- out "); + } /* ADDERS ************************************************* */ diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Element_button.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Element_button.svelte index bd5148b4..59e693db 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Element_button.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Element_button.svelte @@ -164,6 +164,7 @@ width: 20px; height: 2px; background-color: black; + background-color: var(--lines_color); } diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room_set.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room_set.svelte index 1b650d49..7e73f499 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room_set.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room_set.svelte @@ -57,6 +57,7 @@ {/if} {#if is_admin === true } +

you are admin in this room

{#if $current_room.protection }

this room is password protected

{#if back === "room_set"} - - {/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 71e7ee08..d2164d98 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 @@ -165,6 +165,17 @@ export async function leave_room(): Promise let response: FetchResponse = await fetch_chat_request('leave', FetchMethod.DELETE); } +export async function make_admin(username): Promise +{ + to_print("in is_admin"); + +to_print("username sent to setadmin:", username); + let response: FetchResponse = await fetch_chat_request('setadmin', FetchMethod.POST, {username: username} ); +to_print("response from setadmin:", response); + + return response; +} + export async function get_is_admin(): Promise { to_print("in is_admin");