Skip to content

Commit

Permalink
fix(imap-server): check before add in base mail, more parse in back a…
Browse files Browse the repository at this point in the history
…nd front, new template
  • Loading branch information
Mihoub2 committed Nov 12, 2024
1 parent 06d0198 commit a7fdd22
Show file tree
Hide file tree
Showing 4 changed files with 223 additions and 115 deletions.
11 changes: 11 additions & 0 deletions client/src/components/items/staff-action.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,17 @@ const StaffActions = ({
?.replace(/Le ven.*$/s, "")
?.replace(/Le sam.*$/s, "")
?.replace(/Le dim.*$/s, "")

?.replace(/--[a-fA-F0-9_-]+--/g, "")

.replace(/Content-Type:.*$/gs, "")
.replace(/Content-Disposition:.*$/gs, "")
.replace(/Content-Transfer-Encoding:.*$/gs, "")

.replace(/base64[^ ]+/gs, "[Image ou fichier ignoré]")

?.replace(/<br\s*\/?>/g, "\n")

?.trim();
};

Expand Down
166 changes: 118 additions & 48 deletions client/src/components/mail-form/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { Button, Col, Row, TextArea, ButtonGroup } from "@dataesr/dsfr-plus";
import { useState } from "react";
import { useMutation } from "@tanstack/react-query";
import { toast } from "react-toastify";
import { postHeaders } from "../../config/api";

function EmailForm({
userResponse,
Expand All @@ -9,64 +12,131 @@ function EmailForm({
contribution,
}) {
const [selectedTemplate, setSelectedTemplate] = useState("");
const [tags, setTags] = useState<string[]>(contribution?.tags || []);

const templates = [
{ label: "Accès API scanR", value: "api" },
{ label: "scanR Ne gère pas cela", value: "desole" },
{ label: "Mauvais interlocuteur", value: "interlocuteur" },
{ label: "Merci !", value: "merci" },
{ label: "Accès thèse", value: "thèse" },
{ label: "Accès documents", value: "documents" },
{ label: "Mise à jour", value: "maj" },
{ label: "Publication liées", value: "publications" },
{ label: "Contenue retiré", value: "suppression" },
{ label: "Accès API scanR", value: "API" },
{ label: "scanR Ne gère pas cela", value: "HS" },
{ label: "Mauvais interlocuteur", value: "INTERLOCUTEUR" },
{ label: "Merci !", value: "REMERCIEMENT" },
{ label: "Accès thèse", value: "THESE" },
{ label: "Accès documents", value: "DOCUMENTS" },
{ label: "Mise à jour", value: "MAJ" },
{ label: "Publication liées", value: "PUBLICATION" },
{ label: "Contenue retiré", value: "SUPRESSION" },
{ label: "Mise en relation", value: "MISE EN RELATION" },
];

let basePath = "contacts";

if (window.location.pathname.includes("contributionPage")) {
basePath = "contribute";
}
if (window.location.pathname.includes("scanr-removeuser")) {
basePath = "remove-user";
}
if (window.location.pathname.includes("scanr-namechange")) {
basePath = "update-user-data";
} else if (window.location.pathname.includes("apioperations")) {
basePath = "production";
}

const isDevelopment = import.meta.env.VITE_HEADER_TAG === "Development";
const baseURL = import.meta.env.VITE_BASE_API_URL;
const url = isDevelopment
? `http://localhost:3000/api/${basePath}/${contribution?.id}`
: `${baseURL}/api/${basePath}/${contribution?.id}`;

const { mutate: updateTags } = useMutation<void, unknown, string[]>(
async (updatedTags: string[]) => {
const response = await fetch(`${url}`, {
method: "PATCH",
headers: postHeaders,
body: JSON.stringify({ tags: updatedTags }),
});

if (!response.ok) {
throw new Error("Erreur lors de l'ajout du tag.");
}
return response.json();
},
{
onSuccess: () => {
toast.success("Tag ajouté avec succès !");
},
onError: () => {
toast.error("Erreur lors de l'ajout du tag.");
},
}
);

const handleTemplateChange = (e) => {
const value = e.target.value;
setSelectedTemplate(value);

if (value === "api") {
setUserResponse(`Bonjour,
L'accès aux API scanR est possible avec le compte [Identifiant] et le mot de passe [Mot de passe].
Les API sont documentées ici https://scanr.enseignementsup-recherche.gouv.fr/docs/overview.
N'hésitez pas à nous solliciter pour des compléments d'informations.
Cordialement,
Département Ingénierie et science des données`);
switch (value) {
case "API":
setUserResponse(`Bonjour,
L'accès aux API scanR est possible avec le compte [Identifiant] et le mot de passe [Mot de passe].
Les API sont documentées ici https://scanr.enseignementsup-recherche.gouv.fr/docs/overview.
N'hésitez pas à nous solliciter pour des compléments d'informations.
Cordialement,
Département Ingénierie et science des données`);
break;
case "HS":
setUserResponse(
`Bonjour, désolé scanR ne gère pas cela. Cordialement L'équipe scanR`
);
break;
case "INTERLOCUTEUR":
setUserResponse(
`Bonjour, Il faut vous adresser directement au laboratoire de votre choix. Votre message via scanR ne parvient qu'aux gestionnaires de l'application scanR (et pas au laboratoire). Pour joindre les laboratoires, partez plutôt de leur site web propre. Cordialement L'équipe scanR`
);
break;
case "REMERCIEMENT":
setUserResponse(
`Bonjour, merci pour ce retour encourageant ! Cordialement L'équipe scanR`
);
break;
case "THESE":
setUserResponse(
`Bonjour, Vous trouverez ici XXXXXXXXXXXXXXXXXXXX les renseignements pour accéder à la thèse. Cordialement L'équipe scanR`
);
break;
case "DOCUMENTS":
setUserResponse(
`Bonjour, scanR ne dispose pas des documents indexés, mais uniquement des métadonnées les décrivant. Cordialement L'équipe scanR`
);
break;
case "MAJ":
setUserResponse(
`Bonjour, Merci pour ce signalement. Les modifications seront visibles à la prochaine actualisation du site, d'ici quelques semaines. Cordialement L'équipe scanR`
);
break;
case "PUBLICATION":
setUserResponse(
`Bonjour, merci pour votre contribution. Les publications seront liées dans les prochains jours. Cordialement L'équipe scanR`
);
break;
case "SUPRESSION":
setUserResponse(
`Bonjour, votre thèse et votre profil auteur ont bien été retirés. Cordialement L'équipe scanR`
);
break;
case "MISE EN RELATION":
setUserResponse(
`Bonjour, scanR n'est pas une plateforme de mise en relation. Votre message parvient à scanR qui est un agrégateur de métadonnées liées à la recherche et à l'innovation. Cordialement L'équipe scanR`
);
break;
default:
break;
}
if (value === "desole") {
setUserResponse(
`Bonjour, désolé scanR ne gère pas cela. Cordialement L'équipe scanR`
);

if (value && !tags.includes(value)) {
const updatedTags = [...tags, value];
setTags(updatedTags);
updateTags(updatedTags);
}
if (value === "interlocuteur")
setUserResponse(
`Bonjour, Il faut vous adresser directement au laboratoire de votre choix. Votre message via scanR ne parvient qu'aux gestionnaires de l'application scanR (et pas au laboratoire). Pour joindre les laboratoires, partez plutôt de leur site web propre. Cordialement L'équipe scanR`
);
if (value === "merci")
setUserResponse(
`Bonjour, merci pour ce retour encourageant ! Cordialement L'équipe scanR`
);
if (value === "thèse")
setUserResponse(
`Bonjour, Vous trouverez ici XXXXXXXXXXXXXXXXXXXX les renseignements pour accéder à la thèse Cordialement L'équipe scanR`
);
if (value === "documents")
setUserResponse(
`Bonjour scanR ne dispose pas des documents indexées, mais uniquement des métadonnées les décrivant. Cordialement L'équipe scanR`
);
if (value === "maj")
setUserResponse(
`Bonjour, Merci pour ce signalement. Les modifications seront visibles à la prochaine actualisation du site, d'ici quelques semaines. Cordialement L'équipe scanR`
);
if (value === "publications")
setUserResponse(
`Bonjour, merci pour votre contribution. Les publications seront liées dans les prochains jours. Cordialement L'équipe scanR`
);
if (value === "suppression")
setUserResponse(
`Bonjour, votre thèse et votre profil auteur ont bien été retirés. Cordialement L'équipe scanR`
);
};

return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ const ContactAndContributionPage: React.FC<ContributionPageProps> = ({
const [status, setStatus] = useState("choose");
const [query, setQuery] = useState<string[]>([]);
const [page, setPage] = useState(1);
const [searchInMessage, setSearchInMessage] = useState(false);
const [searchInMessage, setSearchInMessage] = useState(true);
const [highlightedQuery, setHighlightedQuery] = useState("");
const [selectedContribution, setSelectedContribution] = useState<string>("");
const location = useLocation();
Expand Down
Loading

0 comments on commit a7fdd22

Please sign in to comment.