Merge Dev in Staging

This commit is contained in:
Arnaud D. Natali 2023-10-11 14:53:44 +02:00 committed by GitHub
commit 13f8cfc97c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 60 additions and 20 deletions

View File

@ -17,7 +17,7 @@ export default function Login() {
const router = useRouter(); const router = useRouter();
const error = router.query["error"]; const error = router.query["error"];
const [isErrorModalOpen, setIsErrorModalOpen] = useState(false); const [isErrorModalOpen, setIsErrorModalOpen] = useState(0);
const redirectUserOnConnection = useCallback(() => { const redirectUserOnConnection = useCallback(() => {
const variables = FrontendVariables.getInstance(); const variables = FrontendVariables.getInstance();
@ -28,16 +28,25 @@ export default function Login() {
); );
}, [router]); }, [router]);
const openErrorModal = useCallback(() => { const openErrorModal = useCallback((index: number) => {
setIsErrorModalOpen(true); setIsErrorModalOpen(index);
}, []); }, []);
const closeErrorModal = useCallback(() => { const closeErrorModal = useCallback(() => {
setIsErrorModalOpen(false); setIsErrorModalOpen(0);
}, []); }, []);
useEffect(() => { useEffect(() => {
if (error === "1") openErrorModal(); switch (error) {
case "1":
openErrorModal(1);
break;
case "2":
openErrorModal(2);
break;
default:
break;
}
}, [error, openErrorModal]); }, [error, openErrorModal]);
return ( return (
@ -58,7 +67,7 @@ export default function Login() {
</Link> </Link>
</div> </div>
<Confirm <Confirm
isOpen={isErrorModalOpen} isOpen={isErrorModalOpen === 1}
onClose={closeErrorModal} onClose={closeErrorModal}
showCancelButton={false} showCancelButton={false}
onAccept={closeErrorModal} onAccept={closeErrorModal}
@ -71,6 +80,20 @@ export default function Login() {
</Typography> </Typography>
</div> </div>
</Confirm> </Confirm>
<Confirm
isOpen={isErrorModalOpen === 2}
onClose={closeErrorModal}
showCancelButton={false}
onAccept={closeErrorModal}
closeBtn
header={"Session expirée"}
confirmText={"OK"}>
<div className={classes["modal-content"]}>
<Typography typo={ITypo.P_16} className={classes["text"]}>
Veuillez vous reconnecter.
</Typography>
</div>
</Confirm>
</DefaultDoubleSidePage> </DefaultDoubleSidePage>
); );
} }

View File

