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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path d="M11.4351 10.0629H10.7124L10.4563 9.81589C11.3528 8.77301 11.8925 7.4191 11.8925 5.94625C11.8925 2.66209 9.23042 0 5.94625 0C2.66209 0 0 2.66209 0 5.94625C0 9.23042 2.66209 11.8925 5.94625 11.8925C7.4191 11.8925 8.77301 11.3528 9.81589 10.4563L10.0629 10.7124V11.4351L14.6369 16L16 14.6369L11.4351 10.0629ZM5.94625 10.0629C3.66838 10.0629 1.82962 8.22413 1.82962 5.94625C1.82962 3.66838 3.66838 1.82962 5.94625 1.82962C8.22413 1.82962 10.0629 3.66838 10.0629 5.94625C10.0629 8.22413 8.22413 10.0629 5.94625 10.0629Z" fill="#939393"/>
|
<path d="M11.4351 10.0629H10.7124L10.4563 9.81589C11.3528 8.77301 11.8925 7.4191 11.8925 5.94625C11.8925 2.66209 9.23042 0 5.94625 0C2.66209 0 0 2.66209 0 5.94625C0 9.23042 2.66209 11.8925 5.94625 11.8925C7.4191 11.8925 8.77301 11.3528 9.81589 10.4563L10.0629 10.7124V11.4351L14.6369 16L16 14.6369L11.4351 10.0629ZM5.94625 10.0629C3.66838 10.0629 1.82962 8.22413 1.82962 5.94625C1.82962 3.66838 3.66838 1.82962 5.94625 1.82962C8.22413 1.82962 10.0629 3.66838 10.0629 5.94625C10.0629 8.22413 8.22413 10.0629 5.94625 10.0629Z" fill="#939393"/>
|
||||||
</svg>
|
</svg>
|
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,34 +3,47 @@ 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";
|
||||||
|
|
||||||
export default class LoginClass extends BasePage {
|
export default class LoginClass extends BasePage {
|
||||||
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"]}>
|
||||||
<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>
|
||||||
</div>
|
</Typography>
|
||||||
</DefaultDoubleSidePage>
|
<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>
|
||||||
|
</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,45 +1,90 @@
|
|||||||
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;
|
||||||
if (code) {
|
if (code) {
|
||||||
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);
|
} catch (error) {
|
||||||
Router.push('/dossier');
|
console.error(error);
|
||||||
} catch (error) {
|
}
|
||||||
console.error(error);
|
};
|
||||||
Router.push('/login');
|
getIdNotJwt();
|
||||||
}
|
return <Folder {...props} />;
|
||||||
};
|
}
|
||||||
getIdNotJwt();
|
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