From 31885d7910fbc00546e3b487021ab335365444db Mon Sep 17 00:00:00 2001 From: Thomas Chazot Date: Mon, 27 Nov 2023 09:07:16 +0100 Subject: [PATCH 1/8] =?UTF-8?q?Photo=20de=20profile=20des=20users=20sur=20?= =?UTF-8?q?toutes=20les=20pages=20+=20script=20pour=20lancer=20les=20deux?= =?UTF-8?q?=20servers=20en=20m=C3=AAme=20temps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Components/PlayerList.tsx | 2 +- cryptide_project/src/ImageHelper.ts | 14 +++++++++ cryptide_project/src/Pages/Home.tsx | 12 ++++++-- cryptide_project/src/Pages/Lobby.tsx | 13 ++++++++- cryptide_project/src/Pages/Play.tsx | 29 ++++++++++++++++--- cryptide_project/src/model/User.tsx | 9 ++---- cryptide_project/startServers.sh | 5 ++++ 7 files changed, 70 insertions(+), 14 deletions(-) create mode 100644 cryptide_project/src/ImageHelper.ts create mode 100755 cryptide_project/startServers.sh diff --git a/cryptide_project/src/Components/PlayerList.tsx b/cryptide_project/src/Components/PlayerList.tsx index 6834eea..3dc36d7 100644 --- a/cryptide_project/src/Components/PlayerList.tsx +++ b/cryptide_project/src/Components/PlayerList.tsx @@ -25,7 +25,7 @@ const PlayerList: React.FC = ({ players, playerTouched, setPlay { //@ts-ignore players.map((player, index) => ( - player.id!=socket.id && + player.id!=socket.id && )) } diff --git a/cryptide_project/src/ImageHelper.ts b/cryptide_project/src/ImageHelper.ts new file mode 100644 index 0000000..7400876 --- /dev/null +++ b/cryptide_project/src/ImageHelper.ts @@ -0,0 +1,14 @@ +async function loadImageAsync(url: string): Promise { + try { + const response = await fetch(url); + const blob = await response.blob(); + + // Faire quelque chose avec le blob, par exemple, créer une URL blob + const blobUrl = URL.createObjectURL(blob); + return blobUrl + } catch (error) { + throw new Error("Erreur lors du chargement de l'image :"); + } + } + +export {loadImageAsync} \ No newline at end of file diff --git a/cryptide_project/src/Pages/Home.tsx b/cryptide_project/src/Pages/Home.tsx index 1c16b9e..6016578 100644 --- a/cryptide_project/src/Pages/Home.tsx +++ b/cryptide_project/src/Pages/Home.tsx @@ -7,6 +7,9 @@ import { useTheme } from '../Style/ThemeContext'; import { Link } from 'react-router-dom'; import { FormattedMessage } from 'react-intl'; import ButtonImgNav from '../Components/ButtonImgNav'; +import defaultImg from "../res/img/Person.png" +import {loadImageAsync} from "../ImageHelper" + // @ts-ignore function Home() { @@ -18,11 +21,16 @@ function Home() { if (user == null){ manager.userService.fetchUserInformation().then(([user, loggedIn]) =>{ if (user!=null){ - setUserData(user) if (loggedIn){ login() + setUserData(user) + } + else{ + loadImageAsync(defaultImg).then((blob) => { + user.profilePicture=blob + setUserData(user) + }) } - console.log('isLoggedIn : ', isLoggedIn); } }) } diff --git a/cryptide_project/src/Pages/Lobby.tsx b/cryptide_project/src/Pages/Lobby.tsx index 5c4b5df..5219059 100644 --- a/cryptide_project/src/Pages/Lobby.tsx +++ b/cryptide_project/src/Pages/Lobby.tsx @@ -27,6 +27,8 @@ import Bot from '../model/Bot'; import User from '../model/User'; import { useAuth } from '../Contexts/AuthContext'; import SessionService from '../services/SessionService'; +import defaultImg from "../res/img/Person.png" +import {loadImageAsync} from "../ImageHelper" let gameStarted = false @@ -48,6 +50,8 @@ function Lobby() { socket.emit("lobby joined", room, new EasyBot("botId" + Math.floor(Math.random() * 1000), "Bot" + Math.floor(Math.random() * 100), "").toJson()) } + + useEffect(() => { if (first){ first=false @@ -55,9 +59,15 @@ function Lobby() { if (user == null){ manager.userService.fetchUserInformation().then(([u, loggedIn]) => { if (u!=null){ - setUserData(u) if (loggedIn){ login() + setUserData(u) + } + else{ + loadImageAsync(defaultImg).then((blob) => { + u.profilePicture=blob + setUserData(u) + }) } socket.emit("lobby joined", room, u.toJson()) } @@ -108,6 +118,7 @@ function Lobby() { for (const p of tab){ tmpTab.push(JSONParser.JSONToPlayer(p)) } + console.log(tmpTab) setPlayersData(tmpTab) }) diff --git a/cryptide_project/src/Pages/Play.tsx b/cryptide_project/src/Pages/Play.tsx index dcc9361..bb4a672 100644 --- a/cryptide_project/src/Pages/Play.tsx +++ b/cryptide_project/src/Pages/Play.tsx @@ -12,8 +12,6 @@ import ButtonImgNav from "../Components/ButtonImgNav" import SessionService from "../services/SessionService"; /* Img */ -import Person from '../res/img/Person.png'; - /* Icon */ import { socket } from '../SocketConfig'; import { useNavigate } from 'react-router-dom'; @@ -21,16 +19,39 @@ import GameCreator from '../model/GameCreator'; import { useGame } from '../Contexts/GameContext'; import ScoreBoard from '../Components/ScoreBoard'; +import defaultImg from "../res/img/Person.png" + /* Types */ import User from '../model/User'; +import { loadImageAsync } from '../ImageHelper'; function Play() { const theme=useTheme() - const {user} = useAuth(); + const {isLoggedIn, login, user, setUserData, manager } = useAuth(); const { setIndicesData, setPersonData, setPersonNetworkData } = useGame(); + useEffect(() => { + + if (user == null){ + manager.userService.fetchUserInformation().then(([user, loggedIn]) =>{ + if (user!=null){ + if (loggedIn){ + login() + setUserData(user) + } + else{ + loadImageAsync(defaultImg).then((blob) => { + user.profilePicture=blob + setUserData(user) + }) + } + } + }) + } + }, [isLoggedIn]); + const [room, setRoom] = useState(null); const navigate = useNavigate(); @@ -82,7 +103,7 @@ function Play() { {/* */} - +
diff --git a/cryptide_project/src/model/User.tsx b/cryptide_project/src/model/User.tsx index 66573d8..d112003 100644 --- a/cryptide_project/src/model/User.tsx +++ b/cryptide_project/src/model/User.tsx @@ -1,16 +1,12 @@ import Player from "./Player"; -import defaultpdp from "../res/img/Person.png" - +import defaultImg from "../res/img/Person.png" class User extends Player{ public soloStats: any public onlineStats: any constructor(id: string, pseudo: string, profilePicture: string, soloStats: any, onlineStats: any){ - if (profilePicture == ""){ - profilePicture = defaultpdp - } - super(id, pseudo, profilePicture) + super(id, pseudo, profilePicture || defaultImg) this.soloStats=soloStats this.onlineStats=onlineStats } @@ -20,6 +16,7 @@ class User extends Player{ return { type: "User", id: this.id, + profilePicture: this.profilePicture, pseudo: this.pseudo, soloStats: this.soloStats, onlineStats: this.onlineStats diff --git a/cryptide_project/startServers.sh b/cryptide_project/startServers.sh new file mode 100755 index 0000000..f340c6e --- /dev/null +++ b/cryptide_project/startServers.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +node server/server.js & + +node src/server/server.js & \ No newline at end of file -- 2.36.3 From 3868212543972ff0bcb3b19718d80d6081738aad Mon Sep 17 00:00:00 2001 From: Thomas Chazot Date: Mon, 27 Nov 2023 09:35:38 +0100 Subject: [PATCH 2/8] =?UTF-8?q?Adresses=20des=20serveurs=20dans=20un=20fic?= =?UTF-8?q?hier=20g=C3=A9n=C3=A9ral=20(temporaire)=20+=20reset=20du=20grap?= =?UTF-8?q?he=20m=C3=AAme=20en=20solo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cryptide_project/server/server.js | 2 +- cryptide_project/src/AdressConfig.ts | 7 +++++++ cryptide_project/src/Components/GraphContainer.tsx | 13 ++++++------- cryptide_project/src/SocketConfig.ts | 3 ++- cryptide_project/src/services/AuthService.tsx | 8 +++++--- cryptide_project/src/services/SessionService.tsx | 4 +++- cryptide_project/startServers.sh | 14 +++++++++++++- 7 files changed, 37 insertions(+), 14 deletions(-) create mode 100644 cryptide_project/src/AdressConfig.ts diff --git a/cryptide_project/server/server.js b/cryptide_project/server/server.js index ddb6235..a7e6c5b 100644 --- a/cryptide_project/server/server.js +++ b/cryptide_project/server/server.js @@ -124,7 +124,7 @@ io.on('connection', (socket) => { socket.on("reset graph", (id) => { io.to(id).emit("reset graph") - }) + }) socket.on("end game", (winnerIndex, room) =>{ io.to(room).emit("end game", winnerIndex) diff --git a/cryptide_project/src/AdressConfig.ts b/cryptide_project/src/AdressConfig.ts new file mode 100644 index 0000000..b46e98b --- /dev/null +++ b/cryptide_project/src/AdressConfig.ts @@ -0,0 +1,7 @@ +const ADRESSE_WEBSERVER = "http://localhost:3002" + +const ADRESSE_DBSERVER = "http://localhost:3003" + +const ADRESSE_WEBSITE = "" + +export {ADRESSE_DBSERVER, ADRESSE_WEBSERVER, ADRESSE_WEBSITE} \ No newline at end of file diff --git a/cryptide_project/src/Components/GraphContainer.tsx b/cryptide_project/src/Components/GraphContainer.tsx index 2781d13..8eb67c5 100644 --- a/cryptide_project/src/Components/GraphContainer.tsx +++ b/cryptide_project/src/Components/GraphContainer.tsx @@ -45,7 +45,6 @@ const MyGraphComponent: React.FC = ({onNodeClick, handleS let cptTour: number = 0 const {isLoggedIn, user} = useAuth() - console.log('isLoggedIn : ' + isLoggedIn); const { indices, indice, person, personNetwork, setNodeIdData, players, askedPersons, setActualPlayerIndexData, room, actualPlayerIndex, turnPlayerIndex, setTurnPlayerIndexData, setWinnerData } = useGame(); const params = new URLSearchParams(window.location.search); @@ -258,6 +257,12 @@ let cptTour: number = 0 setNetwork(network) + socket.on("reset graph", () => { + console.log("reset graph") + initialOptions.physics.enabled = true + network.setOptions(initialOptions) + }) + if (!solo){ socket.on("asked all", (id) =>{ const pers = personNetwork.getPersons().find((p) => p.getId() == id) @@ -279,11 +284,6 @@ let cptTour: number = 0 networkData.nodes.update({id: node.id, opacity: 1}) }); }) - - socket.on("reset graph", () => { - initialOptions.physics.enabled = true - network.setOptions(initialOptions) - }) socket.on("node checked",(id, works, askedIndex, newPlayerIndex, socketId) => { console.log(newPlayerIndex) @@ -457,7 +457,6 @@ let cptTour: number = 0 setPlayerTouched(-1) setWinnerData(players[winnerIndex]) - console.log('isLoggedIn : ' + isLoggedIn); if(isLoggedIn){ if(solo){ diff --git a/cryptide_project/src/SocketConfig.ts b/cryptide_project/src/SocketConfig.ts index 2fea1de..54015d8 100644 --- a/cryptide_project/src/SocketConfig.ts +++ b/cryptide_project/src/SocketConfig.ts @@ -1,6 +1,7 @@ import { io } from "socket.io-client"; +import {ADRESSE_WEBSERVER} from "./AdressConfig" -const socket = io("http://localhost:3002"); +const socket = io(ADRESSE_WEBSERVER); export {socket} \ No newline at end of file diff --git a/cryptide_project/src/services/AuthService.tsx b/cryptide_project/src/services/AuthService.tsx index e7b85e4..10a9b1a 100644 --- a/cryptide_project/src/services/AuthService.tsx +++ b/cryptide_project/src/services/AuthService.tsx @@ -1,4 +1,6 @@ import VerificationService from './VerificationService'; +import {ADRESSE_DBSERVER} from "../AdressConfig" + class AuthService{ // Méthode pour vérifier les données de connexion @@ -12,7 +14,7 @@ class AuthService{ static async signUp(data: any) { try { - const response = await fetch('http://localhost:3003/auth/signup', { + const response = await fetch(ADRESSE_DBSERVER + '/auth/signup', { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -36,7 +38,7 @@ class AuthService{ static async signIn(data: any) { try { - const response = await fetch('http://localhost:3003/auth/signin', { + const response = await fetch(ADRESSE_DBSERVER + '/auth/signin', { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -61,7 +63,7 @@ class AuthService{ static async logout() { try { - const response = await fetch('http://localhost:3003/auth/logout', { + const response = await fetch(ADRESSE_DBSERVER + '/auth/logout', { method: 'DELETE', headers: { 'Content-Type': 'application/json', diff --git a/cryptide_project/src/services/SessionService.tsx b/cryptide_project/src/services/SessionService.tsx index 3fcb228..46340ab 100644 --- a/cryptide_project/src/services/SessionService.tsx +++ b/cryptide_project/src/services/SessionService.tsx @@ -1,7 +1,9 @@ +import {ADRESSE_DBSERVER} from "../AdressConfig" + class SessionService { static async getSession() { try { - const response = await fetch('http://localhost:3003/session', { + const response = await fetch(ADRESSE_DBSERVER + '/session', { method: 'GET', headers: { 'Content-Type': 'application/json', diff --git a/cryptide_project/startServers.sh b/cryptide_project/startServers.sh index f340c6e..5b070e4 100755 --- a/cryptide_project/startServers.sh +++ b/cryptide_project/startServers.sh @@ -2,4 +2,16 @@ node server/server.js & -node src/server/server.js & \ No newline at end of file +node src/server/server.js + +if lsof -Pi :3002 -sTCP:LISTEN -t >/dev/null; then + # Tuer le processus associé au port + pid=$(lsof -Pi :3002 -sTCP:LISTEN -t) + kill -9 $pid +fi + +if lsof -Pi :3003 -sTCP:LISTEN -t >/dev/null; then + # Tuer le processus associé au port + pid=$(lsof -Pi :3003 -sTCP:LISTEN -t) + kill -9 $pid +fi \ No newline at end of file -- 2.36.3 From 2b44ae2b8129f39741d4a6bfaecbf39889c60ac0 Mon Sep 17 00:00:00 2001 From: Pierre Ferreira Date: Mon, 27 Nov 2023 14:56:12 +0100 Subject: [PATCH 3/8] ajout du changement du pseudo, et du modal ainsi que de la logique pour la suppression de compte :bento: --- .../src/Components/ProfilePDP.tsx | 4 +- cryptide_project/src/Pages/Lobby.tsx | 30 ++-- cryptide_project/src/Pages/Profile.css | 62 +++++++- cryptide_project/src/Pages/Profile.tsx | 143 +++++++++++++++++- cryptide_project/src/res/icon/cancel.png | Bin 0 -> 1010 bytes cryptide_project/src/res/icon/coche.png | Bin 0 -> 302 bytes cryptide_project/src/res/icon/edit-pen.png | Bin 0 -> 613 bytes cryptide_project/src/server/db/socialgraph.db | Bin 28672 -> 28672 bytes 8 files changed, 219 insertions(+), 20 deletions(-) create mode 100644 cryptide_project/src/res/icon/cancel.png create mode 100644 cryptide_project/src/res/icon/coche.png create mode 100644 cryptide_project/src/res/icon/edit-pen.png diff --git a/cryptide_project/src/Components/ProfilePDP.tsx b/cryptide_project/src/Components/ProfilePDP.tsx index 7395740..aa1f004 100644 --- a/cryptide_project/src/Components/ProfilePDP.tsx +++ b/cryptide_project/src/Components/ProfilePDP.tsx @@ -38,9 +38,9 @@ const ProfilePDP = () => { )}
- upload + upload {/*
Cliquer ici pour ajouter une image
*/} -

Taille recommandée : 100px

+ {/*

Taille recommandée : 100px

*/}
diff --git a/cryptide_project/src/Pages/Lobby.tsx b/cryptide_project/src/Pages/Lobby.tsx index 5219059..176879c 100644 --- a/cryptide_project/src/Pages/Lobby.tsx +++ b/cryptide_project/src/Pages/Lobby.tsx @@ -1,4 +1,6 @@ import React, { useEffect, useState } from 'react'; + +/* Style */ import './Lobby.css'; import { useTheme } from '../Style/ThemeContext'; @@ -8,35 +10,45 @@ import PersonImg from '../res/img/Person.png'; import param from '../res/icon/param.png'; import cible from '../res/icon/cible.png'; +import defaultImg from "../res/img/Person.png" + /* Component */ import ButtonImgNav from '../Components/ButtonImgNav'; + import { io } from 'socket.io-client'; import { Link } from 'react-router-dom'; + +/* Context */ +import { useGame } from '../Contexts/GameContext'; +import { useAuth } from '../Contexts/AuthContext'; + +/* Model */ import PersonNetwork from '../model/PersonsNetwork'; import Person from '../model/Person'; import GameCreator from '../model/GameCreator'; -import { useGame } from '../Contexts/GameContext'; -import JSONParser from '../JSONParser'; import Indice from '../model/Indices/Indice'; -import { useNavigate } from 'react-router-dom'; -import { socket } from "../SocketConfig"; -import { random } from 'lodash'; +import JSONParser from '../JSONParser'; import Player from '../model/Player'; import EasyBot from '../model/EasyBot'; import Bot from '../model/Bot'; import User from '../model/User'; -import { useAuth } from '../Contexts/AuthContext'; -import SessionService from '../services/SessionService'; -import defaultImg from "../res/img/Person.png" import {loadImageAsync} from "../ImageHelper" +/* nav */ +import { useNavigate } from 'react-router-dom'; + +/* serv */ +import { socket } from "../SocketConfig"; +import SessionService from '../services/SessionService'; +import { random } from 'lodash'; + let gameStarted = false function Lobby() { const theme=useTheme(); const navigate = useNavigate(); - + const { indices, setIndicesData, indice, setIndiceData, person, setPersonData, personNetwork, setPersonNetworkData, players, setPlayersData, setActualPlayerIndexData, setTurnPlayerIndexData, setRoomData } = useGame(); diff --git a/cryptide_project/src/Pages/Profile.css b/cryptide_project/src/Pages/Profile.css index a83adb7..3090ae4 100644 --- a/cryptide_project/src/Pages/Profile.css +++ b/cryptide_project/src/Pages/Profile.css @@ -1,5 +1,6 @@ .mainContainer{ display: flex; + /* flex-direction: column; */ justify-content: center; align-items: center; margin: 50px; @@ -20,6 +21,8 @@ min-height: 250px; } +/*Lpart*/ + .imgContainer{ border: 5px solid black; border-radius: 50px; @@ -28,6 +31,60 @@ +/*Rpart*/ + +.Rpart{ + + min-width: 40%; + min-height: 250px; + margin: 20px; + padding: 20px; + + background-color: white; + + border: solid 1px whitesmoke; + border-radius: 15px; +} + + +.username-display{ + display: flex; +} + +.editbutton{ + border-color: white; + background-color: white; + border: none; + + margin-left: 15px; + height: 25px; + width: 25px; +} +.inputpseudo{ + display: 'flex'; + justify-content: 'flex-start'; + align-items: 'center'; + flex-direction: 'row'; + + width: 20vw; + padding: 5; + + border:none; + border-bottom: solid 2px gray; + border-radius: 5; + + font-size: 40px; +} + +.bottom{ + display: flex; + flex-direction: column; + justify-content: end; + align-items: end; + + height: 100px; +} + /*File upload*/ .parent { /* width: 250px; */ @@ -43,8 +100,9 @@ /* padding: 1.5rem; */ position: relative; cursor: pointer; - max-width: 100px; - max-height: 50px; + width: 100px; + height: 50px; + } .file-upload p { font-size: 0.5rem; diff --git a/cryptide_project/src/Pages/Profile.tsx b/cryptide_project/src/Pages/Profile.tsx index 463e1fd..ccb8af3 100644 --- a/cryptide_project/src/Pages/Profile.tsx +++ b/cryptide_project/src/Pages/Profile.tsx @@ -1,30 +1,159 @@ import React, { useEffect, useState } from 'react'; import ProfilePDP from '../Components/ProfilePDP'; -import './Profile.css' - - import SessionService from '../services/SessionService'; import { PlayerProps } from '../types/Player'; import { update } from 'lodash'; -import User from '../model/User'; import { socket } from '../SocketConfig'; + +/* Style */ +import './Profile.css' +import Edit from "../res/icon/edit-pen.png" +import Coche from '../res/icon/coche.png' +import Cancel from '../res/icon/cancel.png' + +/* Model */ +import User from '../model/User'; + +/* Context */ import { useAuth } from '../Contexts/AuthContext'; +/* Boostrap */ +import Button from 'react-bootstrap/Button'; +import Alert from 'react-bootstrap/Alert'; +import Modal from 'react-bootstrap/Modal'; +import Form from 'react-bootstrap/Form'; //@ts-ignore const Profile = () => { + //let player; const {user} = useAuth() + + const [editingUsername, setEditingUsername] = useState(false); + const [newUsername, setNewUsername] = useState(user?.pseudo); + + //@ts-ignore + const onUsernameChange = (newUsername) => { + console.log("nouveau pseudo : " + newUsername) + if(user?.pseudo != null){ + user.pseudo = newUsername; + } + } - //! useeffect pour l'instant, il faudra voir pour changer la facons de prendre une session + const handleUsernameChange = () => { + // Maj du pseudo + onUsernameChange(newUsername); + // Désactiver le mode d'édition + setEditingUsername(false); + }; + + + //* Gestion Modal de suppression : + const [showDeleteModal, setShowDeleteModal] = useState(false); + + const handleShowDeleteModal = () => { + setShowDeleteModal(true); + }; + + const handleCloseDeleteModal = () => { + setShowDeleteModal(false); + }; + + // Confirmation avec la phrase : + const [confirmationPhrase, setConfirmationPhrase] = useState(''); + + //@ts-ignore + const handleConfirmationPhraseChange = (e) => { + setConfirmationPhrase(e.target.value); + }; + + const handleDeleteAccount = () => { + // Verification de la phrase + if (confirmationPhrase.toLowerCase() === 'supprimer mon compte') { + console.log('Compte supprimé !'); + handleCloseDeleteModal(); + } else { + console.error('Phrase de confirmation incorrecte.'); + } + }; + + return ( + <> +

Mon Compte

- -

{user?.pseudo}

+
+ +
+
+ {editingUsername ? ( +
+ setNewUsername(e.target.value)} + /> + + +
+ ) : ( +
+

{user?.pseudo}

+ +
+ ) + } +
+ {!editingUsername ? ( + + ) : ( + + Vous êtes en mode "édition". + + )} +
+ <> + + + + + Confirmation de suppression + + +

+ Pour confirmer la suppression de votre compte, veuillez + entrer la phrase : "supprimer mon compte". +

+ +
+ + + + +
+ +
+ +
+ ); }; diff --git a/cryptide_project/src/res/icon/cancel.png b/cryptide_project/src/res/icon/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..1181afb6c83872e24b4a60189174a000fb41e036 GIT binary patch literal 1010 zcmVn$g5$1jS^jc?v-{32F?^Mi4^4 zOBB(dE=BN$63si9H&7GzAs5gG@U~EQ#z`<^7UnJmB@D&sPNw^GPmBFS!_d?H*ZHT; zRMn|-AV-cIIdc5JXamjx&w&Zx1F!(B0L%JW?!D1xO8U+}g}uNPU<%j(Hfy}(ompTA zD3Dk1DAXl<7-+1w*dxG9$UxV1YTpM=14n@tV22LA zMep?i4}fW4ErjnK&{Z$7CqleB2iyhPBk&f1Tfo-njXF3rbFPEimZp|LC1Kc7Vv_0$5ei)-<9epdd%3Z z_zIdMj?`04-0u)A#lv}$MM3j@wcRH^QbNU$N}jc-m!~f}N>CYdWL!0bWuQ6W*?M?d zg6S7y^Ku-*X+tLEVi@Y-={v@r)b^2=dmCmUu$`cgw&;VV@{=*QMjUpP363?R%`6_)v`L;d(M4a2 z2iGqrI|5`(^gZ*=WSl_^8M1Gl^0BWx-Kzz%h^Mcc=cL)V$9EI2 z4D2IWY{%0@M{y*}#MtQ2=2+TWD`B2)&|F*n-9nsTWif2X)0o;}qHRxFu4_IGH|l0| zwSg7g_Na&GO-E#wO?I#7a%_MvWk9q{<-Gp?@;-p#g?0kS{Qxp3aJt2o$q$0bmP4Ze%)N-*L@}Et7 z8V8|MH=~21=epM854D)+)@k3Qk-wn#`m|`64LCni9gPo>k%MWKEmB9EYe6^myr&)? zM-OdP7Ux=2&r2INvuM%7r86-Omrm-cC-y=hZM5pfmb6^Pf%h7Wmi3y~d*k{{f7ZR3 gBS(%LIY&|^xm-z0O}pY!BXY-ZW)nO9?}E~w%;NyYR3R?7!0I~ePj;~SJ8 zL|(VPrmo+(|3L21Z|o88tJr@l*b4o4xb5oKzGnhIuiYq|*efe>^F||#dT&0x&T(OP z>9;S3PEnctH~!TTeP zCjGPgapHz_ib^QU4Y^P0d!!UUWgAVJ$8j+&NBMFc5dTY&p7|{qf**!)E!O$lR(m$W z+f-lYl~0*jP&3d0er#Q8H)7P2Q`9T(sNC1MS>srB{^hQXkF6|^O%hlBdX}dm^czzJ_Z-IO2UH7U*Llo~ z`j=XNwEVrVv*WVH`EKjX7;AD0ewEFAl67ACUvT{Aw~KB$9`0Awd0w{s?*e(T+Wa3X zW>*i@_3aIn-_iN;-16B;HJ<}FNtiSLb3eTI(`wz`jNcP?9OW#MkI=b(b5-W5o>-r6 n;SWS2G{cpFQ8!8D*bUkBJ{#U#auk{XOg9Xku6{1-oD!MAUf<@s%*}Tk-GXui^W_SF%~aAc@b(k)@H9krK!7Y~E%k zC&R!!xnyS1_pKx UHUOZfR%`M4SQ7w|js-QvsPO@RN5lx7<%g4p#ns z4E!hf-*4tqSiwIrfNSzTeK(-$Z4CTY{QLN8_Qb+`J4746OW@8Th~RzvF+(e~16_W Date: Mon, 27 Nov 2023 16:16:19 +0100 Subject: [PATCH 4/8] utilisation de jus de cerveau avec baptiste pour la deconnexion :zap: :zap: (il va falloir changer la logique de maj de pseudo) --- cryptide_project/src/Pages/Profile.tsx | 43 +++++++++++++++-- .../src/server/controllers/AuthController.js | 45 +++++++++++++----- cryptide_project/src/server/db/socialgraph.db | Bin 28672 -> 28672 bytes .../src/server/routes/AuthRoutes.js | 1 + .../src/server/services/DatabaseService.js | 40 ++++++++++++++++ cryptide_project/src/services/AuthService.tsx | 25 ++++++++++ 6 files changed, 138 insertions(+), 16 deletions(-) diff --git a/cryptide_project/src/Pages/Profile.tsx b/cryptide_project/src/Pages/Profile.tsx index ccb8af3..f8e2be4 100644 --- a/cryptide_project/src/Pages/Profile.tsx +++ b/cryptide_project/src/Pages/Profile.tsx @@ -3,8 +3,9 @@ import ProfilePDP from '../Components/ProfilePDP'; import SessionService from '../services/SessionService'; import { PlayerProps } from '../types/Player'; -import { update } from 'lodash'; +import { delay, update } from 'lodash'; import { socket } from '../SocketConfig'; +import AuthService from '../services/AuthService'; /* Style */ import './Profile.css' @@ -23,14 +24,20 @@ import Button from 'react-bootstrap/Button'; import Alert from 'react-bootstrap/Alert'; import Modal from 'react-bootstrap/Modal'; import Form from 'react-bootstrap/Form'; +import { useNavigate } from 'react-router-dom'; //@ts-ignore const Profile = () => { - + const navigate = useNavigate(); //let player; - const {user} = useAuth() + const {user, logout} = useAuth() + // let pseudoNotNull; + // if(user?.pseudo != null){ + // pseudoNotNull = user.pseudo; + // } + const [editingUsername, setEditingUsername] = useState(false); const [newUsername, setNewUsername] = useState(user?.pseudo); @@ -62,9 +69,11 @@ const Profile = () => { setShowDeleteModal(false); }; - // Confirmation avec la phrase : + //* Confirmation avec la phrase : const [confirmationPhrase, setConfirmationPhrase] = useState(''); + const [showWrong, setShowWrong] = useState(false); + //@ts-ignore const handleConfirmationPhraseChange = (e) => { setConfirmationPhrase(e.target.value); @@ -74,9 +83,27 @@ const Profile = () => { // Verification de la phrase if (confirmationPhrase.toLowerCase() === 'supprimer mon compte') { console.log('Compte supprimé !'); + console.log(user); + + if(user!= null){ + const pseudo = user.pseudo; + AuthService.delAccount(pseudo); + AuthService.logout(); + logout(); + } + else{ + console.error("l'utilisateur ne peut pas être null") + } handleCloseDeleteModal(); + + navigate("/play") + } else { console.error('Phrase de confirmation incorrecte.'); + setShowWrong(true); + setTimeout(async () => { + setShowWrong(false); + }, 3000); } }; @@ -110,7 +137,7 @@ const Profile = () => { -
+
) }
@@ -140,6 +167,12 @@ const Profile = () => { value={confirmationPhrase} onChange={handleConfirmationPhraseChange} /> + { + showWrong && + + La phrase de confirmation est incorrecte. + + } */} - + {/* */}
diff --git a/cryptide_project/src/Pages/Profile.tsx b/cryptide_project/src/Pages/Profile.tsx index e0efd2e..1e96b92 100644 --- a/cryptide_project/src/Pages/Profile.tsx +++ b/cryptide_project/src/Pages/Profile.tsx @@ -44,10 +44,9 @@ const Profile = () => { //@ts-ignore const onUsernameChange = (newUsername) => { - console.log("nouveau pseudo : " + newUsername) if(user?.pseudo != null){ SessionService.UpdatePseudo(user.pseudo, newUsername) - //user.pseudo = newUsername; + user.pseudo = newUsername; } } diff --git a/cryptide_project/src/server/controllers/SessionController.js b/cryptide_project/src/server/controllers/SessionController.js index f536a0b..7b40331 100644 --- a/cryptide_project/src/server/controllers/SessionController.js +++ b/cryptide_project/src/server/controllers/SessionController.js @@ -34,7 +34,8 @@ class SessionController { try{ await db.connect(); - const user = db.getUserByPseudo(req.body.pseudo); + const user = await db.getUserByPseudo(req.body.pseudo); + console.log("utilisateur" + user.idUser + " pseudo" + user.pseudo) if (!user) { res.status(200).json({ error: "true", message: 'User not found' }); return; @@ -42,10 +43,10 @@ class SessionController { await db.updatePseudo(user.idUser, req.body.newPseudo); //* update - const updatedUser = db.getUserByPseudo(req.body.newPseudo); - + const updatedUser = await db.getUserByPseudo(req.body.newPseudo); + console.log("updaetdutilisateur" + updatedUser.idUser + " pseudo" + updatedUser.pseudo) req.session.user.pseudo = updatedUser.pseudo; - + console.log("req.session.user.pseudo" + req.session.user.pseudo) res.status(200).json({ user: req.session.user }); //verif rep } catch(error){ diff --git a/cryptide_project/src/server/db/socialgraph.db b/cryptide_project/src/server/db/socialgraph.db index 35ebe49d2121dd6b5c4e90ccabb745538c69c9d5..fbd0fd91840c41398581108de281ff1b40cb4846 100644 GIT binary patch delta 440 zcmZp8z}WDBae_2s{6raN#`uj1OZa7YxDy%p7w|js-QvsP%sGwr-et3dp~#L zW<>!nR|3m4Cl z@=~u-@1Te%H=oQ9Z&%O4jMTgUeM@(*{3<;o10!QyLqlC73k3snD^nvYQxgG!SYe>) z!cfyqChObUZ03~t%`C&iU&_FLg8w~#3;%5XZT#Q)@AL2DU&%k2zm&gbv!X&MKOY;j zAkaY~?99SI%4Bl0exnQz&kF{AE8cbd`}mCbYk0MIUhw_kE8*M5`++wHsObdHWG!1B zGqM~nvRTV^l@O!AQbBD@R?3_Sc(7=TWE$N!Z74*zBTQ~U?{ nckr+0U&cR|f68V-hZ25Hb^$g94h{}Rk;!x8(}A8NMSU^=pQwK0 delta 252 zcmZp8z}WDBae_2s_(U0J#_){^OZcU@xeqY#FW`6NyTzBo$IZKj*MsLVPYaJ6_kqod z3X8aTV}v;wcm*3-jTsqB3nuH^+HB^O`OPfF&0ovFe}ex#e+&O?{%!o<`S0`Z<6p@? znZI_kphG-A8ymAANPV+@qZBu<76ZQ(?>hc{d`A2=yjpxe_)7S;@qXaV0ouUBJNbnT z&t@~*c|wf*ldt;AYw>e3GK({o7N-^!3-dBCFmUtFWdNH0j{hnD9sbMwr}z)@@8Dn0 Wzl?t_(58C+$#dh=fvzE>CK&)SGEIj7 diff --git a/cryptide_project/src/services/SessionService.tsx b/cryptide_project/src/services/SessionService.tsx index 49cf8e9..d75bfab 100644 --- a/cryptide_project/src/services/SessionService.tsx +++ b/cryptide_project/src/services/SessionService.tsx @@ -25,6 +25,7 @@ class SessionService { } static async UpdatePseudo(pseudo : string, newPseudo : string) { + console.log("pseudo : " + pseudo + " newpseudo : " + newPseudo) try { const response = await fetch(ADRESSE_DBSERVER + '/session/updatePseudo', { method: 'PUT', -- 2.36.3 From 87b6cdb8f4e870859440de061780942287eafa69 Mon Sep 17 00:00:00 2001 From: Pierre Ferreira Date: Tue, 28 Nov 2023 09:33:25 +0100 Subject: [PATCH 7/8] ajout --- cryptide_project/src/adressConfig.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cryptide_project/src/adressConfig.ts b/cryptide_project/src/adressConfig.ts index 8d49e11..b46e98b 100644 --- a/cryptide_project/src/adressConfig.ts +++ b/cryptide_project/src/adressConfig.ts @@ -2,6 +2,6 @@ const ADRESSE_WEBSERVER = "http://localhost:3002" const ADRESSE_DBSERVER = "http://localhost:3003" -const ADRESSE_WEBSITE = "http://localhost:3000" +const ADRESSE_WEBSITE = "" export {ADRESSE_DBSERVER, ADRESSE_WEBSERVER, ADRESSE_WEBSITE} \ No newline at end of file -- 2.36.3 From c2ac4061d0b4de3417f193faf13e82e314e5d7a3 Mon Sep 17 00:00:00 2001 From: Pierre Ferreira Date: Tue, 28 Nov 2023 09:42:53 +0100 Subject: [PATCH 8/8] reglage nom de fichier :pencil2: --- cryptide_project/src/server/db/socialgraph.db | Bin 28672 -> 28672 bytes cryptide_project/src/services/AuthService.tsx | 1 - 2 files changed, 1 deletion(-) diff --git a/cryptide_project/src/server/db/socialgraph.db b/cryptide_project/src/server/db/socialgraph.db index fbd0fd91840c41398581108de281ff1b40cb4846..58e537e3e470b48f51c6ea9d1dc349b5bd580053 100644 GIT binary patch delta 28 kcmZp8z}WDBae_2s(nJ|&#-xo27V*rSoSd6y$EOMa0FPV=3;+NC delta 26 icmZp8z}WDBae_2s{6raN#`uj17V(p3