From 77db94ad502dd425e3cc4cda987857882515735f Mon Sep 17 00:00:00 2001
From: MaxOuvrard <118462372+MaxOuvrard@users.noreply.github.com>
Date: Thu, 19 Dec 2024 14:27:40 +0100
Subject: [PATCH 1/6] Create utils folder
---
front-js/src/{app/auth/signup => utils}/validatePasswd.js | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename front-js/src/{app/auth/signup => utils}/validatePasswd.js (100%)
diff --git a/front-js/src/app/auth/signup/validatePasswd.js b/front-js/src/utils/validatePasswd.js
similarity index 100%
rename from front-js/src/app/auth/signup/validatePasswd.js
rename to front-js/src/utils/validatePasswd.js
From a082c2e9ca908866819e107b73eb609888bc99a8 Mon Sep 17 00:00:00 2001
From: MaxOuvrard <118462372+MaxOuvrard@users.noreply.github.com>
Date: Thu, 19 Dec 2024 14:30:44 +0100
Subject: [PATCH 2/6] Change path for validate passwd in signup
---
front-js/src/app/auth/signup/page.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/front-js/src/app/auth/signup/page.tsx b/front-js/src/app/auth/signup/page.tsx
index 468a477..c0d1ba8 100644
--- a/front-js/src/app/auth/signup/page.tsx
+++ b/front-js/src/app/auth/signup/page.tsx
@@ -11,7 +11,7 @@ import { use, useState } from "react";
import Link from "@/components/Link";
import Space from "@/components/Space";
import ValidatePsw from "@/components/ValidatePsw";
-import {validate_passwd} from "./validatePasswd";
+import {validate_passwd} from "../../../utils/validatePasswd";
export default function Home() {
const [username, setUsername] = useState("");
From 06a4c855a7295f8dd62d829ec86c29ca62a360a6 Mon Sep 17 00:00:00 2001
From: MaxOuvrard <118462372+MaxOuvrard@users.noreply.github.com>
Date: Thu, 19 Dec 2024 15:32:56 +0100
Subject: [PATCH 3/6] Add front profile pages
---
front-js/src/app/profile/layout.tsx | 14 ++++++
front-js/src/app/profile/page.tsx | 72 +++++++++++++++++++++++++++++
2 files changed, 86 insertions(+)
create mode 100644 front-js/src/app/profile/layout.tsx
create mode 100644 front-js/src/app/profile/page.tsx
diff --git a/front-js/src/app/profile/layout.tsx b/front-js/src/app/profile/layout.tsx
new file mode 100644
index 0000000..5e2b311
--- /dev/null
+++ b/front-js/src/app/profile/layout.tsx
@@ -0,0 +1,14 @@
+import type { Metadata } from "next";
+
+export const metadata: Metadata = {
+ title: "Modifier mon mot de passe",
+ description: "Networkers",
+};
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return
{children};
+}
\ No newline at end of file
diff --git a/front-js/src/app/profile/page.tsx b/front-js/src/app/profile/page.tsx
new file mode 100644
index 0000000..755ea73
--- /dev/null
+++ b/front-js/src/app/profile/page.tsx
@@ -0,0 +1,72 @@
+"use client";
+
+import Box from "@/components/Box";
+import Header from "@/components/Header";
+import { useRouter } from "next/navigation";
+import Button from "@/components/Button";
+import Input from "@/components/Input";
+import Layout from "@/components/Layout";
+import Modal from "@/components/Modal";
+import ValidatePsw from "@/components/ValidatePsw";
+import {validate_passwd} from "../../utils/validatePasswd";
+import { useEffect, useState } from "react";
+import Title from "@/components/Title";
+
+export default function Profile() {
+ const router = useRouter();
+
+ const [password, setPassword] = useState("");
+
+ const [confirmPassword, setConfirmPassword] = useState("")
+ return (
+
+
+ router.push(`/${tab.toLowerCase()}`)}
+ onClickLogout={() => router.push("/auth/logout")}
+ onClickLogo={() => router.push("/")}
+ />
+
+
+
+ Modifier mon mot de passe
+ setPassword(e.target.value)}
+ required
+ label="Nouveau mot de passe"
+ />
+ setConfirmPassword(e.target.value)}
+ required
+ label="Confirmer nouveau mot de passe"
+ />
+
+
+
+
+
+
+ )
+}
\ No newline at end of file
From 42dd8298a281835e9f84bf24acb9cb5087d4d19b Mon Sep 17 00:00:00 2001
From: MaxOuvrard <118462372+MaxOuvrard@users.noreply.github.com>
Date: Thu, 19 Dec 2024 16:44:50 +0100
Subject: [PATCH 4/6] Connect pages profile with API
---
front-js/src/app/profile/page.tsx | 105 ++++++++++++++++++++++++++++++
1 file changed, 105 insertions(+)
diff --git a/front-js/src/app/profile/page.tsx b/front-js/src/app/profile/page.tsx
index 755ea73..5d1536d 100644
--- a/front-js/src/app/profile/page.tsx
+++ b/front-js/src/app/profile/page.tsx
@@ -11,13 +11,87 @@ import ValidatePsw from "@/components/ValidatePsw";
import {validate_passwd} from "../../utils/validatePasswd";
import { useEffect, useState } from "react";
import Title from "@/components/Title";
+import axios from "@/axiosConfig";
+import { AxiosError } from "axios";
+import Cookies from "js-cookie";
+import { Alert } from "@mui/material";
export default function Profile() {
const router = useRouter();
+ const [oldPassword, setOldPassword] = useState("");
+
const [password, setPassword] = useState("");
const [confirmPassword, setConfirmPassword] = useState("")
+
+ const [error, setError] = useState("");
+ const [success, setSuccess] = useState("");
+
+
+ const [hasAccessToken, setHasAccessToken] = useState(false);
+
+ useEffect(() => {
+ const checkTokens = async () => {
+ const token = Cookies.get("access_token");
+ const refresh = Cookies.get("refresh_token");
+ if (!token && refresh) {
+ try {
+ const response = await axios.post("/auth/refresh", {
+ refresh_token: refresh,
+ });
+ const data = response.data;
+ if (response.status === 200) {
+ Cookies.set("access_token", data.access_token);
+ Cookies.set("refresh_token", refresh);
+ }
+ } catch {
+ Cookies.remove("access_token");
+ Cookies.remove("refresh_token");
+ }
+ }
+ setHasAccessToken(!!token);
+
+ if (!token && !refresh) {
+ router.push("/");
+ }
+ };
+
+ checkTokens();
+ }, [router]);
+
+ const changePassword = async (e: { preventDefault: () => void }) => {
+ e.preventDefault();
+ try {
+ setError("");
+ setSuccess("");
+ const response = await axios.patch("/users/me/password", {
+ old_password: oldPassword,
+ password: password,
+ confirm_password: confirmPassword,
+ }, {
+ headers: {
+ Authorization: `Bearer ${Cookies.get("access_token")}`,
+ },
+ });
+ const data = response.data;
+ if (response.status === 200) {
+ setSuccess("Mot de passe modifié avec succès")
+ }
+ } catch (error: unknown) {
+ const axiosError = error as AxiosError;
+ if (
+ axiosError.response?.status === 400 ||
+ axiosError.response?.status === 404
+ ) {
+ setError("L'ancien mot de passe est incorrect");
+ } else if (axiosError.response?.status === 403) {
+ setError("Erreur lors de la connexion");
+ } else {
+ setError("Erreur lors de la connexion");
+ }
+ }
+ };
return (
@@ -36,6 +110,16 @@ export default function Profile() {
Modifier mon mot de passe
+
From a3e12366edb788492ddfab1da94f28962cf2e639 Mon Sep 17 00:00:00 2001
From: MaxOuvrard <118462372+MaxOuvrard@users.noreply.github.com>
Date: Thu, 19 Dec 2024 16:50:25 +0100
Subject: [PATCH 5/6] Correction path util
---
front-js/src/app/profile/page.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/front-js/src/app/profile/page.tsx b/front-js/src/app/profile/page.tsx
index 5d1536d..2a098b3 100644
--- a/front-js/src/app/profile/page.tsx
+++ b/front-js/src/app/profile/page.tsx
@@ -8,7 +8,7 @@ import Input from "@/components/Input";
import Layout from "@/components/Layout";
import Modal from "@/components/Modal";
import ValidatePsw from "@/components/ValidatePsw";
-import {validate_passwd} from "../../utils/validatePasswd";
+import {validate_passwd} from "@/utils/validatePasswd";
import { useEffect, useState } from "react";
import Title from "@/components/Title";
import axios from "@/axiosConfig";
From c634106abd4bfedfffec2b3a111d2c86ef1c6987 Mon Sep 17 00:00:00 2001
From: MaxOuvrard <118462372+MaxOuvrard@users.noreply.github.com>
Date: Thu, 19 Dec 2024 16:52:54 +0100
Subject: [PATCH 6/6] Correction signup page
---
front-js/src/app/auth/signup/page.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/front-js/src/app/auth/signup/page.tsx b/front-js/src/app/auth/signup/page.tsx
index c0d1ba8..39d9d64 100644
--- a/front-js/src/app/auth/signup/page.tsx
+++ b/front-js/src/app/auth/signup/page.tsx
@@ -11,7 +11,7 @@ import { use, useState } from "react";
import Link from "@/components/Link";
import Space from "@/components/Space";
import ValidatePsw from "@/components/ValidatePsw";
-import {validate_passwd} from "../../../utils/validatePasswd";
+import {validate_passwd} from "@/utils/validatePasswd";
export default function Home() {
const [username, setUsername] = useState("");