Skip to content

Commit

Permalink
fix: accès au formulaire hors expé pour les utilisateurs de l'expé
Browse files Browse the repository at this point in the history
  • Loading branch information
LucasDetre committed Jan 24, 2025
1 parent 22b22b2 commit 46ec9ac
Show file tree
Hide file tree
Showing 22 changed files with 144 additions and 75 deletions.
6 changes: 4 additions & 2 deletions server/src/db/db.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,10 @@ export const connectToPgDb = async (uri: string) => {
pool.on("error", (error) => {
try {
logger.error({ error }, "[PSQL] pg pool lost connexion with database");
// eslint-disable-next-line no-empty
} catch (_e) {}
// eslint-disable-next-line unused-imports/no-unused-vars
} catch (_e) {
// error
}
});

kdb = new Kysely<DB>({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ const decodeCodeVerifierJwt = (token: string, secret: string) => {
if (decoded.code_verifier) {
return decoded.code_verifier;
}
// eslint-disable-next-line unused-imports/no-unused-vars
} catch (_e) {
throw new Error("wrong codeVerifierJwt");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ export const [extractUserInRequest, extractUserInRequestFactory] = inject(

if (!user?.enabled) return;
request.user = cleanNull(user) as RequestUser;
// eslint-disable-next-line unused-imports/no-unused-vars
} catch (_e) {
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export const [fetchIJ] = inject({ getUaiData, cacheIj, clearIjCache }, (deps) =>
millesimesOK.push(MILLESIMES_IJ[i]);
await deps.cacheIj({ data, uai, millesime });
d.push(data);
// eslint-disable-next-line unused-imports/no-unused-vars
} catch (_err) {
millesimesNOK.push(MILLESIMES_IJ[i]);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export const [fetchIjReg] = inject({ getRegionData, cacheIjReg, clearIjRegCache
millesimesOK.push(millesime);
await deps.cacheIjReg({ data, codeRegion, millesime });
d.push(data);
// eslint-disable-next-line unused-imports/no-unused-vars
} catch (_err) {
millesimesNOK.push(millesime);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ export const importLienEmploiFormationFactory =

try {
await createFormationRome(data);
// eslint-disable-next-line unused-imports/no-unused-vars
} catch (_err) {
console.log(
`\nProblème en ajoutant le couple CFD ${data.cfd} / ROME ${data.codeRome}. Il est probable que le CFD ou le code ROME n'existe pas dans notre base.`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ export const [importTensionFranceTravailRegion] = inject(
},
(deps) => async () => {
// Create new file
await deps.createFranceTravailTensionFile(deps.filePathManager.getFranceTravailIndicateurTensionRegionStatsFilePath());
await deps.createFranceTravailTensionFile(
deps.filePathManager.getFranceTravailIndicateurTensionRegionStatsFilePath()
);

// Lister tous les ROMES pour lesquels il faut importer les données de tension
const romes = (await deps.findAllRomeCodes()).map((r) => r.codeRome);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,10 @@ describe("[DELETE]/intention/changement-statut/:id", () => {
},
changementStatutExistant: async (input: Partial<ChangementStatut> = {}) => {
if (user && intention) {
changementStatut = (await buildChangementStatut(user, { intentionNumero: intention.numero, ...input }).injectInDB()).build();
changementStatut = (await buildChangementStatut(
user,
{ intentionNumero: intention.numero, ...input }
).injectInDB()).build();
}
},
changementStatutInexistant: () => {
Expand Down
1 change: 1 addition & 0 deletions server/src/utils/pgtools.utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ function createFunction(action: "CREATE" | "DROP") {
if (action === "CREATE") {
try {
await pgClient.query(`DROP DATABASE "${escapedDatabaseName}"`); // ensure drop
// eslint-disable-next-line unused-imports/no-unused-vars
} catch (_error) {
// silent db does not exist
}
Expand Down
6 changes: 4 additions & 2 deletions ui/app/(wrapped)/auth/activer-compte/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { serverClient } from "@/api.client";
import { ActivateAccountError } from "./ActivateAccountError";
import { ActivateAccountForm } from "./ActivateAccountForm";

export default async function ({ searchParams: { activationToken } }: { searchParams: { activationToken: string } }) {
const Page = async ({ searchParams: { activationToken } }: { searchParams: { activationToken: string } }) => {
try {
await serverClient.ref("[GET]/auth/check-activation-token").query({
query: { activationToken },
Expand All @@ -18,4 +18,6 @@ export default async function ({ searchParams: { activationToken } }: { searchPa
} catch (e: any) {
return <ActivateAccountError message={e.response.data.message} />;
}
}
};

export default Page;
4 changes: 2 additions & 2 deletions ui/app/(wrapped)/auth/login/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ import { LoginForm } from "./LoginForm";

const ERROR_TYPE = "echec_dne_redirect";

function LoginPage({ searchParams }: { params: object; searchParams: { error?: string } }) {
const LoginPage = ({ searchParams }: { params: object; searchParams: { error?: string } }) => {
return (
<VStack spacing="16px" py="16px">
{searchParams.error === ERROR_TYPE && <ErrorSSO />}
<LoginForm />
{searchParams.error !== ERROR_TYPE && <AlertPerdir />}
</VStack>
);
}
};

export default LoginPage;
15 changes: 6 additions & 9 deletions ui/app/(wrapped)/auth/reset-password/page.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
import { ResetPasswordForm } from "./ResetPasswordForm";

// eslint-disable-next-line import/no-anonymous-default-export, react/display-name
export default async function ({
const Page = ({
searchParams: { resetPasswordToken },
}: {
searchParams: { resetPasswordToken: string };
}) {
return (
<div>
<ResetPasswordForm resetPasswordToken={resetPasswordToken} />
</div>
);
}
}) => (
<ResetPasswordForm resetPasswordToken={resetPasswordToken} />
);

export default Page;
17 changes: 5 additions & 12 deletions ui/app/(wrapped)/intentions/page.tsx
Original file line number Diff line number Diff line change
@@ -1,22 +1,15 @@
"use client";

import { redirect } from "next/navigation";
import { hasRole } from "shared";
import { CODES_REGIONS_EXPE } from "shared/security/securityUtils";

import { useAuth } from "@/utils/security/useAuth";

// eslint-disable-next-line import/no-anonymous-default-export
export default () => {

const Page = () => {
const { auth } = useAuth();
const isPerdir = hasRole({
user: auth?.user,
role: "perdir",
});
// Feature flag pour les perdir de la région Occitanie (76) et AURA (84)
// qui font partie du test
const FF_isPerdirPartOfExpe = isPerdir && CODES_REGIONS_EXPE.includes(auth?.user.codeRegion ?? "");
const isPartOfExpe = CODES_REGIONS_EXPE.includes(auth?.user.codeRegion ?? "");

// eslint-disable-next-line @typescript-eslint/no-unused-expressions
FF_isPerdirPartOfExpe ? redirect("/intentions/perdir") : redirect("/intentions/saisie");
return isPartOfExpe ? redirect("/intentions/perdir/saisie") : redirect("/intentions/saisie");
};
export default Page;
14 changes: 12 additions & 2 deletions ui/app/(wrapped)/intentions/perdir/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
import { redirect } from "next/navigation";
"use client";

const Page = () => redirect("/intentions/perdir/saisie");
import {redirect} from 'next/navigation';
import {CODES_REGIONS_EXPE} from 'shared/security/securityUtils';

import {useAuth} from '@/utils/security/useAuth';


const Page = () => {
const { auth } = useAuth();
const isPartOfExpe = CODES_REGIONS_EXPE.includes(auth?.user.codeRegion ?? "");

return isPartOfExpe ? redirect("/intentions/perdir/saisie") : redirect("/intentions/saisie");
};
export default Page;
5 changes: 4 additions & 1 deletion ui/app/(wrapped)/intentions/perdir/saisie/[numero]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import {GuardExpe} from '@/utils/security/GuardExpe';
import { GuardPermission } from "@/utils/security/GuardPermission";

import PageClient from "./client";
Expand All @@ -11,6 +12,8 @@ export default ({
};
}) => (
<GuardPermission permission="intentions-perdir/lecture">
<PageClient params={params}></PageClient>
<GuardExpe isExpeRoute={true}>
<PageClient params={params} />
</GuardExpe>
</GuardPermission>
);
31 changes: 17 additions & 14 deletions ui/app/(wrapped)/intentions/perdir/saisie/new/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { client } from "@/api.client";
import { IntentionSpinner } from "@/app/(wrapped)/intentions/perdir/saisie/components/IntentionSpinner";
import { IntentionForm } from "@/app/(wrapped)/intentions/perdir/saisie/intentionForm/IntentionForm";
import { IntentionFilesProvider } from "@/app/(wrapped)/intentions/perdir/saisie/intentionForm/observationsSection/filesSection/filesContext";
import { GuardExpe } from '@/utils/security/GuardExpe';
import { GuardPermission } from "@/utils/security/GuardPermission";

// eslint-disable-next-line import/no-anonymous-default-export, react/display-name
Expand All @@ -14,20 +15,22 @@ export default () => {

return (
<GuardPermission permission="intentions-perdir/ecriture">
<IntentionFilesProvider>
{isLoading && <IntentionSpinner />}
{!isLoading && defaultCampagne && (
<IntentionForm
disabled={defaultCampagne?.statut !== CampagneStatutEnum["en cours"]}
defaultValues={{
campagneId: defaultCampagne?.id,
rentreeScolaire: defaultCampagne?.annee ? Number.parseInt(defaultCampagne?.annee) + 1 : undefined,
}}
formMetadata={{}}
campagne={defaultCampagne}
/>
)}
</IntentionFilesProvider>
<GuardExpe isExpeRoute={true}>
<IntentionFilesProvider>
{isLoading && <IntentionSpinner />}
{!isLoading && defaultCampagne && (
<IntentionForm
disabled={defaultCampagne?.statut !== CampagneStatutEnum["en cours"]}
defaultValues={{
campagneId: defaultCampagne?.id,
rentreeScolaire: defaultCampagne?.annee ? Number.parseInt(defaultCampagne?.annee) + 1 : undefined,
}}
formMetadata={{}}
campagne={defaultCampagne}
/>
)}
</IntentionFilesProvider>
</GuardExpe>
</GuardPermission>
);
};
9 changes: 6 additions & 3 deletions ui/app/(wrapped)/intentions/perdir/saisie/page.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
import { GuardExpe } from "@/utils/security/GuardExpe";
import { GuardPermission } from "@/utils/security/GuardPermission";

import { PageClient } from "./page.client";

// eslint-disable-next-line import/no-anonymous-default-export, react/display-name
export default () => {
const SaisiePage = () => {
return (
<GuardPermission permission="intentions-perdir/lecture">
<PageClient />
<GuardExpe isExpeRoute={true}>
<PageClient />
</GuardExpe>
</GuardPermission>
);
};
export default SaisiePage;
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { GuardExpe } from "@/utils/security/GuardExpe";
import { GuardPermission } from "@/utils/security/GuardPermission";

import PageClient from "./client";
Expand All @@ -10,7 +11,9 @@ const IntentionsPerDirSynthesePage = ({
};
}) => (
<GuardPermission permission="intentions-perdir/lecture">
<PageClient params={params}></PageClient>
<GuardExpe isExpeRoute={true}>
<PageClient params={params}/>
</GuardExpe>
</GuardPermission>
);

Expand Down
5 changes: 4 additions & 1 deletion ui/app/(wrapped)/intentions/saisie/[numero]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import {GuardExpe} from '@/utils/security/GuardExpe';
import { GuardPermission } from "@/utils/security/GuardPermission";

import PageClient from "./client";
Expand All @@ -11,6 +12,8 @@ export default ({
};
}) => (
<GuardPermission permission="intentions/lecture">
<PageClient params={params}></PageClient>
<GuardExpe isExpeRoute={false}>
<PageClient params={params} />
</GuardExpe>
</GuardPermission>
);
49 changes: 26 additions & 23 deletions ui/app/(wrapped)/intentions/saisie/new/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { CampagneStatutEnum } from "shared/enum/campagneStatutEnum";
import { client } from "@/api.client";
import { IntentionSpinner } from "@/app/(wrapped)/intentions/saisie/components/IntentionSpinner";
import { IntentionForm } from "@/app/(wrapped)/intentions/saisie/intentionForm/IntentionForm";
import {GuardExpe} from '@/utils/security/GuardExpe';
import { GuardPermission } from "@/utils/security/GuardPermission";

// eslint-disable-next-line import/no-anonymous-default-export, react/display-name
Expand All @@ -27,35 +28,37 @@ export default () => {

return (
<GuardPermission permission="intentions/ecriture">
{numero ? (
data && (
<GuardExpe isExpeRoute={false}>
{numero ? (
data && (
<IntentionForm
disabled={defaultCampagne?.statut !== CampagneStatutEnum["en cours"]}
defaultValues={{
cfd: data?.compensationCfd,
codeDispositif: data?.compensationCodeDispositif,
uai: data?.compensationUai,
rentreeScolaire: data?.compensationRentreeScolaire,
campagneId: data?.campagneId,
}}
formMetadata={{
etablissement: data?.metadata?.etablissementCompensation,
formation: data?.metadata?.formationCompensation,
}}
campagne={defaultCampagne}
/>
)
) : (
<IntentionForm
disabled={defaultCampagne?.statut !== CampagneStatutEnum["en cours"]}
defaultValues={{
cfd: data?.compensationCfd,
codeDispositif: data?.compensationCodeDispositif,
uai: data?.compensationUai,
rentreeScolaire: data?.compensationRentreeScolaire,
campagneId: data?.campagneId,
}}
formMetadata={{
etablissement: data?.metadata?.etablissementCompensation,
formation: data?.metadata?.formationCompensation,
campagneId: defaultCampagne?.id,
rentreeScolaire: defaultCampagne?.annee ? Number.parseInt(defaultCampagne?.annee) + 1 : undefined,
}}
formMetadata={{}}
campagne={defaultCampagne}
/>
)
) : (
<IntentionForm
disabled={defaultCampagne?.statut !== CampagneStatutEnum["en cours"]}
defaultValues={{
campagneId: defaultCampagne?.id,
rentreeScolaire: defaultCampagne?.annee ? Number.parseInt(defaultCampagne?.annee) + 1 : undefined,
}}
formMetadata={{}}
campagne={defaultCampagne}
/>
)}
)}
</GuardExpe>
</GuardPermission>
);
};
5 changes: 4 additions & 1 deletion ui/app/(wrapped)/intentions/saisie/page.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import { GuardExpe } from "@/utils/security/GuardExpe";
import { GuardPermission } from "@/utils/security/GuardPermission";

import { PageClient } from "./page.client";

const SaisiePage = () => {
return (
<GuardPermission permission="intentions/lecture">
<PageClient />
<GuardExpe isExpeRoute={false}>
<PageClient />
</GuardExpe>
</GuardPermission>
);
};
Expand Down
Loading

0 comments on commit 46ec9ac

Please sign in to comment.