@ -13,6 +13,7 @@ import Loader from "@Front/Components/DesignSystem/Loader";
import UserStore from "@Front/Stores/UserStore"; import UserStore from "@Front/Stores/UserStore";
import Link from "next/link"; import Link from "next/link";
import JwtService from "@Front/Services/JwtService/JwtService"; import JwtService from "@Front/Services/JwtService/JwtService";
import CookieService from "@Front/Services/CookieService/CookieService";
export default function LoginCallBack() { export default function LoginCallBack() {
const router = useRouter(); const router = useRouter();
@ -20,10 +21,6 @@ export default function LoginCallBack() {
useEffect(() => { useEffect(() => {
async function getUser() { async function getUser() {
const code = router.query["code"]; const code = router.query["code"];
const refreshedTokens = await JwtService.getInstance().refreshToken();
if (refreshedTokens) {
return router.push(Module.getInstance().get().modules.pages.Folder.props.path);
}
if (code) { if (code) {
try { try {
const token = await Auth.getInstance().getIdnotJwt(code as string); const token = await Auth.getInstance().getIdnotJwt(code as string);
@ -35,7 +32,13 @@ export default function LoginCallBack() {
return; return;
} }
} }
return router.push(Module.getInstance().get().modules.pages.Login.props.path + "?error=1"); const refreshToken = CookieService.getInstance().getCookie("leCoffreRefreshToken");
if(!refreshToken) return router.push(Module.getInstance().get().modules.pages.Login.props.path + "?error=1");
const isTokenRefreshed = await JwtService.getInstance().refreshToken(refreshToken);
if (isTokenRefreshed) {
return router.push(Module.getInstance().get().modules.pages.Folder.props.path);
}
return router.push(Module.getInstance().get().modules.pages.Login.props.path + "?error=2");
} }
getUser(); getUser();
}), }),

View File

@ -13,6 +13,7 @@ import CustomerStore from "@Front/Stores/CustomerStore";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import Link from "next/link"; import Link from "next/link";
import JwtService from "@Front/Services/JwtService/JwtService"; import JwtService from "@Front/Services/JwtService/JwtService";
import CookieService from "@Front/Services/CookieService/CookieService";
export default function LoginCallBackCustomer() { export default function LoginCallBackCustomer() {
const router = useRouter(); const router = useRouter();
@ -20,10 +21,6 @@ export default function LoginCallBackCustomer() {
useEffect(() => { useEffect(() => {
const getReport = async () => { const getReport = async () => {
const tokenid360 = router.query["token"]; const tokenid360 = router.query["token"];
const refreshedTokens = await JwtService.getInstance().refreshToken();
if (refreshedTokens) {
return router.push(Module.getInstance().get().modules.pages.Folder.pages.Select.props.path);
}
if (tokenid360) { if (tokenid360) {
let token: ICustomerTokens | undefined; let token: ICustomerTokens | undefined;
try { try {
@ -36,7 +33,13 @@ export default function LoginCallBackCustomer() {
CustomerStore.instance.connect(token.accessToken, token.refreshToken); CustomerStore.instance.connect(token.accessToken, token.refreshToken);
router.push(Module.getInstance().get().modules.pages.Folder.pages.Select.props.path); router.push(Module.getInstance().get().modules.pages.Folder.pages.Select.props.path);
} }
return router.push(Module.getInstance().get().modules.pages.CustomersLogin.props.path + "?error=1"); const refreshToken = CookieService.getInstance().getCookie("leCoffreRefreshToken");
if(!refreshToken) return router.push(Module.getInstance().get().modules.pages.Login.props.path + "?error=1");
const isTokenRefreshed = await JwtService.getInstance().refreshToken(refreshToken);
if (isTokenRefreshed) {
return router.push(Module.getInstance().get().modules.pages.Folder.pages.Select.props.path);
}
return router.push(Module.getInstance().get().modules.pages.Login.props.path + "?error=2");
}; };
getReport(); getReport();
}), }),

View File

@ -35,6 +35,19 @@ export default class JwtService {
return (this.instance ??= new this()); return (this.instance ??= new this());
} }
public getUserJwtPayload(): IUserJwtPayload | undefined {
const accessToken = CookieService.getInstance().getCookie("leCoffreAccessToken");
if (!accessToken) return;
return jwt_decode(accessToken);
}
public getCustomerJwtPayload(): ICustomerJwtPayload | undefined {
const accessToken = CookieService.getInstance().getCookie("leCoffreAccessToken");
if (!accessToken) return;
return jwt_decode(accessToken);
}
public decodeJwt(): IUserJwtPayload | undefined { public decodeJwt(): IUserJwtPayload | undefined {
const accessToken = CookieService.getInstance().getCookie("leCoffreAccessToken"); const accessToken = CookieService.getInstance().getCookie("leCoffreAccessToken");
if (!accessToken) return; if (!accessToken) return;
@ -51,14 +64,12 @@ export default class JwtService {
* @description : set a cookie with a name and a value that expire in 7 days * @description : set a cookie with a name and a value that expire in 7 days
* @throws {Error} If the name or the value is empty * @throws {Error} If the name or the value is empty
*/ */
public async refreshToken() { public async refreshToken(refreshToken: string): Promise<boolean> {
const refreshToken = CookieService.getInstance().getCookie("leCoffreRefreshToken");
const variables = await FrontendVariables.getInstance();
if (!refreshToken) return false;
const userToken = jwt_decode(refreshToken) as IUserJwtPayload; const userToken = jwt_decode(refreshToken) as IUserJwtPayload;
const customerToken = jwt_decode(refreshToken) as ICustomerJwtPayload; const customerToken = jwt_decode(refreshToken) as ICustomerJwtPayload;
if (userToken?.exp && userToken.exp > Math.floor(Date.now() / 1000)) { if (userToken?.exp && userToken.exp > Math.floor(Date.now() / 1000)) {
const variables = FrontendVariables.getInstance();
if (userToken?.userId) { if (userToken?.userId) {
try { try {
const headers = new Headers(); const headers = new Headers();