Merge branch 'dev' of https://github.com/smart-chain-fr/leCoffre-front into dev
This commit is contained in:
commit
88c13c7c03
@ -21,5 +21,5 @@ version: 0.0.1
|
|||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# 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.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
appVersion: 0.2.5
|
appVersion: 0.3.7
|
||||||
|
|
||||||
|
@ -11,6 +11,8 @@ const nextConfig = {
|
|||||||
BACK_API_VERSION: process.env.BACK_API_VERSION,
|
BACK_API_VERSION: process.env.BACK_API_VERSION,
|
||||||
FRONT_APP_HOST: process.env.FRONT_APP_HOST,
|
FRONT_APP_HOST: process.env.FRONT_APP_HOST,
|
||||||
FRONT_APP_PORT: process.env.FRONT_APP_PORT,
|
FRONT_APP_PORT: process.env.FRONT_APP_PORT,
|
||||||
|
IDNOT_AUTHORIZE_ENDPOINT: process.env.IDNOT_AUTHORIZE_ENDPOINT,
|
||||||
|
IDNOT_CLIENT_ID: process.env.IDNOT_CLIENT_ID,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { Service } from "typedi";
|
import { Service } from "typedi";
|
||||||
import BaseApiService from "@Front/Api/BaseApiService";
|
import BaseApiService from "@Front/Api/BaseApiService";
|
||||||
|
import { FrontendVariables } from "@Front/Config/VariablesFront";
|
||||||
|
|
||||||
@Service()
|
@Service()
|
||||||
export default class Auth extends BaseApiService {
|
export default class Auth extends BaseApiService {
|
||||||
@ -10,30 +11,21 @@ export default class Auth extends BaseApiService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static getInstance(): Auth {
|
public static getInstance(): Auth {
|
||||||
return (this.instance = this.instance ?? new Auth());
|
return (this.instance = this.instance ?? new this());
|
||||||
}
|
}
|
||||||
|
|
||||||
public async userSignin() {
|
public async getIdnotJwt(autorizationCode: string | string[]): Promise<any> {
|
||||||
const url = new URL(
|
const variables = FrontendVariables.getInstance();
|
||||||
"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"
|
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 {
|
try {
|
||||||
return await this.getRequest<any>(url);
|
return await this.postRequest<any>(url);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this.onError(err);
|
this.onError(err);
|
||||||
return Promise.reject(err);
|
return Promise.reject(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getIdnotJwt(autorizationCode: string | string[]) {
|
|
||||||
const url = new URL(
|
|
||||||
`http://127.0.0.1:3001/api/v1/idnot-user/${autorizationCode}`
|
|
||||||
);
|
|
||||||
try {
|
|
||||||
await this.postRequest<any>(url);
|
|
||||||
} catch (err) {
|
|
||||||
this.onError(err);
|
|
||||||
//return Promise.reject(err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 645 B After Width: | Height: | Size: 644 B |
@ -29,10 +29,10 @@ export default class ClientSection extends React.Component<IProps, IState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private renderCustomerFolders() {
|
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;
|
if (!folderHasCustomer.customer) return null;
|
||||||
// TODO : Les documents ASKED fonctionne mais les autres documents ne doivcent etre seulement ceux qui correspondent au folder
|
// TODO : Les documents ASKED fonctionne mais les autres documents ne doivcent etre seulement ceux qui correspondent au folder
|
||||||
return <div className={classes["user-folder"]}><UserFolder folder={this.props.folder} customer={folderHasCustomer.customer} key={folderHasCustomer.customer.uid} /></div>;
|
return <div className={classes["user-folder"]} key={folderHasCustomer.customer.uid}><UserFolder folder={this.props.folder} customer={folderHasCustomer.customer} /></div>;
|
||||||
})
|
})
|
||||||
return output ?? null;
|
return output ?? null;
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
|||||||
import BasePage from "../Base";
|
import BasePage from "../Base";
|
||||||
import classes from "./classes.module.scss";
|
import classes from "./classes.module.scss";
|
||||||
import CoffreIcon from "@Assets/Icons/coffre.svg";
|
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 Image from "next/image";
|
||||||
import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage";
|
import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage";
|
||||||
import { FrontendVariables } from "@Front/Config/VariablesFront";
|
import { FrontendVariables } from "@Front/Config/VariablesFront";
|
||||||
@ -14,23 +14,36 @@ export default class LoginClass extends BasePage {
|
|||||||
<DefaultDoubleSidePage title={"Login"} image={LandingImage}>
|
<DefaultDoubleSidePage title={"Login"} image={LandingImage}>
|
||||||
<div className={classes["root"]}>
|
<div className={classes["root"]}>
|
||||||
<Image alt="coffre" src={CoffreIcon} />
|
<Image alt="coffre" src={CoffreIcon} />
|
||||||
<Typography typo={ITypo.H1}><div className={classes["title"]}>Connexion espace professionnel</div></Typography>
|
<Typography typo={ITypo.H1}>
|
||||||
<Button onClick={this.redirectUserOnConnection}>S’identifier avec ID.not</Button>
|
<div className={classes["title"]}>
|
||||||
<Typography typo={ITypo.P_18}><div className={classes["forget-password"]}>Vous n’arrivez pas à vous connecter ?</div></Typography>
|
Connexion espace professionnel
|
||||||
<Button variant={EButtonVariant.LINE} >Contacter l’administrateur</Button>
|
</div>
|
||||||
|
</Typography>
|
||||||
|
<Button onClick={this.redirectUserOnConnection}>
|
||||||
|
S’identifier avec ID.not
|
||||||
|
</Button>
|
||||||
|
<Typography typo={ITypo.P_18}>
|
||||||
|
<div className={classes["forget-password"]}>
|
||||||
|
Vous n’arrivez pas à vous connecter ?
|
||||||
|
</div>
|
||||||
|
</Typography>
|
||||||
|
<Button variant={EButtonVariant.LINE}>
|
||||||
|
Contacter l’administrateur
|
||||||
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</DefaultDoubleSidePage>
|
</DefaultDoubleSidePage>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private redirectUserOnConnection() {
|
private redirectUserOnConnection() {
|
||||||
// check variable
|
const variables = FrontendVariables.getInstance();
|
||||||
const baseFronturl = FrontendVariables.getInstance().BACK_API_PROTOCOL +
|
const baseFronturl =
|
||||||
FrontendVariables.getInstance().FRONT_APP_HOST +
|
variables.BACK_API_PROTOCOL +
|
||||||
(FrontendVariables.getInstance().FRONT_APP_PORT ? ":" + FrontendVariables.getInstance().FRONT_APP_PORT : "");
|
variables.FRONT_APP_HOST +
|
||||||
|
(variables.FRONT_APP_PORT ? ":" + variables.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`
|
const authorizeEndPoint = variables.IDNOT_AUTHORIZE_ENDPOINT;
|
||||||
|
const clientId = variables.IDNOT_CLIENT_ID;
|
||||||
window.location.assign(url)
|
const url = `${authorizeEndPoint}?client_id=${clientId}&redirect_uri=${baseFronturl}/authorized-client&scope=openid,profile,offline_access&response_type=code`;
|
||||||
|
window.location.assign(url);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,29 +1,76 @@
|
|||||||
import classes from "./classes.module.scss";
|
// import classes from "./classes.module.scss";
|
||||||
import LandingImage from "../Login/landing-connect.png";
|
// import LandingImage from "../Login/landing-connect.png";
|
||||||
import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage";
|
// import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage";
|
||||||
import Router, { useRouter } from "next/router";
|
// 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 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 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<IPropsClass, IStateClass> {
|
// class LoginCallBackClass extends React.Component<IPropsClass, IStateClass> {
|
||||||
public override render(): JSX.Element {
|
// public override render(): JSX.Element {
|
||||||
return (
|
// return (
|
||||||
<DefaultDoubleSidePage title={"Login"} image={LandingImage}>
|
// <DefaultDoubleSidePage title={"Login"} image={LandingImage}>
|
||||||
<div className={classes["root"]}>
|
// <div className={classes["root"]}>
|
||||||
<Loader />
|
// <Image alt="coffre" src={CoffreIcon} />
|
||||||
</div>
|
// <Typography typo={ITypo.H1}>
|
||||||
</DefaultDoubleSidePage>
|
// <div className={classes["title"]}>
|
||||||
);
|
// Connexion espace professionnel
|
||||||
}
|
// </div>
|
||||||
}
|
// </Typography>
|
||||||
|
// <Loader />
|
||||||
|
// <Typography typo={ITypo.P_18}>
|
||||||
|
// <div className={classes["forget-password"]}>
|
||||||
|
// Vous n’arrivez pas à vous connecter ?
|
||||||
|
// </div>
|
||||||
|
// </Typography>
|
||||||
|
// <Button variant={EButtonVariant.LINE}>
|
||||||
|
// Contacter l’administrateur
|
||||||
|
// </Button>
|
||||||
|
// </div>
|
||||||
|
// </DefaultDoubleSidePage>
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
// TODO: Refacto with functionnal component container of classcomponent
|
// 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 <LoginCallBackClass {... props}/>
|
||||||
|
// return <Folder {...props} />;
|
||||||
|
// }
|
||||||
|
// return <LoginClass {...props}/>
|
||||||
|
// }
|
||||||
|
|
||||||
export default function LoginCallBack(props: IPropsClass) {
|
export default function LoginCallBack(props: IPropsClass) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { code } = router.query;
|
const { code } = router.query;
|
||||||
@ -31,15 +78,13 @@ export default function LoginCallBack(props: IPropsClass) {
|
|||||||
const getIdNotJwt = async () => {
|
const getIdNotJwt = async () => {
|
||||||
try {
|
try {
|
||||||
const authService = Auth.getInstance();
|
const authService = Auth.getInstance();
|
||||||
const user = await authService.getIdnotJwt(code);
|
await authService.getIdnotJwt(code);
|
||||||
console.log(user);
|
|
||||||
Router.push('/dossier');
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
Router.push('/login');
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
getIdNotJwt();
|
getIdNotJwt();
|
||||||
|
return <Folder {...props} />;
|
||||||
|
}
|
||||||
|
return <LoginClass {...props}/>
|
||||||
}
|
}
|
||||||
return <LoginCallBackClass {...props} />;
|
|
||||||
}
|
|
@ -15,6 +15,10 @@ export class FrontendVariables {
|
|||||||
|
|
||||||
public FRONT_APP_PORT!: string;
|
public FRONT_APP_PORT!: string;
|
||||||
|
|
||||||
|
public IDNOT_AUTHORIZE_ENDPOINT!: string;
|
||||||
|
|
||||||
|
public IDNOT_CLIENT_ID!: string;
|
||||||
|
|
||||||
private constructor() {}
|
private constructor() {}
|
||||||
|
|
||||||
public static getInstance(): FrontendVariables {
|
public static getInstance(): FrontendVariables {
|
||||||
|
@ -19,9 +19,11 @@ type AppPropsWithLayout = AppProps & {
|
|||||||
backApiVersion: string,
|
backApiVersion: string,
|
||||||
frontAppHost: string,
|
frontAppHost: string,
|
||||||
frontAppPort: 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) => <DefaultLayout children={page}></DefaultLayout>);
|
const getLayout = Component.getLayout ?? ((page) => <DefaultLayout children={page}></DefaultLayout>);
|
||||||
|
|
||||||
FrontendVariables.getInstance().BACK_API_PROTOCOL = backApiProtocol;
|
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().BACK_API_VERSION = backApiVersion;
|
||||||
FrontendVariables.getInstance().FRONT_APP_HOST = frontAppHost;
|
FrontendVariables.getInstance().FRONT_APP_HOST = frontAppHost;
|
||||||
FrontendVariables.getInstance().FRONT_APP_PORT = frontAppPort;
|
FrontendVariables.getInstance().FRONT_APP_PORT = frontAppPort;
|
||||||
|
FrontendVariables.getInstance().IDNOT_AUTHORIZE_ENDPOINT = idNotAuthorizeEndpoint;
|
||||||
|
FrontendVariables.getInstance().IDNOT_CLIENT_ID = idNotClientId;
|
||||||
|
|
||||||
|
|
||||||
return getLayout(<Component {...pageProps} />);
|
return getLayout(<Component {...pageProps} />);
|
||||||
}) as AppType;
|
}) as AppType;
|
||||||
@ -44,6 +49,8 @@ MyApp.getInitialProps = async () => {
|
|||||||
backApiVersion: process.env["BACK_API_VERSION"],
|
backApiVersion: process.env["BACK_API_VERSION"],
|
||||||
frontAppHost: process.env["FRONT_APP_HOST"],
|
frontAppHost: process.env["FRONT_APP_HOST"],
|
||||||
frontAppPort: process.env["FRONT_APP_PORT"],
|
frontAppPort: process.env["FRONT_APP_PORT"],
|
||||||
|
idNotAuthorizeEndpoint: process.env["IDNOT_AUTHORIZE_ENDPOINT"],
|
||||||
|
idNotClientId: process.env["IDNOT_CLIENT_ID"],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user