From 804cab9c8d0eb0665fa66be6a4a939d15221bb80 Mon Sep 17 00:00:00 2001 From: simplonco Date: Sun, 15 Jan 2023 13:38:12 +0100 Subject: [PATCH 01/33] if password changed, other users cannot continue to send message --- .../api_back/src/chat/chat.controller.ts | 11 +++-- .../nestjs/api_back/src/chat/chat.service.ts | 44 ++++++++++++++----- .../nestjs/api_back/src/chat/dto/room.dto.ts | 5 +++ .../api_back/src/chat/dto/socket.dto.ts | 4 ++ .../src/chat/entities/chatroom.entity.ts | 10 ++--- .../src/pieces/chat/Layout_create.svelte | 2 +- .../src/pieces/chat/Layout_password.svelte | 2 +- .../src/pieces/chat/Layout_room.svelte | 1 - .../src/pieces/chat/Request_rooms.ts | 4 +- .../src/pieces/chat/Request_utils.ts | 3 +- .../api_front/src/pieces/chat/Socket_chat.ts | 8 +++- .../api_front/src/pieces/chat/Store_chat.ts | 4 +- .../api_front/src/pieces/chat/Types_chat.ts | 16 ++++--- .../api_front/src/pieces/chat/Utils_chat.ts | 7 +++ 14 files changed, 86 insertions(+), 35 deletions(-) create mode 100644 srcs/requirements/svelte/api_front/src/pieces/chat/Utils_chat.ts 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 a2570d8d..290dea5a 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts @@ -53,17 +53,19 @@ export class ChatController { let fields = ["name", "type", "users", "protection", "allowed_users"]; const rooms = await this.chatService.getMyRooms(req.user.username, fields); - rooms.forEach(room => { + const ret_rooms = rooms.map(room => + { + let new_room = this.format_room(room); if (room.protection) { if (room.allowed_users.includes(req.user.username)) - room.allowed = true; + new_room.allowed = true; else - room.allowed = false; + new_room.allowed = false; } + return new_room; }); - const ret_rooms = rooms.map(room => this.format_room(room)); res.status(HttpStatus.OK).json({ rooms: ret_rooms }); printCaller("- out "); } @@ -266,6 +268,7 @@ export class ChatController { // inform other connected users let socket: socketDto = this.chatGateway.sockets.get(req.user.username); await socket.to(socket.room).emit('message', "SERVER", message); + await socket.to(socket.room).emit('new_password'); const ret_room = this.format_room(room); res.status(HttpStatus.OK).json({ room: ret_room }); 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 e094920f..92178307 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts @@ -216,14 +216,20 @@ export class ChatService { throw new HttpException({ error: true, code: 'DIRECT_PASSWORD_FORBIDDEN', message: `you cannot set a password in a direct message room` }, HttpStatus.FORBIDDEN); } - const current_room = await this.getRoomByName(room.name); + const room_db = await this.getRoomByName(room.name); + + if (!room_db.admins.includes(username)) + { + console.log("throw error: error: true, code: 'NO_ADMIN', message: 'only admins are allowed to set or modify password'"); + throw new HttpException({ error: true, code: 'NO_ADMIN', message: `only admins are allowed to set or modify password` }, HttpStatus.FORBIDDEN); + } if (!room.password) { console.log("throw error: error: true, code: 'NO_PASSWORD', message: 'this room has no password protection'"); throw new HttpException({ error: true, code: 'NO_PASSWORD', message: `this room has no password protection` }, HttpStatus.FORBIDDEN); } - if (current_room.protection) + if (room_db.protection) { if (room.protection && !old_password) { @@ -232,7 +238,13 @@ export class ChatService { } if (old_password) { - const is_match = await bcrypt.compare(old_password, current_room.hash); + const is_old_match = await bcrypt.compare(room.password, room_db.hash); + if (is_old_match) + { + printCaller(`throw error: error: true, code: 'SAME_PASSWORD', message: 'you provided the same password'`); + throw new HttpException({ error: true, code: 'SAME_PASSWORD', message: `you provided the same password` }, HttpStatus.BAD_REQUEST); + } + const is_match = await bcrypt.compare(old_password, room_db.hash); if (!is_match) { printCaller(`throw error: error: true, code: 'BAD_PASSWORD', message: 'you provided a bad password'`); @@ -248,14 +260,14 @@ export class ChatService { hash = await bcrypt.hash(password, saltOrRounds); // add password to chatroom - current_room.allowed_users = room.allowed_users; - current_room.protection = room.protection; + room_db.allowed_users = room.allowed_users; + room_db.protection = room.protection; if (room.protection) - current_room.hash = hash; + room_db.hash = hash; else - delete current_room.hash; - current_room.messages.push({ name: "SERVER", message: message }); - await this.chatroomRepository.save(current_room); + delete room_db.hash; + room_db.messages.push({ name: "SERVER", message: message }); + await this.chatroomRepository.save(room_db); printCaller("-- out "); } @@ -280,6 +292,7 @@ export class ChatService { newChatroom.name = room.name; newChatroom.type = room.type; newChatroom.owner = username; + newChatroom.admins = [username]; newChatroom.users = room.users; newChatroom.allowed_users = []; newChatroom.protection = false; @@ -416,8 +429,19 @@ export class ChatService { { printCaller("-- in "); - socket.to(socket.room).emit('message', socket.username, message); let room_name = await this.getCurrentRoomName(socket.username); + const current_room = await this.getRoomByName(room_name); + + if (current_room.protection) + { + if (!current_room.allowed_users.includes(socket.username)) + { + socket.emit('message', "SERVER", "your message was not sent because you need to validate the password"); + return; + } + } + + socket.to(socket.room).emit('message', socket.username, message); await this.addMessageToRoom(room_name, socket.username, message); printCaller("-- out "); 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 e3451468..61c6b174 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 @@ -31,6 +31,11 @@ export class roomDto @IsOptional() owner?: string; + @IsArray() + @IsString({ each: true }) + @IsOptional() + admins?: string[]; + @IsString() @IsOptional() client_name?: string; diff --git a/srcs/requirements/nestjs/api_back/src/chat/dto/socket.dto.ts b/srcs/requirements/nestjs/api_back/src/chat/dto/socket.dto.ts index abc5350e..089c02a0 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/dto/socket.dto.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/dto/socket.dto.ts @@ -8,6 +8,10 @@ export class socketDto extends Socket @IsString() room: string; + + @IsBoolean() + @IsOptional() + new_password?: boolean; } 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 82522e1a..337cdc97 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,11 +25,6 @@ export class Chatroom @IsBoolean() protection: boolean = false; - @Column({ nullable: true }) - @IsBoolean() - @IsOptional() - allowed?: boolean; - @Column({ nullable: true }) @IsString() @IsOptional() @@ -38,6 +33,11 @@ export class Chatroom @Column() owner: string; // username + @Column("simple-array") + @IsArray() + @IsString({ each: true }) + admins: string[]; // username + @Column("simple-array") @IsArray() @IsString({ each: true }) 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 99030f01..51482f05 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 @@ -3,7 +3,7 @@ import { msgs, layout, allowed_chars } from './Store_chat'; import { change_room, create_room } from './Request_rooms'; import { onMount } from 'svelte'; - import { FetchResponse } from './Types_chat'; + import type { FetchResponse } from './Types_chat'; import Button from './Element_button.svelte'; import Warning from './Element_warning.svelte'; diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_password.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_password.svelte index d2d87f92..59a3322b 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_password.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_password.svelte @@ -2,7 +2,7 @@ import { layout, current_room } from './Store_chat'; import { change_room, validate_password, change_password, add_password, remove_password } from './Request_rooms'; - import { FetchResponse } from './Types_chat'; + import type { FetchResponse } from './Types_chat'; import Button from './Element_button.svelte'; import Warning from './Element_warning.svelte'; diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room.svelte index 49de63a7..dd105363 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room.svelte @@ -15,7 +15,6 @@ if (msg.length > 0) { socket.emit('message', msg); add_msg("me", msg); - console.log(msgs); } msg = ""; 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 36b98d4c..7bde98a4 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,5 +1,6 @@ import { msgs, user, layout, socket, current_room } from './Store_chat'; -import { Room, FetchResponse, FetchMethod } from './Types_chat'; +import type { Room, FetchResponse } from './Types_chat'; +import { FetchMethod } from './Utils_chat'; import { fetch_chat_request, set_client_name_on_room, fill_fetch_response } from './Request_utils'; export async function get_room_messages() @@ -9,7 +10,6 @@ export async function get_room_messages() let response: FetchResponse = await fetch_chat_request('messages', FetchMethod.GET); const messages = response.messages; - if (messages === null) return; diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Request_utils.ts b/srcs/requirements/svelte/api_front/src/pieces/chat/Request_utils.ts index 4ef90b5b..4ce66ae1 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Request_utils.ts +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Request_utils.ts @@ -1,5 +1,6 @@ import { user } from './Store_chat'; -import { Room, FetchResponse, FetchInit, FetchMethod } from './Types_chat'; +import type { Room, FetchResponse, FetchInit } from './Types_chat'; +import type { FetchMethod } from './Utils_chat'; export async function fetch_chat_request(route: string, fetchMethod: FetchMethod, param?: any) { diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Socket_chat.ts b/srcs/requirements/svelte/api_front/src/pieces/chat/Socket_chat.ts index 18d0a322..58341c9e 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Socket_chat.ts +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Socket_chat.ts @@ -1,6 +1,6 @@ import io from 'socket.io-client'; import { set_socket, set_user } from './Store_chat'; -import { user, msgs } from './Store_chat'; +import { user, msgs, layout } from './Store_chat'; const address = `http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}`; @@ -34,6 +34,12 @@ function socket_events(socket) from = "me"; msgs.update(msgs => [...msgs, { name: from, message: message }]); }); + + socket.on('new_password', function() + { + console.log("notification new password:"); + layout.set("password"); + }); } function socket_states(socket) diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Store_chat.ts b/srcs/requirements/svelte/api_front/src/pieces/chat/Store_chat.ts index 2b74f87c..b3aaf78b 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Store_chat.ts +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Store_chat.ts @@ -1,9 +1,9 @@ import { writable } from 'svelte/store'; -import { Room } from './Types_chat'; +import type { Room, Message } from './Types_chat'; export let msgs = writable([]); export let layout = writable("close"); -export let current_room: Room = writable({ +export let current_room = writable({ name: "", type: "", protection: false, 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 82f5c419..6741111f 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 @@ -8,13 +8,22 @@ export interface Room allowed?: boolean; } +export interface Message +{ + name: string; + type: string; +} + export interface FetchResponse { status: number; error?: boolean; code?: string; message?: string; + messages?: Message[]; + users?: string[]; room?: Room; + rooms?: Room[]; } export interface FetchInit @@ -24,10 +33,3 @@ export interface FetchInit body?: string; } -export enum FetchMethod -{ - POST = 'POST', - GET = 'GET', - DELETE = 'DELETE', -} - diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Utils_chat.ts b/srcs/requirements/svelte/api_front/src/pieces/chat/Utils_chat.ts new file mode 100644 index 00000000..706de416 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Utils_chat.ts @@ -0,0 +1,7 @@ +export enum FetchMethod +{ + POST = 'POST', + GET = 'GET', + DELETE = 'DELETE', +} + From ffdc3839b942422bf9600c45cee11af39442153c Mon Sep 17 00:00:00 2001 From: simplonco Date: Sun, 15 Jan 2023 14:07:34 +0100 Subject: [PATCH 02/33] abord trying to live informe for new rooms --- srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts | 1 + srcs/requirements/nestjs/api_back/src/chat/chat.service.ts | 2 ++ .../svelte/api_front/src/pieces/chat/Socket_chat.ts | 3 +-- .../svelte/api_front/src/pieces/chat/Store_chat.ts | 2 ++ 4 files changed, 6 insertions(+), 2 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 290dea5a..e34f810e 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts @@ -290,6 +290,7 @@ export class ChatController { // inform other connected users let socket: socketDto = this.chatGateway.sockets.get(req.user.username); await socket.to(socket.room).emit('message', "SERVER", message); + await socket.to(socket.room).emit('new_password'); const ret_room = this.format_room(room); res.status(HttpStatus.OK).json({ room: ret_room }); 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 92178307..79549595 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts @@ -35,6 +35,8 @@ export class ChatService { { printCaller("-- in "); + //await this.sleep(1000); + const queryBuilder = this.chatroomRepository .createQueryBuilder('chatroom') .where('chatroom.users LIKE :user_name', { user_name: `%${username}%` }); diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Socket_chat.ts b/srcs/requirements/svelte/api_front/src/pieces/chat/Socket_chat.ts index 58341c9e..a929249e 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Socket_chat.ts +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Socket_chat.ts @@ -1,6 +1,5 @@ import io from 'socket.io-client'; -import { set_socket, set_user } from './Store_chat'; -import { user, msgs, layout } from './Store_chat'; +import { user, msgs, layout, set_socket, set_user } from './Store_chat'; const address = `http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}`; diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Store_chat.ts b/srcs/requirements/svelte/api_front/src/pieces/chat/Store_chat.ts index b3aaf78b..7c7b4152 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Store_chat.ts +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Store_chat.ts @@ -2,6 +2,8 @@ import { writable } from 'svelte/store'; import type { Room, Message } from './Types_chat'; export let msgs = writable([]); +export let my_rooms = writable([]); +export let all_rooms = writable([]); export let layout = writable("close"); export let current_room = writable({ name: "", From 83c07451f9a6063f9a2bef3bdcaae817b0f1e4f8 Mon Sep 17 00:00:00 2001 From: simplonco Date: Sun, 15 Jan 2023 16:26:53 +0100 Subject: [PATCH 03/33] added is admin --- .../api_back/src/chat/chat.controller.ts | 35 ++++++++++++++++ .../nestjs/api_back/src/chat/chat.service.ts | 3 ++ .../src/pieces/chat/Layout_room_set.svelte | 40 +++++++++++-------- .../src/pieces/chat/Layout_user.svelte | 20 ++++++---- .../src/pieces/chat/Request_rooms.ts | 12 +++++- .../api_front/src/pieces/chat/Store_chat.ts | 1 + .../api_front/src/pieces/chat/Types_chat.ts | 1 + 7 files changed, 86 insertions(+), 26 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 e34f810e..57c82afb 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts @@ -32,6 +32,7 @@ export class ChatController { new_room.users = room.users; if (room.allowed) new_room.allowed = room.allowed; + return new_room; } @@ -84,6 +85,40 @@ export class ChatController { printCaller("- out "); } + @UseGuards(AuthenticateGuard) + @UseGuards(TwoFactorGuard) + @Get('isadmin') + async isAdmin(@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); + + res.status(HttpStatus.OK).json({ is_admin: is_admin }); + printCaller("- out "); + } + +/* + @UseGuards(AuthenticateGuard) + @UseGuards(TwoFactorGuard) + @Get('isadmin') + async isAdmin(@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); + + res.status(HttpStatus.OK).json({ is_admin: is_admin }); + printCaller("- out "); + } +*/ + @UseGuards(AuthenticateGuard) @UseGuards(TwoFactorGuard) @Get('current') 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 79549595..de5792f5 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts @@ -432,6 +432,8 @@ export class ChatService { printCaller("-- in "); let room_name = await this.getCurrentRoomName(socket.username); + + /* const current_room = await this.getRoomByName(room_name); if (current_room.protection) @@ -442,6 +444,7 @@ export class ChatService { return; } } + */ socket.to(socket.room).emit('message', socket.username, message); await this.addMessageToRoom(room_name, socket.username, message); 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 07f1c1ae..2f130f53 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 @@ -1,18 +1,22 @@ - + diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplay.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplay.svelte index 59791b1b..efe486b0 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplay.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplay.svelte @@ -4,8 +4,6 @@ import GenerateUserDisplay from '../../pieces/GenerateUserDisplay.svelte'; import { push } from 'svelte-spa-router'; - import Chat from '../../pieces/chat/Chat.svelte'; - let user; onMount( async() => { @@ -17,8 +15,6 @@ - -
{#if user !== undefined} diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte index ad691fc8..49c7697b 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte @@ -2,14 +2,35 @@ import Layouts from './Chat_layouts.svelte'; import { init_socket } from './Socket_chat'; + import { location } from 'svelte-spa-router'; - export let color = "transparent"; - init_socket(); + let color = "transparent"; + + console.log("location:",$location); + if ($location !== '/') + init_socket(); + + function change_color(loc) + { + console.log("change color, location:", loc); + if (loc.startsWith("/game")) + console.log("in change"); + if (loc.startsWith("/spectator")) + console.log("in change"); + if (loc.startsWith("/ranking")) + console.log("in change"); + if (loc.startsWith("/profile")) + console.log("in change"); + } + + $: change_color($location); - +{#if $location !== '/'} + +{/if} diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_user.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_user.svelte index 801720ef..8f1eac70 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_user.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_user.svelte @@ -56,9 +56,6 @@ - {#if back === "room_set"} {#if back === "room_set"} - - {/if} From 77c420a17471bb567382b08fbedc26bc161d3a0a Mon Sep 17 00:00:00 2001 From: simplonco Date: Sun, 15 Jan 2023 19:50:27 +0100 Subject: [PATCH 07/33] 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"); From b4bdc2080b12a37fe5b7a77ad15813d3fb446387 Mon Sep 17 00:00:00 2001 From: simplonco Date: Sun, 15 Jan 2023 20:45:03 +0100 Subject: [PATCH 08/33] user admin visible --- .../api_back/src/chat/chat.controller.ts | 19 ++++++++++++++++--- .../src/pieces/chat/Element_button.svelte | 11 +++++++++++ .../src/pieces/chat/Layout_room_set.svelte | 10 +++++++--- .../api_front/src/pieces/chat/Types_chat.ts | 8 +++++++- 4 files changed, 41 insertions(+), 7 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 7456b26f..0e226c7b 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts @@ -412,14 +412,27 @@ export class ChatController { const room_name = await this.chatService.getCurrentRoomName(req.user.username); const room = await this.chatService.getRoomByName(room_name); const users = room.users; + const admins = room.admins; let index = users.indexOf(req.user.username); if (index > -1) - { users.splice(index, 1); - } - res.status(HttpStatus.OK).json({ users: users }); + let ret_users = users.map(username => + { + let new_user = + { + name: username, + isadmin: false, + }; + if (admins.includes(username)) + new_user.isadmin = true; + + return new_user; + }); + console.log("ret_user:", ret_users); + + res.status(HttpStatus.OK).json({ users: ret_users }); printCaller("- out "); } 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 59e693db..594bc0f5 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 @@ -216,5 +216,16 @@ } + /* .admin + */ + .admin p { + flex-direction: row; + } + .admin :global(span) { + margin-left: auto; + color: gray; + } + + 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 7e73f499..84580ece 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 @@ -2,12 +2,13 @@ import { layout, current_room, settings_user } from './Store_chat'; import { get_room_users, leave_room, get_is_admin } from './Request_rooms'; + import { User } from './Types_chat'; import { to_print } from './Utils_chat'; import Button from './Element_button.svelte'; export let back = ""; - let users = get_room_users(); + let users: User[] = get_room_users(); let is_admin = false; get_is_admin().then(response => is_admin = response); @@ -81,8 +82,11 @@

list of users is loading...

{:then users} {#each users as user} - {/each} {/await} 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 065e8d60..02a455d8 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 @@ -14,6 +14,12 @@ export interface Message type: string; } +export interface User +{ + name: string; + isadmin: boolean; +} + export interface FetchResponse { status: number; @@ -21,7 +27,7 @@ export interface FetchResponse code?: string; message?: string; messages?: Message[]; - users?: string[]; + users?: User[]; room?: Room; rooms?: Room[]; is_admin?: boolean; From eacdb5636ad8d360a438191814a3b021e61da228 Mon Sep 17 00:00:00 2001 From: simplonco Date: Sun, 15 Jan 2023 21:23:34 +0100 Subject: [PATCH 09/33] wip styles --- .../api_front/src/pieces/chat/Chat.svelte | 69 ++++++++++++++----- .../src/pieces/chat/Chat_box_css.svelte | 21 ++++-- .../src/pieces/chat/Chat_layouts.svelte | 6 +- .../src/pieces/chat/Element_button.svelte | 30 ++++---- 4 files changed, 85 insertions(+), 41 deletions(-) diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte index ef094ec2..3787557a 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte @@ -7,11 +7,39 @@ let style = { - lines_width: "1px", - lines_color: "black", - bg_color: "bisque", + lines_width: "1px", + lines_color: "rgb(30, 30, 30)", + lines_light_color: "rgb(100, 100, 100)", + bg_color: "bisque", + + btn_color: "rgb(220, 220, 220)", + btn_color_hover: "rgb(200, 200, 200)", + btn_color_active: "rgb(190, 190, 190)", + btn_color_border: "rgb(150, 150, 150)", + + btn_light_color: "rgb(235, 235, 235)", + btn_light_color_hover: "rgb(220, 220, 220)", + btn_light_color_active: "rgb(210, 210, 210)", + btn_color_border: "rgb(200, 200, 200)", } + let style_dark = + { + lines_width: "2px", + lines_color: "rgb(200, 200, 200)", + lines_light_color: "rgb(100, 100, 100)", + bg_color: "rgb(35, 35, 35)", + + btn_color: "rgb(220, 220, 220)", + btn_color_hover: "rgb(200, 200, 200)", + btn_color_active: "rgb(190, 190, 190)", + btn_color_border: "rgb(150, 150, 150)", + + btn_light_color: "rgb(235, 235, 235)", + btn_light_color_hover: "rgb(220, 220, 220)", + btn_light_color_active: "rgb(210, 210, 210)", + btn_color_border: "rgb(200, 200, 200)", + } console.log("location:",$location); if ($location !== '/') @@ -22,27 +50,21 @@ console.log("change color, location:", loc); if (loc.startsWith("/game")) { - style.lines_width = "2px"; - style.lines_color = "white"; - style.bg_color = "#222425"; + // style here + style = style_dark; } if (loc.startsWith("/spectator")) { - style.lines_width = "1px"; - style.lines_color = "black"; - style.bg_color = "bisque"; + // style here + style = style_dark; } if (loc.startsWith("/ranking")) { - style.lines_width = "1px"; - style.lines_color = "black"; - style.bg_color = "bisque"; + // style here } if (loc.startsWith("/profile")) { - style.lines_width = "1px"; - style.lines_color = "black"; - style.bg_color = "bisque"; + // style here } } @@ -54,7 +76,22 @@ - + {/if} diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat_box_css.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat_box_css.svelte index b337aaf3..395c819e 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat_box_css.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat_box_css.svelte @@ -40,9 +40,20 @@ /* gobal variables styles - --lines_width - --lines_color - --bg_color + --lines_width + --lines_color + --lines_light_color + --bg_color + + --btn_color + --btn_color_hover + --btn_color_active + --btn_color_border + + --btn_light_color + --btn_light_color_hover + --btn_light_color_active + --btn_light_color_border */ @@ -108,7 +119,7 @@ } .chat_box :global(.__show_if_only_child:only-child) { display: flex; - color: rgb(100, 100, 100); + color: var(--lines_light_color); } @@ -135,7 +146,7 @@ .chat_box :global(.__check_change_next:checked ~ .__to_block), .chat_box :global(.__check_change_next:checked ~ .__to_block *) { pointer-events: none; - color: rgb(100, 100, 100); + color: var(--lines_light_color); } .chat_box :global(.__to_show) { display: none; diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat_layouts.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat_layouts.svelte index 55ae3216..bb8cbcd2 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat_layouts.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat_layouts.svelte @@ -19,7 +19,6 @@ /* global variables */ - export let color; let room = ""; let admin = false; let layouts = ["home", "home"]; @@ -28,8 +27,6 @@ */ function set_layouts($layout) { - //console.log("layouts:", layouts); - //console.log("layout:", $layout); if ($layout.length === 0) layout.set(layouts[0]); else if ($layout === "close") @@ -40,13 +37,12 @@ layouts = [$layout, "home"]; else layouts = [$layout, layouts[0]]; - //console.log("- layouts:", layouts); } $: set_layouts($layout); - + {#if $layout === "home"} 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 594bc0f5..e1d3fc14 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 @@ -50,25 +50,26 @@ cursor: pointer; outline: none; border: none; - background-color: rgb(220, 220, 220); + background-color: var(--btn_color); } - button p { + + :global(.chat_box) button p { width: 100%; margin: auto; text-align: center; + color: var(--lines_light_color); } button:hover { - background-color: rgb(200, 200, 200); + background-color: var(--btn_color_hover); } button:active { - background-color: rgb(190, 190, 190); + background-color: var(--btn_color_active); } - /* .list */ .list:not(:hover) { - background-color: rgb(240, 240, 240); + background-color: var(--btn_light_color); } .list p { text-align: left; @@ -100,19 +101,19 @@ /* .light */ .light { - background-color: rgb(233, 233, 233); + background-color: var(--btn_light_color); } .light.border { - border: 1px solid rgb(204, 204, 204); + border: var(--lines_width) solid var(--btn_light_color_border); } .light:hover { - background-color: rgb(220, 220, 220); + background-color: var(--btn_light_color_hover); } .light.border:hover { - border-color: rgb(200, 200, 200); + border-color: var(--btn_light_color_border); } .light:active { - background-color: rgb(210, 210, 210); + background-color: var(--btn_light_color_active); } @@ -163,7 +164,6 @@ left: 5px; width: 20px; height: 2px; - background-color: black; background-color: var(--lines_color); } @@ -200,7 +200,7 @@ width: 13px; height: 10px; border-radius: 2px; - background-color: rgb(110, 110, 110); + background-color: var(--lines_color); } .blocked::after { content: ""; @@ -212,7 +212,7 @@ height: 13px; border-radius: 5px; box-sizing: border-box; - border: 3px solid rgb(110, 110, 110); + border: 3px solid var(--lines_color); } @@ -223,7 +223,7 @@ } .admin :global(span) { margin-left: auto; - color: gray; + color: var(--lines_light_color); } From 170a1f0cd176db6c447420cdb2aab04d4ba7d06e Mon Sep 17 00:00:00 2001 From: simplonco Date: Sun, 15 Jan 2023 22:02:32 +0100 Subject: [PATCH 10/33] wip styles --- .../api_front/src/pieces/chat/Chat.svelte | 44 ++++++++++++------- .../src/pieces/chat/Chat_box_css.svelte | 15 ------- .../src/pieces/chat/Element_button.svelte | 16 +++++-- .../src/pieces/chat/Element_msg.svelte | 21 +++++++-- .../src/pieces/chat/Layout_room.svelte | 4 +- 5 files changed, 60 insertions(+), 40 deletions(-) diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte index 3787557a..3987e4ab 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte @@ -4,13 +4,13 @@ import { init_socket } from './Socket_chat'; import { location } from 'svelte-spa-router'; - - let style = + let style_light = { lines_width: "1px", lines_color: "rgb(30, 30, 30)", lines_light_color: "rgb(100, 100, 100)", bg_color: "bisque", + bg_light_color: "bisque", btn_color: "rgb(220, 220, 220)", btn_color_hover: "rgb(200, 200, 200)", @@ -21,14 +21,22 @@ btn_light_color_hover: "rgb(220, 220, 220)", btn_light_color_active: "rgb(210, 210, 210)", btn_color_border: "rgb(200, 200, 200)", - } + chat_me_color: "rgb(210, 110, 10)", + chat_me_bg_color: "rgb(210, 210, 210)", + chat_other_color: "rgb(210, 210, 210)", + chat_other_bg_color: "rgb(210, 210, 210)", + chat_name_color: "rgb(210, 210, 210)", + chat_input_color: "rgb(210, 210, 210)", + chat_input_bg_color: "rgb(210, 210, 210)", + } let style_dark = { lines_width: "2px", lines_color: "rgb(200, 200, 200)", - lines_light_color: "rgb(100, 100, 100)", + lines_light_color: "rgb(80, 80, 80)", bg_color: "rgb(35, 35, 35)", + bg_light_color: "rgb(35, 35, 35)", btn_color: "rgb(220, 220, 220)", btn_color_hover: "rgb(200, 200, 200)", @@ -39,8 +47,13 @@ btn_light_color_hover: "rgb(220, 220, 220)", btn_light_color_active: "rgb(210, 210, 210)", btn_color_border: "rgb(200, 200, 200)", + + chat_me_color: "rgb(210, 110, 10)", + chat_other_color: "rgb(210, 210, 210)", } + let style = style_light; + console.log("location:",$location); if ($location !== '/') init_socket(); @@ -49,23 +62,13 @@ { console.log("change color, location:", loc); if (loc.startsWith("/game")) - { - // style here style = style_dark; - } if (loc.startsWith("/spectator")) - { - // style here style = style_dark; - } if (loc.startsWith("/ranking")) - { - // style here - } + style = style_light; if (loc.startsWith("/profile")) - { - // style here - } + style = style_light; } $: change_style($location); @@ -81,6 +84,7 @@ --lines_color={style.lines_color} --lines_light_color={style.lines_light_color} --bg_color={style.bg_color} + --bg_light_color={style.bg_light_color} --btn_color={style.btn_color} --btn_color_hover={style.btn_color_hover} @@ -91,6 +95,14 @@ --btn_light_color_hover={style.btn_light_color_hover} --btn_light_color_active={style.btn_light_color_active} --btn_light_color_border={style.btn_color_border} + + --chat_me_color={style.chat_me_color} + --chat_me_bg_color={style.chat_me_bg_color} + --chat_other_color={style.chat_other_color} + --chat_other_bg_color={style.chat_other_bg_color} + --chat_name_color={style.chat_name_color} + --chat_input_color={style.chat_input_color} + --chat_input_bg_color={style.chat_input_bg_color} /> {/if} diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat_box_css.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat_box_css.svelte index 395c819e..625d6b1d 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat_box_css.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat_box_css.svelte @@ -39,21 +39,6 @@ /* gobal variables styles - - --lines_width - --lines_color - --lines_light_color - --bg_color - - --btn_color - --btn_color_hover - --btn_color_active - --btn_color_border - - --btn_light_color - --btn_light_color_hover - --btn_light_color_active - --btn_light_color_border */ 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 e1d3fc14..81681719 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 @@ -50,13 +50,16 @@ cursor: pointer; outline: none; border: none; + border-radius: 0px; background-color: var(--btn_color); } - :global(.chat_box) button p { + button p { width: 100%; margin: auto; text-align: center; + } + :global(.chat_box) button p { color: var(--lines_light_color); } button:hover { @@ -81,6 +84,9 @@ .transparent:not(:hover) { background-color: transparent; } + :global(.chat_box) button.transparent p { + color: var(--lines_color); + } /* .deactivated @@ -89,6 +95,9 @@ background-color: transparent; pointer-events: none; } + :global(.chat_box) button.deactivate p { + color: var(--lines_color); + } /* .border @@ -152,6 +161,7 @@ text-align: center; transform: translateY(-50%); cursor: pointer; + color: var(--lines_color); } @@ -177,8 +187,8 @@ left: 6px; width: 14px; height: 14px; - border-left: 1px solid black; - border-bottom: 1px solid black; + border-left: var(--lines_width) solid var(--lines_color); + border-bottom: var(--lines_width) solid var(--lines_color); transform: rotate(45deg); } diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Element_msg.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Element_msg.svelte index b61b4cc9..a6ecff3f 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Element_msg.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Element_msg.svelte @@ -10,6 +10,15 @@
diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room.svelte index dd105363..f0cd943f 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room.svelte @@ -111,8 +111,8 @@ overflow-x: hidden; overflow-y: scroll; - background-color: white; - border: 1px solid black; + background-color: var(--bg_color); + border: var(--lines_width) solid var(--lines_color); } .grid_box .text_area:focus { height: auto; From d60f2f0c9f46dc0bd71d4250ff043d4f92d8a99b Mon Sep 17 00:00:00 2001 From: simplonco Date: Sun, 15 Jan 2023 23:52:22 +0100 Subject: [PATCH 11/33] fixed user and room name pbm + style ok --- .../api_front/src/pieces/chat/Chat.svelte | 33 +++++++++---------- .../src/pieces/chat/Element_msg.svelte | 4 +-- .../src/pieces/chat/Layout_room.svelte | 7 ++-- .../src/pieces/chat/Layout_room_set.svelte | 4 +-- .../src/pieces/chat/Layout_user.svelte | 2 +- 5 files changed, 26 insertions(+), 24 deletions(-) diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte index 3987e4ab..91df88d4 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte @@ -8,7 +8,7 @@ { lines_width: "1px", lines_color: "rgb(30, 30, 30)", - lines_light_color: "rgb(100, 100, 100)", + lines_light_color: "rgb(90, 90, 90)", bg_color: "bisque", bg_light_color: "bisque", @@ -22,19 +22,18 @@ btn_light_color_active: "rgb(210, 210, 210)", btn_color_border: "rgb(200, 200, 200)", - chat_me_color: "rgb(210, 110, 10)", - chat_me_bg_color: "rgb(210, 210, 210)", - chat_other_color: "rgb(210, 210, 210)", - chat_other_bg_color: "rgb(210, 210, 210)", - chat_name_color: "rgb(210, 210, 210)", - chat_input_color: "rgb(210, 210, 210)", - chat_input_bg_color: "rgb(210, 210, 210)", + chat_me_color: "rgb(250, 230, 220)", + chat_me_bg_color: "rgb(210, 105, 30)", + chat_name_color: "rgb(230, 230, 230)", + chat_other_color: "rgb(250, 250, 250)", + chat_other_bg_color: "rgb(190, 130, 70)", + chat_serveur_color: "rgb(110, 110, 110)", } let style_dark = { lines_width: "2px", lines_color: "rgb(200, 200, 200)", - lines_light_color: "rgb(80, 80, 80)", + lines_light_color: "rgb(100, 100, 100)", bg_color: "rgb(35, 35, 35)", bg_light_color: "rgb(35, 35, 35)", @@ -48,8 +47,12 @@ btn_light_color_active: "rgb(210, 210, 210)", btn_color_border: "rgb(200, 200, 200)", - chat_me_color: "rgb(210, 110, 10)", - chat_other_color: "rgb(210, 210, 210)", + chat_me_color: "rgb(230, 230, 230)", + chat_me_bg_color: "rgb(110, 110, 110)", + chat_name_color: "rgb(110, 110, 110)", + chat_other_color: "rgb( 90, 90, 90)", + chat_other_bg_color: "rgb(210, 210, 210)", + chat_serveur_color: "rgb(190, 190, 190)", } let style = style_light; @@ -76,9 +79,6 @@ {#if $location !== '/'} - {/if} diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Element_msg.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Element_msg.svelte index a6ecff3f..88ccb05d 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Element_msg.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Element_msg.svelte @@ -49,7 +49,7 @@ .chat_msg p.msg :global(*) { display: inline; } - /* msg perso + /* me msg */ .chat_msg.me { margin-right: 0px; @@ -74,7 +74,7 @@ .chat_msg.SERVER p.msg { margin: 0px auto; font-size: 12px; - color: var(--lines_light_color); + color: var(--chat_serveur_color); } diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room.svelte index f0cd943f..ee95672d 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_room.svelte @@ -41,7 +41,7 @@ @@ -114,6 +114,9 @@ background-color: var(--bg_color); border: var(--lines_width) solid var(--lines_color); } + .grid_box .text_area { + color: var(--lines_color); + } .grid_box .text_area:focus { height: auto; min-height: 100%; @@ -128,7 +131,7 @@ */ .grid_box .panel_msg { flex-direction: column-reverse; - border: 1px solid black; + border: var(--lines_width) solid var(--lines_color); } .grid_box .msg_thread { width: 100%; 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 84580ece..c0e6aac0 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 @@ -39,7 +39,7 @@ @@ -82,7 +82,7 @@

list of users is loading...

{:then users} {#each users as user} - {/if} From 134fa0fef4b77b7bb6048845a1446430b7a7278a Mon Sep 17 00:00:00 2001 From: simplonco Date: Mon, 16 Jan 2023 00:34:20 +0100 Subject: [PATCH 12/33] admin messages and not in direct --- .../nestjs/api_back/src/chat/chat.controller.ts | 6 ++++++ srcs/requirements/nestjs/api_back/src/chat/chat.service.ts | 5 +++++ .../svelte/api_front/src/pieces/chat/Chat.svelte | 2 +- .../svelte/api_front/src/pieces/chat/Layout_user.svelte | 4 ++-- 4 files changed, 14 insertions(+), 3 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 0e226c7b..acca6f4f 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts @@ -95,6 +95,12 @@ export class ChatController { const current_room_name = await this.chatService.getCurrentRoomName(req.user.username); await this.chatService.setAdmin(req.user.username, username, current_room_name); + let message = `${username} is now admin`; + await this.chatService.addMessageToRoom(current_room_name, "SERVER", message); + let socket: socketDto = this.chatGateway.sockets.get(req.user.username); + let server = this.chatGateway.server; + await server.in(socket.room).emit('message', "SERVER", message); + res.status(HttpStatus.OK).json({ message: `${username} is now admin in room ${current_room_name}` }); 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 88736f99..9d26f308 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts @@ -280,6 +280,11 @@ export class ChatService { printCaller("-- in "); const room_db = await this.getRoomByName(room_name); + if (room_db.type === "direct") + { + printCaller(`throw error: error: true, code: 'NO_DIRECT_ADMIN', message: 'there are no admins in direct messages'`); + throw new HttpException({ error: true, code: 'NO_DIRECT_ADMIN', message: `there are no admins in direct messages` }, HttpStatus.UNAUTHORIZED); + } 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'`); diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte index 91df88d4..1e8c9fc9 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Chat.svelte @@ -8,7 +8,7 @@ { lines_width: "1px", lines_color: "rgb(30, 30, 30)", - lines_light_color: "rgb(90, 90, 90)", + lines_light_color: "rgb(70, 70, 70)", bg_color: "bisque", bg_light_color: "bisque", diff --git a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_user.svelte b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_user.svelte index 838d2293..392525c6 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_user.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/chat/Layout_user.svelte @@ -35,10 +35,10 @@ { to_print("in make_user_admin"); response = await make_admin($settings_user); - //show errors if (response.status >= 300 || response.error) show_error = response.error; + layout.set("room"); } async function ban_mute_user() { @@ -84,7 +84,7 @@ game invitation - {#if back === "room_set"} + {#if back === "room_set" && $current_room.type !== "direct"} From 9a08c305cb07270710317666ba04f290258d3545 Mon Sep 17 00:00:00 2001 From: simplonco Date: Mon, 16 Jan 2023 00:40:45 +0100 Subject: [PATCH 13/33] small ss adjusment --- .../src/pieces/chat/Element_button.svelte | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) 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 81681719..2e4d3173 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 @@ -29,17 +29,6 @@