From 395527cb1efab52a754cc65d443ee21ce6e4fb7d Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Wed, 12 Apr 2023 19:07:28 +0200 Subject: [PATCH 01/10] refacto login page --- .../Layouts/Folder/ClientSection/index.tsx | 4 +- .../Layouts/LoginCallback/index.tsx | 43 +++++++++---------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/front/Components/Layouts/Folder/ClientSection/index.tsx b/src/front/Components/Layouts/Folder/ClientSection/index.tsx index 0caa2007..37e72e67 100644 --- a/src/front/Components/Layouts/Folder/ClientSection/index.tsx +++ b/src/front/Components/Layouts/Folder/ClientSection/index.tsx @@ -29,10 +29,10 @@ export default class ClientSection extends React.Component { } private renderCustomerFolders() { - const output = this.props.folder.office_folder_has_customers?.map((folderHasCustomer) => { + const output = this.props.folder.office_folder_has_customers?.map((folderHasCustomer, key) => { if (!folderHasCustomer.customer) return null; // TODO : Les documents ASKED fonctionne mais les autres documents ne doivcent etre seulement ceux qui correspondent au folder - return
; + return
; }) return output ?? null; } diff --git a/src/front/Components/Layouts/LoginCallback/index.tsx b/src/front/Components/Layouts/LoginCallback/index.tsx index 1f1714da..ea9c09ad 100644 --- a/src/front/Components/Layouts/LoginCallback/index.tsx +++ b/src/front/Components/Layouts/LoginCallback/index.tsx @@ -1,27 +1,28 @@ -import classes from "./classes.module.scss"; -import LandingImage from "../Login/landing-connect.png"; -import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage"; -import Router, { useRouter } from "next/router"; +// import classes from "./classes.module.scss"; +// import LandingImage from "../Login/landing-connect.png"; +// import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage"; +import { useRouter } from "next/router"; import React from "react"; -import Loader from "@Front/Components/DesignSystem/Loader"; +//import Loader from "@Front/Components/DesignSystem/Loader"; import Auth from "@Front/Api/Auth/IdNot"; +import Folder from "../Folder"; type IPropsClass = {}; -type IStateClass = {}; +//type IStateClass = {}; -class LoginCallBackClass extends React.Component { - public override render(): JSX.Element { - return ( - -
- -
-
- ); - } -} +// class LoginCallBackClass extends React.Component { +// public override render(): JSX.Element { +// return ( +// +//
+// +//
+//
+// ); +// } +// } // TODO: Refacto with functionnal component container of classcomponent export default function LoginCallBack(props: IPropsClass) { @@ -31,15 +32,13 @@ export default function LoginCallBack(props: IPropsClass) { const getIdNotJwt = async () => { try { const authService = Auth.getInstance(); - const user = await authService.getIdnotJwt(code); - console.log(user); - Router.push('/dossier'); + await authService.getIdnotJwt(code); } catch (error) { console.error(error); - Router.push('/login'); + // Router.push('/login'); } }; getIdNotJwt(); } - return ; + return ; } \ No newline at end of file From 139cbbf4f689901f21e20e9697122fbd6a5cea5c Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Thu, 13 Apr 2023 11:07:06 +0200 Subject: [PATCH 02/10] add host variables depending on env --- src/front/Api/Auth/IdNot/index.ts | 12 ++- .../Layouts/LoginCallback/index.tsx | 81 +++++++++++++++---- 2 files changed, 72 insertions(+), 21 deletions(-) diff --git a/src/front/Api/Auth/IdNot/index.ts b/src/front/Api/Auth/IdNot/index.ts index 1255ce5a..11b6f7be 100644 --- a/src/front/Api/Auth/IdNot/index.ts +++ b/src/front/Api/Auth/IdNot/index.ts @@ -1,5 +1,6 @@ import { Service } from "typedi"; import BaseApiService from "@Front/Api/BaseApiService"; +import { FrontendVariables } from "@Front/Config/VariablesFront"; @Service() export default class Auth extends BaseApiService { @@ -25,15 +26,18 @@ export default class Auth extends BaseApiService { } } - public async getIdnotJwt(autorizationCode: string | string[]) { + public async getIdnotJwt(autorizationCode: string | string[]): Promise { + const baseBackUrl = FrontendVariables.getInstance().BACK_API_PROTOCOL + + FrontendVariables.getInstance().BACK_API_HOST + + (FrontendVariables.getInstance().BACK_API_PORT ? ":" + FrontendVariables.getInstance().BACK_API_PORT : ""); const url = new URL( - `http://127.0.0.1:3001/api/v1/idnot-user/${autorizationCode}` + `${baseBackUrl}/api/v1/idnot-user/${autorizationCode}` ); try { - await this.postRequest(url); + return await this.postRequest(url); } catch (err) { this.onError(err); - //return Promise.reject(err); + return Promise.reject(err); } } } diff --git a/src/front/Components/Layouts/LoginCallback/index.tsx b/src/front/Components/Layouts/LoginCallback/index.tsx index ea9c09ad..7f7a1512 100644 --- a/src/front/Components/Layouts/LoginCallback/index.tsx +++ b/src/front/Components/Layouts/LoginCallback/index.tsx @@ -1,23 +1,43 @@ // import classes from "./classes.module.scss"; // import LandingImage from "../Login/landing-connect.png"; // import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage"; +// import Image from "next/image"; +// import CoffreIcon from "@Assets/Icons/coffre.svg"; +// import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; +// import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import { useRouter } from "next/router"; +//import React, { useEffect, useState } from "react"; import React from "react"; //import Loader from "@Front/Components/DesignSystem/Loader"; import Auth from "@Front/Api/Auth/IdNot"; import Folder from "../Folder"; +import LoginClass from "../Login"; -type IPropsClass = {}; + type IPropsClass = {}; -//type IStateClass = {}; +// type IStateClass = {}; // class LoginCallBackClass extends React.Component { // public override render(): JSX.Element { // return ( // //
+// coffre +// +//
+// Connexion espace professionnel +//
+//
// +// +//
+// Vous n’arrivez pas à vous connecter ? +//
+//
+// //
//
// ); @@ -25,20 +45,47 @@ type IPropsClass = {}; // } // TODO: Refacto with functionnal component container of classcomponent +// export default function LoginCallBack(props: IPropsClass) { +// const [user, setUser] = useState(null); +// const [isLoading, setIsLoading] = useState(false); +// const router = useRouter(); +// const { code } = router.query; +// if (code) { +// useEffect(() => { +// const getIdNotJwt = async () => { +// setIsLoading(true); +// try { +// const authService = Auth.getInstance(); +// const fetchedUser = await authService.getIdnotJwt(code); +// setUser(fetchedUser); +// } catch (error) { +// console.error(error); +// // Router.push('/login'); +// } +// }; +// getIdNotJwt(); +// }, []); +// if (isLoading) return +// return ; +// } +// return +// } + export default function LoginCallBack(props: IPropsClass) { - const router = useRouter(); - const { code } = router.query; - if (code) { - const getIdNotJwt = async () => { - try { - const authService = Auth.getInstance(); - await authService.getIdnotJwt(code); - } catch (error) { - console.error(error); - // Router.push('/login'); - } - }; - getIdNotJwt(); + const router = useRouter(); + const { code } = router.query; + if (code) { + const getIdNotJwt = async () => { + try { + const authService = Auth.getInstance(); + await authService.getIdnotJwt(code); + } catch (error) { + console.error(error); + // Router.push('/login'); + } + }; + getIdNotJwt(); + return ; + } + return } - return ; -} \ No newline at end of file From 05ac4a9542f59d4f786e8f6515e6c4e0ee898baf Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Thu, 13 Apr 2023 11:09:22 +0200 Subject: [PATCH 03/10] set new version of app for connexion demo --- devops/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops/Chart.yaml b/devops/Chart.yaml index b9f7cc48..4ba8a3f5 100644 --- a/devops/Chart.yaml +++ b/devops/Chart.yaml @@ -21,5 +21,5 @@ version: 0.0.1 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: 0.2.5 +appVersion: 0.3.2 From b9e4483a9ed3d9ef25f282e5cb780b92c9b7064d Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Thu, 13 Apr 2023 14:51:44 +0200 Subject: [PATCH 04/10] add new variables for Idnot connexion --- next.config.js | 2 + src/front/Api/Auth/IdNot/index.ts | 26 +++----- src/front/Components/Layouts/Login/index.tsx | 63 +++++++++++-------- .../Layouts/LoginCallback/index.tsx | 1 - src/front/Config/VariablesFront.ts | 4 ++ src/pages/_app.tsx | 9 ++- 6 files changed, 59 insertions(+), 46 deletions(-) diff --git a/next.config.js b/next.config.js index b11b161e..898d4a52 100644 --- a/next.config.js +++ b/next.config.js @@ -11,6 +11,8 @@ const nextConfig = { BACK_API_VERSION: process.env.BACK_API_VERSION, FRONT_APP_HOST: process.env.FRONT_APP_HOST, FRONT_APP_PORT: process.env.FRONT_APP_PORT, + IDNOT_AUTHORIZE_ENDPOINT: process.env.IDNOT_AUTHORIZE_ENDPOINT, + IDNOT_CLIENT_ID: process.env.IDNOT_CLIENT_ID, }, }; diff --git a/src/front/Api/Auth/IdNot/index.ts b/src/front/Api/Auth/IdNot/index.ts index 11b6f7be..989112f1 100644 --- a/src/front/Api/Auth/IdNot/index.ts +++ b/src/front/Api/Auth/IdNot/index.ts @@ -11,28 +11,16 @@ export default class Auth extends BaseApiService { } public static getInstance(): Auth { - return (this.instance = this.instance ?? new Auth()); - } - - public async userSignin() { - const url = new URL( - "https://qual-connexion.idnot.fr/IdPOAuth2/authorize/idnot_idp_v1?client_id=4501646203F3EF67&redirect_uri=http://0.0.0.0:3000/authorized-client&scope=openid,profile,offline_access&response_type=code" - ); - try { - return await this.getRequest(url); - } catch (err) { - this.onError(err); - return Promise.reject(err); - } + return (this.instance = this.instance ?? new this()); } public async getIdnotJwt(autorizationCode: string | string[]): Promise { - const baseBackUrl = FrontendVariables.getInstance().BACK_API_PROTOCOL + - FrontendVariables.getInstance().BACK_API_HOST + - (FrontendVariables.getInstance().BACK_API_PORT ? ":" + FrontendVariables.getInstance().BACK_API_PORT : ""); - const url = new URL( - `${baseBackUrl}/api/v1/idnot-user/${autorizationCode}` - ); + const variables = FrontendVariables.getInstance(); + const baseBackUrl = + variables.BACK_API_PROTOCOL + + variables.BACK_API_HOST + + (variables.BACK_API_PORT ? ":" + variables.BACK_API_PORT : ""); + const url = new URL(`${baseBackUrl}/api/v1/idnot-user/${autorizationCode}`); try { return await this.postRequest(url); } catch (err) { diff --git a/src/front/Components/Layouts/Login/index.tsx b/src/front/Components/Layouts/Login/index.tsx index d0e3b3d9..885bb642 100644 --- a/src/front/Components/Layouts/Login/index.tsx +++ b/src/front/Components/Layouts/Login/index.tsx @@ -3,34 +3,47 @@ import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import BasePage from "../Base"; import classes from "./classes.module.scss"; import CoffreIcon from "@Assets/Icons/coffre.svg"; -import LandingImage from "./landing-connect.png" +import LandingImage from "./landing-connect.png"; import Image from "next/image"; import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage"; import { FrontendVariables } from "@Front/Config/VariablesFront"; export default class LoginClass extends BasePage { - public override render(): JSX.Element { - return ( - -
- coffre -
Connexion espace professionnel
- -
Vous n’arrivez pas à vous connecter ?
- -
-
- ); - } + public override render(): JSX.Element { + return ( + +
+ coffre + +
+ Connexion espace professionnel +
+
+ + +
+ Vous n’arrivez pas à vous connecter ? +
+
+ +
+
+ ); + } - private redirectUserOnConnection() { - // check variable - const baseFronturl = FrontendVariables.getInstance().BACK_API_PROTOCOL + - FrontendVariables.getInstance().FRONT_APP_HOST + - (FrontendVariables.getInstance().FRONT_APP_PORT ? ":" + FrontendVariables.getInstance().FRONT_APP_PORT : ""); - - const url = `https://qual-connexion.idnot.fr/IdPOAuth2/authorize/idnot_idp_v1?client_id=4501646203F3EF67&redirect_uri=${baseFronturl}/authorized-client&scope=openid,profile,offline_access&response_type=code` - - window.location.assign(url) - } -} \ No newline at end of file + private redirectUserOnConnection() { + const variables = FrontendVariables.getInstance(); + const baseFronturl = + variables.BACK_API_PROTOCOL + + variables.FRONT_APP_HOST + + (variables.FRONT_APP_PORT ? ":" + variables.FRONT_APP_PORT : ""); + const authorizeEndPoint = variables.IDNOT_AUTHORIZE_ENDPOINT; + const clientId = variables.IDNOT_CLIENT_ID; + const url = `${authorizeEndPoint}?client_id=${clientId}&redirect_uri=${baseFronturl}/authorized-client&scope=openid,profile,offline_access&response_type=code`; + window.location.assign(url); + } +} diff --git a/src/front/Components/Layouts/LoginCallback/index.tsx b/src/front/Components/Layouts/LoginCallback/index.tsx index 7f7a1512..f0bf45d3 100644 --- a/src/front/Components/Layouts/LoginCallback/index.tsx +++ b/src/front/Components/Layouts/LoginCallback/index.tsx @@ -81,7 +81,6 @@ export default function LoginCallBack(props: IPropsClass) { await authService.getIdnotJwt(code); } catch (error) { console.error(error); - // Router.push('/login'); } }; getIdNotJwt(); diff --git a/src/front/Config/VariablesFront.ts b/src/front/Config/VariablesFront.ts index 33ddcfda..89678d93 100644 --- a/src/front/Config/VariablesFront.ts +++ b/src/front/Config/VariablesFront.ts @@ -15,6 +15,10 @@ export class FrontendVariables { public FRONT_APP_PORT!: string; + public IDNOT_AUTHORIZE_ENDPOINT!: string; + + public IDNOT_CLIENT_ID!: string; + private constructor() {} public static getInstance(): FrontendVariables { diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 41dd8b44..babb45aa 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -19,9 +19,11 @@ type AppPropsWithLayout = AppProps & { backApiVersion: string, frontAppHost: string, frontAppPort: string, + idNotAuthorizeEndpoint: string; + idNotClientId: string; }; -const MyApp = (({ Component, pageProps, backApiProtocol, backApiHost, backApiPort, backApiRootUrl, backApiVersion, frontAppHost, frontAppPort }: AppPropsWithLayout) => { +const MyApp = (({ Component, pageProps, backApiProtocol, backApiHost, backApiPort, backApiRootUrl, backApiVersion, frontAppHost, frontAppPort, idNotAuthorizeEndpoint, idNotClientId }: AppPropsWithLayout) => { const getLayout = Component.getLayout ?? ((page) => ); FrontendVariables.getInstance().BACK_API_PROTOCOL = backApiProtocol; @@ -31,6 +33,9 @@ const MyApp = (({ Component, pageProps, backApiProtocol, backApiHost, backApiPor FrontendVariables.getInstance().BACK_API_VERSION = backApiVersion; FrontendVariables.getInstance().FRONT_APP_HOST = frontAppHost; FrontendVariables.getInstance().FRONT_APP_PORT = frontAppPort; + FrontendVariables.getInstance().IDNOT_AUTHORIZE_ENDPOINT = idNotAuthorizeEndpoint; + FrontendVariables.getInstance().IDNOT_CLIENT_ID = idNotClientId; + return getLayout(); }) as AppType; @@ -44,6 +49,8 @@ MyApp.getInitialProps = async () => { backApiVersion: process.env["BACK_API_VERSION"], frontAppHost: process.env["FRONT_APP_HOST"], frontAppPort: process.env["FRONT_APP_PORT"], + idNotAuthorizeEndpoint: process.env["IDNOT_AUTHORIZE_ENDPOINT"], + idNotClientId: process.env["IDNOT_CLIENT_ID"], }; } From 85da4a0f511bf5960084fea67a46de2ea37bc385 Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Thu, 13 Apr 2023 14:52:58 +0200 Subject: [PATCH 05/10] update app version --- devops/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops/Chart.yaml b/devops/Chart.yaml index 4ba8a3f5..972b6a90 100644 --- a/devops/Chart.yaml +++ b/devops/Chart.yaml @@ -21,5 +21,5 @@ version: 0.0.1 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: 0.3.2 +appVersion: 0.3.3 From 07b30361b1c3386d584ba16d73988d03c6c902a5 Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Thu, 13 Apr 2023 15:02:19 +0200 Subject: [PATCH 06/10] add loop icon --- src/front/Assets/icons/loop.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/front/Assets/icons/loop.svg b/src/front/Assets/icons/loop.svg index bac9066a..4c3cdbbd 100644 --- a/src/front/Assets/icons/loop.svg +++ b/src/front/Assets/icons/loop.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file From e0ce4303469403fcb580e0b654dbddc9709dcf4c Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Thu, 13 Apr 2023 15:02:54 +0200 Subject: [PATCH 07/10] update app version --- devops/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops/Chart.yaml b/devops/Chart.yaml index 972b6a90..22f983b6 100644 --- a/devops/Chart.yaml +++ b/devops/Chart.yaml @@ -21,5 +21,5 @@ version: 0.0.1 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: 0.3.3 +appVersion: 0.3.4 From 1fad585f539f5e9bccfe0fdeb34694d379f462cd Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Thu, 13 Apr 2023 15:13:25 +0200 Subject: [PATCH 08/10] add loop svg --- devops/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops/Chart.yaml b/devops/Chart.yaml index 22f983b6..f7c6fa2d 100644 --- a/devops/Chart.yaml +++ b/devops/Chart.yaml @@ -21,5 +21,5 @@ version: 0.0.1 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: 0.3.4 +appVersion: 0.3.5 From ca4cd0b1b4e101af5232d4cfa5a17630792dd686 Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Thu, 13 Apr 2023 15:27:02 +0200 Subject: [PATCH 09/10] fix assets folder --- src/front/Assets/{icons => Icons}/loop.svg | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/front/Assets/{icons => Icons}/loop.svg (100%) diff --git a/src/front/Assets/icons/loop.svg b/src/front/Assets/Icons/loop.svg similarity index 100% rename from src/front/Assets/icons/loop.svg rename to src/front/Assets/Icons/loop.svg From a1771379c8abea52dde133272a770e2dccfa6c93 Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Thu, 13 Apr 2023 17:36:58 +0200 Subject: [PATCH 10/10] new version of app for idNot demo --- devops/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops/Chart.yaml b/devops/Chart.yaml index f7c6fa2d..a3d9313f 100644 --- a/devops/Chart.yaml +++ b/devops/Chart.yaml @@ -21,5 +21,5 @@ version: 0.0.1 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: 0.3.5 +appVersion: 0.3.7