From 03a158193dd490a343bfa9962b189370ab2c98b4 Mon Sep 17 00:00:00 2001 From: Mohamed-Hacene Date: Fri, 13 Sep 2024 21:38:04 +0200 Subject: [PATCH] feat: send mail for questionnaire --- backend/core/locale/fr/LC_MESSAGES/django.mo | Bin 20260 -> 20458 bytes backend/core/locale/fr/LC_MESSAGES/django.po | 546 +++++++++--------- .../templates/tprm/third_party_email.html | 58 ++ backend/iam/models.py | 4 +- backend/locale/fr/LC_MESSAGES/django.mo | Bin 379 -> 515 bytes backend/locale/fr/LC_MESSAGES/django.po | 126 ++-- backend/tprm/serializers.py | 16 + 7 files changed, 436 insertions(+), 314 deletions(-) create mode 100644 backend/core/templates/tprm/third_party_email.html diff --git a/backend/core/locale/fr/LC_MESSAGES/django.mo b/backend/core/locale/fr/LC_MESSAGES/django.mo index 0a4364aa99f7cbda567e2e2863b7048aeeee5a0f..c071bbe2811fe6629d7c8fbf0704f87b432bec33 100644 GIT binary patch delta 5137 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\n" "Language-Team: LANGUAGE \n" @@ -38,21 +38,21 @@ msgstr "Mis à jour le" msgid "published" msgstr "publié" -#: core/base_models.py:110 core/models.py:76 +#: core/base_models.py:110 core/models.py:113 #: core/templates/core/action_plan_pdf.html:42 #: core/templates/snippets/mp_data.html:58 #: core/templates/snippets/ri_list_nested.html:16 msgid "Name" msgstr "Nom" -#: core/base_models.py:111 core/models.py:78 +#: core/base_models.py:111 core/models.py:115 #: core/templates/core/action_plan_pdf.html:43 #: core/templates/snippets/mp_data.html:59 #: core/templates/snippets/ra_data.html:43 msgid "Description" msgstr "Description" -#: core/base_models.py:126 core/models.py:1246 +#: core/base_models.py:126 core/models.py:1309 #: core/templates/core/action_plan_pdf.html:46 #: core/templates/snippets/mp_data.html:62 msgid "ETA" @@ -200,130 +200,130 @@ msgstr "Rechercher une preuve..." msgid "Search framework..." msgstr "Rechercher un référentiel..." -#: core/models.py:67 core/models.py:148 +#: core/models.py:104 core/models.py:185 msgid "URN" msgstr "URN" -#: core/models.py:70 +#: core/models.py:107 msgid "Reference ID" msgstr "ID de référence" -#: core/models.py:73 core/models.py:772 +#: core/models.py:110 core/models.py:826 msgid "Provider" msgstr "Fournisseur" -#: core/models.py:79 core/models.py:1033 +#: core/models.py:116 core/models.py:1087 msgid "Annotation" msgstr "Annotation" -#: core/models.py:81 +#: core/models.py:118 msgid "Translations" msgstr "" -#: core/models.py:135 +#: core/models.py:172 msgid "Locale" msgstr "Locale" -#: core/models.py:137 +#: core/models.py:174 msgid "Default locale" msgstr "Locale par défaut" -#: core/models.py:150 +#: core/models.py:187 msgid "Copyright" msgstr "Copyright" -#: core/models.py:152 core/models.py:1375 +#: core/models.py:189 core/models.py:1443 msgid "Version" msgstr "Version" -#: core/models.py:157 +#: core/models.py:194 msgid "Packager of the library" msgstr "Responsable de l'empaquetage de la bibliothèque" -#: core/models.py:158 +#: core/models.py:195 msgid "Packager" msgstr "Empaqueteur" -#: core/models.py:555 +#: core/models.py:609 msgid "Dependencies" msgstr "Dépendances" -#: core/models.py:654 core/templates/snippets/ri_list_nested.html:19 +#: core/models.py:708 core/templates/snippets/ri_list_nested.html:19 msgid "Threat" msgstr "Menace" -#: core/models.py:655 core/models.py:906 core/models.py:1762 +#: core/models.py:709 core/models.py:960 core/models.py:1849 msgid "Threats" msgstr "Menaces" -#: core/models.py:675 core/models.py:1346 +#: core/models.py:729 core/models.py:1414 msgid "Policy" msgstr "Politique" -#: core/models.py:676 +#: core/models.py:730 msgid "Process" msgstr "Processus" -#: core/models.py:677 +#: core/models.py:731 msgid "Technical" msgstr "Technique" -#: core/models.py:678 +#: core/models.py:732 msgid "Physical" msgstr "Physique" -#: core/models.py:682 +#: core/models.py:736 msgid "Govern" msgstr "" -#: core/models.py:683 +#: core/models.py:737 msgid "Identify" msgstr "" -#: core/models.py:684 +#: core/models.py:738 msgid "Protect" msgstr "" -#: core/models.py:685 +#: core/models.py:739 msgid "Detect" msgstr "" -#: core/models.py:686 +#: core/models.py:740 msgid "Respond" msgstr "" -#: core/models.py:687 +#: core/models.py:741 msgid "Recover" msgstr "" -#: core/models.py:703 core/models.py:1226 +#: core/models.py:757 core/models.py:1283 #: core/templates/core/action_plan_pdf.html:44 msgid "Category" msgstr "Catégorie" -#: core/models.py:711 core/models.py:1233 +#: core/models.py:765 core/models.py:1290 #, fuzzy #| msgid "Search function..." msgid "CSF Function" msgstr "Rechercher une fonction..." -#: core/models.py:715 core/models.py:932 +#: core/models.py:769 core/models.py:986 msgid "Typical evidence" msgstr "Preuve type" -#: core/models.py:721 core/templates/snippets/mp_data.html:61 +#: core/models.py:775 core/templates/snippets/mp_data.html:61 msgid "Reference control" msgstr "Mesure de référence" -#: core/models.py:722 core/models.py:912 +#: core/models.py:776 core/models.py:966 msgid "Reference controls" msgstr "Mesures de référence" -#: core/models.py:757 +#: core/models.py:811 msgid "JSON definition" msgstr "Définition JSON" -#: core/models.py:759 +#: core/models.py:813 msgid "" "JSON definition of the risk matrix. See the documentation for more " "information." @@ -331,11 +331,11 @@ msgstr "" "Définition JSON de la matrice de risque. Consultez la documentation pour " "plus d'informations." -#: core/models.py:765 +#: core/models.py:819 msgid "enabled" msgstr "activé" -#: core/models.py:768 +#: core/models.py:822 msgid "" "If the risk matrix is set as disabled, it will not be available for " "selection for new risk assessments." @@ -343,384 +343,405 @@ msgstr "" "Si la matrice de risque est désactivée, elle ne sera pas disponible pour la " "sélection lors de nouvelles évaluations de risque." -#: core/models.py:837 core/models.py:1978 +#: core/models.py:891 core/models.py:2065 msgid "Minimum score" msgstr "Score minimum" -#: core/models.py:838 core/models.py:1979 +#: core/models.py:892 core/models.py:2066 msgid "Maximum score" msgstr "Score maximum" -#: core/models.py:840 core/models.py:1981 +#: core/models.py:894 core/models.py:2068 msgid "Score definition" msgstr "Définition du score" -#: core/models.py:843 +#: core/models.py:897 msgid "Implementation groups definition" msgstr "Définition des groupes d'implémentation" -#: core/models.py:854 core/models.py:920 core/models.py:1972 +#: core/models.py:908 core/models.py:974 core/models.py:2059 #: core/templates/core/action_plan_pdf.html:20 msgid "Framework" msgstr "Référentiel" -#: core/models.py:855 +#: core/models.py:909 msgid "Frameworks" msgstr "Référentiels" -#: core/models.py:924 +#: core/models.py:978 msgid "Parent URN" msgstr "URN parent" -#: core/models.py:926 +#: core/models.py:980 msgid "Order ID" msgstr "ID de commande" -#: core/models.py:928 +#: core/models.py:982 msgid "Implementation groups" msgstr "Groupes d'implémentation" -#: core/models.py:930 +#: core/models.py:984 msgid "Assessable" msgstr "Évaluable" -#: core/models.py:934 +#: core/models.py:988 #, fuzzy #| msgid "Description" msgid "Question" msgstr "Description" -#: core/models.py:937 +#: core/models.py:991 #, fuzzy #| msgid "Requirement" msgid "RequirementNode" msgstr "Exigence" -#: core/models.py:938 +#: core/models.py:992 #, fuzzy #| msgid "Requirement" msgid "RequirementNodes" msgstr "Exigence" -#: core/models.py:953 +#: core/models.py:1007 #, fuzzy #| msgid "Search framework..." msgid "Source framework" msgstr "Rechercher un référentiel..." -#: core/models.py:959 +#: core/models.py:1013 #, fuzzy #| msgid "Search framework..." msgid "Target framework" msgstr "Rechercher un référentiel..." -#: core/models.py:965 +#: core/models.py:1019 msgid "Source and related frameworks must be different" msgstr "" -#: core/models.py:971 +#: core/models.py:1025 msgid "Full" msgstr "" -#: core/models.py:972 +#: core/models.py:1026 msgid "Partial" msgstr "" -#: core/models.py:973 core/models.py:980 +#: core/models.py:1027 core/models.py:1034 #, fuzzy #| msgid "Created" msgid "Not related" msgstr "Créé" -#: core/models.py:976 +#: core/models.py:1030 msgid "Subset" msgstr "" -#: core/models.py:977 +#: core/models.py:1031 msgid "Intersect" msgstr "" -#: core/models.py:978 +#: core/models.py:1032 msgid "Equal" msgstr "" -#: core/models.py:979 +#: core/models.py:1033 msgid "Superset" msgstr "" -#: core/models.py:983 +#: core/models.py:1037 msgid "Syntactic" msgstr "" -#: core/models.py:984 +#: core/models.py:1038 msgid "Semantic" msgstr "" -#: core/models.py:985 +#: core/models.py:1039 #, fuzzy #| msgid "Production" msgid "Functional" msgstr "Production" -#: core/models.py:1000 +#: core/models.py:1054 msgid "Mapping set" msgstr "" -#: core/models.py:1006 +#: core/models.py:1060 msgid "Target requirement" msgstr "Exigence cible" -#: core/models.py:1013 +#: core/models.py:1067 msgid "Relationship" msgstr "" -#: core/models.py:1020 +#: core/models.py:1074 msgid "Rationale" msgstr "Raison" -#: core/models.py:1025 +#: core/models.py:1079 msgid "Source requirement" msgstr "Exigence source" -#: core/models.py:1030 +#: core/models.py:1084 msgid "Strength of relationship" msgstr "" -#: core/models.py:1049 +#: core/models.py:1103 core/models.py:1251 msgid "Undefined" msgstr "Non défini" -#: core/models.py:1050 +#: core/models.py:1104 msgid "Design" msgstr "Conception" -#: core/models.py:1051 +#: core/models.py:1105 msgid "Development" msgstr "Développement" -#: core/models.py:1052 +#: core/models.py:1106 msgid "Production" msgstr "Production" -#: core/models.py:1053 +#: core/models.py:1107 msgid "EndOfLife" msgstr "Fin de vie" -#: core/models.py:1054 +#: core/models.py:1108 msgid "Dropped" msgstr "Abandonné" -#: core/models.py:1057 +#: core/models.py:1111 msgid "Internal reference" msgstr "Référence interne" -#: core/models.py:1063 core/models.py:1240 core/models.py:1382 -#: core/models.py:2384 core/templates/snippets/mp_data.html:65 +#: core/models.py:1117 core/models.py:1297 core/models.py:1450 +#: core/models.py:2497 core/templates/snippets/mp_data.html:66 #: core/templates/snippets/ri_list_nested.html:31 msgid "Status" msgstr "Statut" -#: core/models.py:1068 core/models.py:1368 core/models.py:1842 +#: core/models.py:1122 core/models.py:1436 core/models.py:1929 #: core/templates/core/action_plan_pdf.html:16 #: core/templates/snippets/mp_data.html:7 msgid "Project" msgstr "Projet" -#: core/models.py:1069 +#: core/models.py:1123 msgid "Projects" msgstr "Projets" -#: core/models.py:1102 +#: core/models.py:1156 msgid "Primary" msgstr "Primaire" -#: core/models.py:1103 +#: core/models.py:1157 msgid "Support" msgstr "Support" -#: core/models.py:1106 +#: core/models.py:1160 msgid "business value" msgstr "valeur métier" -#: core/models.py:1109 +#: core/models.py:1163 msgid "type" msgstr "type" -#: core/models.py:1112 +#: core/models.py:1166 msgid "parent assets" msgstr "actifs parents" -#: core/models.py:1118 core/models.py:1749 +#: core/models.py:1172 core/models.py:1836 msgid "Assets" msgstr "Actifs" -#: core/models.py:1119 +#: core/models.py:1173 msgid "Asset" msgstr "Actif" -#: core/models.py:1149 +#: core/models.py:1203 msgid "Attachment for evidence (eg. screenshot, log file, etc.)" msgstr "" "Pièce jointe pour la preuve (par ex. capture d'écran, fichier journal, etc.)" -#: core/models.py:1150 +#: core/models.py:1204 msgid "Attachment" msgstr "Pièce jointe" -#: core/models.py:1156 +#: core/models.py:1210 msgid "Link to the evidence (eg. Jira ticket, etc.)" msgstr "Lien vers la preuve (par ex. billet Jira, etc.)" -#: core/models.py:1157 core/models.py:1259 -#: core/templates/snippets/mp_data.html:64 +#: core/models.py:1211 core/models.py:1322 +#: core/templates/snippets/mp_data.html:65 msgid "Link" msgstr "Lien" -#: core/models.py:1163 +#: core/models.py:1217 msgid "Evidence" msgstr "Preuve" -#: core/models.py:1164 core/models.py:1218 core/models.py:2404 +#: core/models.py:1218 core/models.py:1275 core/models.py:2517 msgid "Evidences" msgstr "Preuves" -#: core/models.py:1192 core/models.py:1361 -msgid "Planned" -msgstr "Planifié" +#: core/models.py:1246 core/models.py:2481 +msgid "To do" +msgstr "À faire" + +#: core/models.py:1247 core/models.py:1430 core/models.py:2482 +msgid "In progress" +msgstr "En cours" + +#: core/models.py:1248 +msgid "On hold" +msgstr "" -#: core/models.py:1193 +#: core/models.py:1249 msgid "Active" msgstr "Actif" -#: core/models.py:1194 -msgid "Inactive" -msgstr "Inactif" +#: core/models.py:1250 core/models.py:1433 +msgid "Deprecated" +msgstr "Déprécié" -#: core/models.py:1200 +#: core/models.py:1257 msgid "Small" msgstr "Petit" -#: core/models.py:1201 core/models.py:1726 core/tests/test_helpers.py:77 +#: core/models.py:1258 core/models.py:1813 core/tests/test_helpers.py:77 #: core/tests/test_helpers.py:142 msgid "Medium" msgstr "Moyen" -#: core/models.py:1202 +#: core/models.py:1259 msgid "Large" msgstr "Grand" -#: core/models.py:1203 +#: core/models.py:1260 msgid "Extra Large" msgstr "Extra large" -#: core/models.py:1213 +#: core/models.py:1270 msgid "Reference Control" msgstr "Mesure de référence" -#: core/models.py:1245 +#: core/models.py:1302 core/models.py:1865 +msgid "Owner" +msgstr "Propriétaire" + +#: core/models.py:1308 msgid "Estimated Time of Arrival" msgstr "Heure d'arrivée estimée" -#: core/models.py:1251 +#: core/models.py:1314 msgid "Date after which the applied control is no longer valid" msgstr "Date à partir de laquelle la mesure appliquée n'est plus valide" -#: core/models.py:1252 core/models.py:2519 +#: core/models.py:1315 core/models.py:2625 #: core/templates/core/action_plan_pdf.html:47 msgid "Expiry date" msgstr "Date d'expiration" -#: core/models.py:1258 +#: core/models.py:1321 msgid "External url for action follow-up (eg. Jira ticket)" msgstr "URL externe pour le suivi de l'action (par ex. billet Jira)" -#: core/models.py:1266 +#: core/models.py:1329 msgid "Relative effort of the measure (using T-Shirt sizing)" msgstr "Effort relatif de la mesure (en utilisant la taille des T-shirts)" -#: core/models.py:1267 core/templates/core/action_plan_pdf.html:48 +#: core/models.py:1330 core/templates/core/action_plan_pdf.html:48 #: core/templates/snippets/mp_data.html:63 msgid "Effort" msgstr "Effort" -#: core/models.py:1273 +#: core/models.py:1334 +msgid "Cost of the measure (using globally-chosen currency)" +msgstr "" + +#: core/models.py:1335 core/templates/core/action_plan_pdf.html:49 +#: core/templates/snippets/mp_data.html:64 +msgid "Cost" +msgstr "" + +#: core/models.py:1341 msgid "Applied control" msgstr "Mesure appliqué" -#: core/models.py:1274 core/models.py:1756 core/models.py:2420 +#: core/models.py:1342 core/models.py:1843 core/models.py:2533 msgid "Applied controls" msgstr "Mesures appliquées" -#: core/models.py:1347 +#: core/models.py:1415 msgid "Policies" msgstr "Politiques" -#: core/models.py:1362 core/models.py:2363 -msgid "In progress" -msgstr "En cours" +#: core/models.py:1429 +msgid "Planned" +msgstr "Planifié" -#: core/models.py:1363 core/models.py:2364 +#: core/models.py:1431 core/models.py:2483 msgid "In review" msgstr "En examen" -#: core/models.py:1364 core/models.py:2365 +#: core/models.py:1432 core/models.py:2484 msgid "Done" msgstr "Terminé" -#: core/models.py:1365 -msgid "Deprecated" -msgstr "Déprécié" - -#: core/models.py:1374 +#: core/models.py:1442 msgid "Version of the compliance assessment (eg. 1.0, 2.0, etc.)" msgstr "Version de l'évaluation de conformité (par ex. 1.0, 2.0, etc.)" -#: core/models.py:1389 +#: core/models.py:1457 msgid "Authors" msgstr "Auteurs" -#: core/models.py:1395 core/templates/core/audit_report.html:35 +#: core/models.py:1463 core/templates/core/audit_report.html:35 msgid "Reviewers" msgstr "Relecteurs" -#: core/models.py:1409 +#: core/models.py:1466 core/models.py:2520 +msgid "Observation" +msgstr "Observation" + +#: core/models.py:1483 msgid "WARNING! After choosing it, you will not be able to change it" msgstr "" "ATTENTION ! Une fois que vous l'aurez choisi, vous ne pourrez plus le " "modifier." -#: core/models.py:1410 +#: core/models.py:1484 msgid "Risk matrix" msgstr "Matrice de risque" -#: core/models.py:1414 core/templates/snippets/mp_data.html:9 +#: core/models.py:1488 core/templates/snippets/mp_data.html:9 #: core/templates/snippets/ra_data.html:8 msgid "Risk assessment" msgstr "Évaluation de risque" -#: core/models.py:1415 +#: core/models.py:1489 msgid "Risk assessments" msgstr "Évaluations de risque" -#: core/models.py:1439 +#: core/models.py:1513 msgid "{}: Risk assessment is still in progress" msgstr "{} : L'évaluation des risques est toujours en cours" -#: core/models.py:1450 +#: core/models.py:1524 msgid "{}: No author assigned to this risk assessment" msgstr "{} : Aucun auteur n'a été affecté à cette évaluation des risques" -#: core/models.py:1462 +#: core/models.py:1536 msgid "{}: RiskAssessment is empty. No risk scenario declared yet" msgstr "" "{} : L'évaluation des risques est vide. Aucun scénario de risque n'a encore " "été déclaré." -#: core/models.py:1483 +#: core/models.py:1557 msgid "{} current risk level has not been assessed" msgstr "{} : Le niveau de risque actuel n'a pas été évalué" -#: core/models.py:1496 +#: core/models.py:1570 msgid "" "{} residual risk level has not been assessed. If no additional measures are " "applied, it should be at the same level as the current risk" @@ -729,43 +750,52 @@ msgstr "" "mesures supplémentaires appliquées, il devrait être au même niveau que le " "risque actuel." -#: core/models.py:1507 +#: core/models.py:1581 msgid "{} residual risk level is higher than the current one" msgstr "{} : Le niveau de risque résiduel est supérieur à l'actuel" -#: core/models.py:1519 +#: core/models.py:1593 msgid "{} residual risk probability is higher than the current one" msgstr "{} : La probabilité de risque résiduel est supérieure à l'actuelle" -#: core/models.py:1531 +#: core/models.py:1605 msgid "{} residual risk impact is higher than the current one" msgstr "{} : L'impact du risque résiduel est supérieur à l'actuel" -#: core/models.py:1552 +#: core/models.py:1626 msgid "{}: residual risk level has been lowered without any specific measure" msgstr "" "{} : Le niveau de risque résiduel a été réduit sans aucune mesure spécifique" -#: core/models.py:1566 +#: core/models.py:1640 msgid "{} risk accepted but no risk acceptance attached" msgstr "{} : Risque accepté mais aucune acceptation de risque jointe" -#: core/models.py:1589 +#: core/models.py:1663 msgid "{} does not have an ETA" msgstr "{} : Pas d'ETA" -#: core/models.py:1601 +#: core/models.py:1675 msgid "{} ETA is in the past now. Consider updating its status or the date" msgstr "" "{} : L'ETA est dans le passé maintenant. Envisagez de mettre à jour son " "statut ou la date." -#: core/models.py:1614 +#: core/models.py:1688 msgid "" "{} does not have an estimated effort. This will help you for prioritization" msgstr "{} : Pas d'effort estimé. Cela vous aidera pour la prioritisation" -#: core/models.py:1627 +#: core/models.py:1701 +#, fuzzy +#| msgid "" +#| "{} does not have an estimated effort. This will help you for " +#| "prioritization" +msgid "" +"{} does not have an estimated cost. This will help you for prioritization" +msgstr "{} : Pas d'effort estimé. Cela vous aidera pour la prioritisation" + +#: core/models.py:1714 msgid "" "{}: Applied control does not have an external link attached. This will help " "you for follow-up" @@ -773,112 +803,112 @@ msgstr "" "{} : La mesure appliquée ne comporte pas de lien externe joint. Cela vous " "aidera pour le suivi" -#: core/models.py:1650 +#: core/models.py:1737 msgid "{}: Acceptance has no expiry date" msgstr "{} : L'acceptation n'a pas de date d'expiration" -#: core/models.py:1664 +#: core/models.py:1751 msgid "{}: Acceptance has expired. Consider updating the status or the date" msgstr "" "{} : L'acceptation a expiré. Envisagez de mettre à jour le statut ou la date." -#: core/models.py:1693 +#: core/models.py:1780 msgid "Open" msgstr "Ouvert" -#: core/models.py:1694 +#: core/models.py:1781 msgid "Mitigate" msgstr "Atténuer" -#: core/models.py:1695 +#: core/models.py:1782 msgid "Accept" msgstr "Accepter" -#: core/models.py:1696 +#: core/models.py:1783 msgid "Avoid" msgstr "Éviter" -#: core/models.py:1697 +#: core/models.py:1784 msgid "Transfer" msgstr "Transférer" -#: core/models.py:1701 +#: core/models.py:1788 msgid "Financial" msgstr "" -#: core/models.py:1702 +#: core/models.py:1789 msgid "Legal" msgstr "" -#: core/models.py:1703 +#: core/models.py:1790 #, fuzzy #| msgid "Rationale" msgid "Reputation" msgstr "Raison" -#: core/models.py:1704 +#: core/models.py:1791 #, fuzzy #| msgid "Observation" msgid "Operational" msgstr "Observation" -#: core/models.py:1705 +#: core/models.py:1792 msgid "Confidentiality" msgstr "" -#: core/models.py:1706 +#: core/models.py:1793 msgid "Integrity" msgstr "" -#: core/models.py:1707 +#: core/models.py:1794 #, fuzzy #| msgid "Probability" msgid "Availability" msgstr "Probabilité" -#: core/models.py:1708 +#: core/models.py:1795 msgid "Authenticity" msgstr "" -#: core/models.py:1713 +#: core/models.py:1800 msgid "--" msgstr "--" -#: core/models.py:1715 +#: core/models.py:1802 msgid "The strength of the knowledge supporting the assessment is undefined" msgstr "La force de la connaissance soutenant l'évaluation est indéfinie" -#: core/models.py:1719 core/tests/test_helpers.py:76 +#: core/models.py:1806 core/tests/test_helpers.py:76 #: core/tests/test_helpers.py:141 msgid "Low" msgstr "Faible" -#: core/models.py:1721 +#: core/models.py:1808 msgid "The strength of the knowledge supporting the assessment is low" msgstr "La force de la connaissance soutenant l'évaluation est faible" -#: core/models.py:1728 +#: core/models.py:1815 msgid "The strength of the knowledge supporting the assessment is medium" msgstr "La force de la connaissance soutenant l'évaluation est moyenne" -#: core/models.py:1733 core/tests/test_helpers.py:78 +#: core/models.py:1820 core/tests/test_helpers.py:78 #: core/tests/test_helpers.py:143 msgid "High" msgstr "Élevé" -#: core/models.py:1735 +#: core/models.py:1822 msgid "The strength of the knowledge supporting the assessment is high" msgstr "La force de la connaissance soutenant l'évaluation est élevée" -#: core/models.py:1744 +#: core/models.py:1831 msgid "RiskAssessment" msgstr "ÉvaluationDesRisques" -#: core/models.py:1751 +#: core/models.py:1838 msgid "Assets impacted by the risk scenario" msgstr "Actifs impactés par le scénario de risque" -#: core/models.py:1769 +#: core/models.py:1856 msgid "" "The existing controls to manage this risk. Edit the risk scenario to add " "extra applied controls." @@ -886,28 +916,24 @@ msgstr "" "Les mesures existantes pour gérer ce risque. Modifiez le scénario de risque " "pour ajouter des mesures appliquées supplémentaires." -#: core/models.py:1771 core/templates/snippets/mp_data.html:48 +#: core/models.py:1858 core/templates/snippets/mp_data.html:48 #: core/templates/snippets/ri_list_nested.html:22 msgid "Existing controls" msgstr "Mesures existantes" -#: core/models.py:1778 -msgid "Owner" -msgstr "Propriétaire" - -#: core/models.py:1783 +#: core/models.py:1870 msgid "Current probability" msgstr "Probabilité actuelle" -#: core/models.py:1786 +#: core/models.py:1873 msgid "Current impact" msgstr "Impact actuel" -#: core/models.py:1790 +#: core/models.py:1877 msgid "Current level" msgstr "Niveau actuel" -#: core/models.py:1792 +#: core/models.py:1879 msgid "" "The risk level given the current measures. Automatically updated on Save, " "based on the chosen risk matrix" @@ -916,19 +942,19 @@ msgstr "" "automatiquement lors de l'enregistrement, sur la base de la matrice de " "risque choisie." -#: core/models.py:1798 +#: core/models.py:1885 msgid "Residual probability" msgstr "Probabilité résiduelle" -#: core/models.py:1801 +#: core/models.py:1888 msgid "Residual impact" msgstr "Impact résiduel" -#: core/models.py:1805 +#: core/models.py:1892 msgid "Residual level" msgstr "Niveau résiduel" -#: core/models.py:1807 +#: core/models.py:1894 msgid "" "The risk level when all the extra measures are done. Automatically updated " "on Save, based on the chosen risk matrix" @@ -937,61 +963,61 @@ msgstr "" "œuvre. Mis à jour automatiquement lors de l'enregistrement, sur la base de " "la matrice de risque choisie." -#: core/models.py:1815 +#: core/models.py:1902 msgid "Treatment status" msgstr "Statut de traitement" -#: core/models.py:1818 +#: core/models.py:1905 #, fuzzy #| msgid "Justification" msgid "Qualifications" msgstr "Justification" -#: core/models.py:1822 +#: core/models.py:1909 msgid "Strength of Knowledge" msgstr "Force de la connaissance" -#: core/models.py:1823 +#: core/models.py:1910 msgid "The strength of the knowledge supporting the assessment" msgstr "La force de la connaissance soutenant l'évaluation" -#: core/models.py:1826 core/models.py:2531 +#: core/models.py:1913 core/models.py:2637 msgid "Justification" msgstr "Justification" -#: core/models.py:1832 +#: core/models.py:1919 msgid "Risk scenario" msgstr "Scénario de risque" -#: core/models.py:1833 core/models.py:2496 +#: core/models.py:1920 core/models.py:2602 msgid "Risk scenarios" msgstr "Scénarios de risque" -#: core/models.py:1943 +#: core/models.py:2030 msgid ": " msgstr ": " -#: core/models.py:1975 core/templates/core/audit_report.html:43 +#: core/models.py:2062 core/templates/core/audit_report.html:43 msgid "Selected implementation groups" msgstr "Groupes d'implémentation sélectionnés" -#: core/models.py:1985 core/models.py:2411 +#: core/models.py:2072 core/models.py:2524 msgid "Compliance assessment" msgstr "Évaluation de conformité" -#: core/models.py:1986 +#: core/models.py:2073 msgid "Compliance assessments" msgstr "Évaluations de conformité" -#: core/models.py:2191 +#: core/models.py:2310 msgid "{}: Compliance assessment is still in progress" msgstr "{} : L'évaluation de la conformité est toujours en cours" -#: core/models.py:2204 +#: core/models.py:2323 msgid "{}: No author assigned to this compliance assessment" msgstr "{} : Aucun auteur n'a été affecté à cette évaluation de conformité" -#: core/models.py:2231 +#: core/models.py:2350 #, fuzzy #| msgid "" #| "{}: Requirement assessment status is compliant or partially compliant " @@ -1003,128 +1029,94 @@ msgstr "" "{} : Le statut de l'évaluation de l'exigence est conforme ou partiellement " "conforme, sans aucun mesure appliquée" -#: core/models.py:2256 +#: core/models.py:2375 msgid "{}: Applied control has no reference control selected" msgstr "" "{} : La mesure appliquée ne comporte pas de mesure de référence sélectionné" -#: core/models.py:2282 +#: core/models.py:2401 msgid "{}: Evidence has no file uploaded" msgstr "{} : La preuve ne comporte pas de fichier téléchargé" -#: core/models.py:2362 -msgid "To do" -msgstr "À faire" - -#: core/models.py:2368 +#: core/models.py:2487 msgid "Not assessed" msgstr "Non évalué" -#: core/models.py:2369 +#: core/models.py:2488 msgid "Partially compliant" msgstr "Partiellement conforme" -#: core/models.py:2370 +#: core/models.py:2489 #, fuzzy #| msgid "Non compliant" msgid "Non-compliant" msgstr "Non conforme" -#: core/models.py:2371 +#: core/models.py:2490 msgid "Compliant" msgstr "Conforme" -#: core/models.py:2372 +#: core/models.py:2491 msgid "Not applicable" msgstr "Non applicable" -#: core/models.py:2375 -msgid "N/A" -msgstr "" - -#: core/models.py:2376 -msgid "OK" -msgstr "" - -#: core/models.py:2377 -msgid "Warning" -msgstr "" - -#: core/models.py:2378 -msgid "Blocker" -msgstr "" - -#: core/models.py:2389 +#: core/models.py:2502 msgid "Result" msgstr "Résultat" -#: core/models.py:2395 +#: core/models.py:2508 msgid "Score" msgstr "Score" -#: core/models.py:2399 +#: core/models.py:2512 msgid "Is scored" msgstr "Est noté" -#: core/models.py:2407 -msgid "Observation" -msgstr "Observation" - -#: core/models.py:2415 +#: core/models.py:2528 msgid "Requirement" msgstr "Exigence" -#: core/models.py:2425 +#: core/models.py:2538 msgid "Selected" msgstr "Sélectionné" -#: core/models.py:2429 +#: core/models.py:2542 msgid "Mapping inference" msgstr "Inference de mapping" -#: core/models.py:2434 +#: core/models.py:2547 msgid "Answer" msgstr "" -#: core/models.py:2438 -msgid "Review conclusion" -msgstr "" - -#: core/models.py:2442 -#, fuzzy -#| msgid "Observation" -msgid "Review Observation" -msgstr "Observation" - -#: core/models.py:2478 +#: core/models.py:2584 msgid "Requirement assessment" msgstr "Évaluation de l'exigence" -#: core/models.py:2479 +#: core/models.py:2585 msgid "Requirement assessments" msgstr "Évaluations de l'exigence" -#: core/models.py:2487 +#: core/models.py:2593 msgid "Created" msgstr "Créé" -#: core/models.py:2488 +#: core/models.py:2594 msgid "Submitted" msgstr "Soumis" -#: core/models.py:2489 +#: core/models.py:2595 msgid "Accepted" msgstr "Accepté" -#: core/models.py:2490 +#: core/models.py:2596 msgid "Rejected" msgstr "Rejeté" -#: core/models.py:2491 +#: core/models.py:2597 msgid "Revoked" msgstr "Révoqué" -#: core/models.py:2498 +#: core/models.py:2604 msgid "" "Select the risk scenarios to be accepted, attention they must be part of the " "chosen domain" @@ -1132,39 +1124,39 @@ msgstr "" "Sélectionnez les scénarios de risque à accepter, faites attention, ils " "doivent faire partie du domaine choisi" -#: core/models.py:2504 +#: core/models.py:2610 msgid "Risk owner and approver identity" msgstr "Identité du propriétaire du risque et de l'approbateur" -#: core/models.py:2505 core/utils.py:50 core/utils.py:57 core/utils.py:60 +#: core/models.py:2611 core/utils.py:50 core/utils.py:57 core/utils.py:60 msgid "Approver" msgstr "Approbateur" -#: core/models.py:2514 +#: core/models.py:2620 msgid "State" msgstr "État" -#: core/models.py:2517 +#: core/models.py:2623 msgid "Specify when the risk acceptance will no longer apply" msgstr "Précisez quand l'acceptation du risque ne sera plus valable" -#: core/models.py:2522 +#: core/models.py:2628 msgid "Acceptance date" msgstr "Date d'acceptation" -#: core/models.py:2525 +#: core/models.py:2631 msgid "Rejection date" msgstr "Date de rejet" -#: core/models.py:2528 +#: core/models.py:2634 msgid "Revocation date" msgstr "Date de révocation" -#: core/models.py:2540 +#: core/models.py:2646 msgid "Risk acceptance" msgstr "Acceptation du risque" -#: core/models.py:2541 +#: core/models.py:2647 msgid "Risk acceptances" msgstr "Acceptations du risque" @@ -1192,11 +1184,11 @@ msgstr "Pas de statut" msgid "CSF function" msgstr "fonction CSF" -#: core/templates/core/action_plan_pdf.html:49 +#: core/templates/core/action_plan_pdf.html:50 msgid "Matching requirements" msgstr "Exigences correspondantes" -#: core/templates/core/action_plan_pdf.html:67 +#: core/templates/core/action_plan_pdf.html:69 msgid "No entries found" msgstr "Aucun résultat trouvé" @@ -1218,6 +1210,7 @@ msgstr "Bienvenue sur CISO Assistant !" #: core/templates/registration/first_connexion_email.html:15 #: core/templates/registration/password_reset_email.html:23 +#: core/templates/tprm/third_party_email.html:23 msgid "Your all-in-one GRC Management Platform" msgstr "Votre plateforme de gestion GRC tout-en-un" @@ -1235,6 +1228,7 @@ msgstr "Définir mon mot de passe" #: core/templates/registration/first_connexion_email.html:41 #: core/templates/registration/password_reset_email.html:43 +#: core/templates/tprm/third_party_email.html:43 msgid "An issue with the link? copy and paste the following in your browser" msgstr "" "Un problème avec le lien ? Copiez et collez le suivant dans votre navigateur" @@ -1272,17 +1266,20 @@ msgstr "En savoir plus sur CISO Assistant" #: core/templates/registration/first_connexion_email.html:63 #: core/templates/registration/password_reset_email.html:58 +#: core/templates/tprm/third_party_email.html:49 msgid "Sincerely" -msgstr "Cordialement," +msgstr "Cordialement" #: core/templates/registration/first_connexion_email.html:64 #: core/templates/registration/password_reset_email.html:59 +#: core/templates/tprm/third_party_email.html:50 msgid "CISO Assistant Team" msgstr "Équipe CISO Assistant" #: core/templates/registration/password_reset_email.html:32 +#: core/templates/tprm/third_party_email.html:32 msgid "Hello" -msgstr "Bonjour," +msgstr "Bonjour" #: core/templates/registration/password_reset_email.html:36 msgid "" @@ -1429,6 +1426,15 @@ msgstr "Impact" msgid "Probability" msgstr "Probabilité" +#: core/templates/tprm/third_party_email.html:36 +msgid "You have been assigned to a questionnaire. Click below to proceed:" +msgstr "" +"Vous avez été assigné à un questionnaire. Cliquez ci-dessous pour continuer :" + +#: core/templates/tprm/third_party_email.html:40 +msgid "Go to the Questionnaire" +msgstr "Aller vers le questionnaire" + #: core/tests/test_helpers.py:75 core/tests/test_helpers.py:140 msgid "Very Low" msgstr "Très faible" @@ -1461,6 +1467,14 @@ msgstr "Français" msgid "English" msgstr "Anglais" +#~ msgid "Inactive" +#~ msgstr "Inactif" + +#, fuzzy +#~| msgid "Observation" +#~ msgid "Review Observation" +#~ msgstr "Observation" + #, fuzzy #~| msgid "estimated time of arrival" #~ msgid "Estimated time of arrival" diff --git a/backend/core/templates/tprm/third_party_email.html b/backend/core/templates/tprm/third_party_email.html new file mode 100644 index 000000000..692c18915 --- /dev/null +++ b/backend/core/templates/tprm/third_party_email.html @@ -0,0 +1,58 @@ +{% load i18n static%} + + + + + + + + + + + + + + + + +
+
+ +
+

CISO Assistant

+

{% trans "Your all-in-one GRC Management Platform" %}

+
+ + CISO Assistant logo + +

+ + {% autoescape off %} +

+ {% trans "Hello" %}, +

+ +

+ {% trans "You have been assigned to a questionnaire. Click below to proceed:" %} +

+ +

+ {% trans "Go to the Questionnaire" %} +

+ +

{% trans "An issue with the link? copy and paste the following in your browser" %}:

+ +

+ {{ root_url }}/{{ object }}/{{ object_id }} +

+ + {% trans "Sincerely" %},
+ {% trans "CISO Assistant Team" %} + + {% endautoescape %} +
+ + + + + diff --git a/backend/iam/models.py b/backend/iam/models.py index 017370abb..392a8c7f4 100644 --- a/backend/iam/models.py +++ b/backend/iam/models.py @@ -397,7 +397,7 @@ def get_short_name(self) -> str: """get user's short name (i.e. first_name or email before @))""" return self.first_name if self.first_name else self.email.split("@")[0] - def mailing(self, email_template_name, subject, pk=False): + def mailing(self, email_template_name, subject, object='', object_id='', pk=False): """ Sending a mail to a user for password resetting or creation """ @@ -409,6 +409,8 @@ def mailing(self, email_template_name, subject, pk=False): "token": default_token_generator.make_token(self), "protocol": "https", "pk": str(pk) if pk else None, + "object": object, + "object_id": object_id, } email = render_to_string(email_template_name, header) try: diff --git a/backend/locale/fr/LC_MESSAGES/django.mo b/backend/locale/fr/LC_MESSAGES/django.mo index 2c90dd0c81aca562856271a6885816b565885734..4e9ee24d9dd0b542c04ff7d72b6fcfcbbea5117b 100644 GIT binary patch delta 203 zcmey()XY+UPl#nI0}wC)u?!IF05K~N+W;{L1OTxG5C;OWBO?Pt7mzjs;xj-t5P<`ORc;Pl#nI0}wC*u?!Ha05LNV>i{tbSOBpjP|^}egVeyl#!hEO0Ptl6=l}o! diff --git a/backend/locale/fr/LC_MESSAGES/django.po b/backend/locale/fr/LC_MESSAGES/django.po index 8625f40b8..0f8fd93e6 100644 --- a/backend/locale/fr/LC_MESSAGES/django.po +++ b/backend/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-28 13:00+0000\n" +"POT-Creation-Date: 2024-09-13 19:22+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,137 +18,141 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: iam/models.py:67 +#: iam/models.py:75 msgid "GLOBAL" msgstr "" -#: iam/models.py:68 +#: iam/models.py:76 msgid "DOMAIN" msgstr "" #: iam/models.py:77 +msgid "ENCLAVE" +msgstr "" + +#: iam/models.py:86 msgid "parent folder" msgstr "" -#: iam/models.py:87 +#: iam/models.py:96 msgid "Folder" msgstr "" -#: iam/models.py:88 +#: iam/models.py:97 msgid "Folders" msgstr "" -#: iam/models.py:212 +#: iam/models.py:221 msgid "user group" msgstr "" -#: iam/models.py:213 iam/models.py:340 +#: iam/models.py:222 iam/models.py:350 msgid "user groups" msgstr "" -#: iam/models.py:270 +#: iam/models.py:279 msgid "Welcome to Ciso Assistant!" msgstr "" -#: iam/models.py:317 +#: iam/models.py:326 msgid "last name" msgstr "" -#: iam/models.py:318 +#: iam/models.py:327 msgid "first name" msgstr "" -#: iam/models.py:323 +#: iam/models.py:333 msgid "active" msgstr "" -#: iam/models.py:326 +#: iam/models.py:336 msgid "" "Designates whether this user should be treated as active. Unselect this " "instead of deleting accounts." msgstr "" -#: iam/models.py:330 +#: iam/models.py:340 msgid "date joined" msgstr "" -#: iam/models.py:332 +#: iam/models.py:342 msgid "superuser status" msgstr "" -#: iam/models.py:335 +#: iam/models.py:345 msgid "" "Designates that this user has all permissions without explicitly assigning " "them." msgstr "" -#: iam/models.py:343 +#: iam/models.py:353 msgid "" "The user groups this user belongs to. A user will get all permissions " "granted to each of their user groups." msgstr "" -#: iam/models.py:358 +#: iam/models.py:368 msgid "user" msgstr "" -#: iam/models.py:359 +#: iam/models.py:369 msgid "users" msgstr "" -#: iam/models.py:502 +#: iam/models.py:511 msgid "permissions" msgstr "" -#: iam/models.py:517 +#: iam/models.py:526 msgid "Domain" msgstr "" -#: iam/models.py:523 +#: iam/models.py:532 msgid "Role" msgstr "" -#: iam/models.py:524 +#: iam/models.py:533 msgid "sub folders are visible" msgstr "" -#: iam/sso/models.py:61 +#: iam/sso/models.py:73 msgid "is enabled" msgstr "" -#: iam/sso/models.py:66 +#: iam/sso/models.py:78 msgid "provider" msgstr "" -#: iam/sso/models.py:70 +#: iam/sso/models.py:82 msgid "provider ID" msgstr "" -#: iam/sso/models.py:74 +#: iam/sso/models.py:86 msgid "name" msgstr "" -#: iam/sso/models.py:76 +#: iam/sso/models.py:88 msgid "client id" msgstr "" -#: iam/sso/models.py:78 +#: iam/sso/models.py:90 msgid "App ID, or consumer key" msgstr "" -#: iam/sso/models.py:82 +#: iam/sso/models.py:94 msgid "secret key" msgstr "" -#: iam/sso/models.py:85 +#: iam/sso/models.py:97 msgid "API secret, client secret, or consumer secret" msgstr "" -#: iam/sso/models.py:88 +#: iam/sso/models.py:100 msgid "key" msgstr "" -#: iam/sso/models.py:88 +#: iam/sso/models.py:100 msgid "Key" msgstr "" @@ -156,58 +160,86 @@ msgstr "" msgid "CISO Assistant: Password Reset" msgstr "" -#: tprm/models.py:19 +#: tprm/models.py:20 msgid "Owned folders" msgstr "" -#: tprm/models.py:26 tprm/models.py:62 +#: tprm/models.py:27 tprm/models.py:82 msgid "Entity" msgstr "" -#: tprm/models.py:27 +#: tprm/models.py:28 msgid "Entities" msgstr "" -#: tprm/models.py:31 tprm/models.py:94 +#: tprm/models.py:33 +msgid "Blocker" +msgstr "" + +#: tprm/models.py:34 +msgid "Warning" +msgstr "" + +#: tprm/models.py:35 +msgid "Ok" +msgstr "" + +#: tprm/models.py:36 +msgid "Not applicable" +msgstr "" + +#: tprm/models.py:38 tprm/models.py:115 msgid "Criticality" msgstr "" -#: tprm/models.py:32 +#: tprm/models.py:39 msgid "Penetration" msgstr "" -#: tprm/models.py:33 +#: tprm/models.py:40 msgid "Dependency" msgstr "" -#: tprm/models.py:34 +#: tprm/models.py:41 msgid "Maturity" msgstr "" -#: tprm/models.py:35 +#: tprm/models.py:42 msgid "Trust" msgstr "" -#: tprm/models.py:48 +#: tprm/models.py:51 tprm/models.py:121 +msgid "Solutions" +msgstr "" + +#: tprm/models.py:62 +msgid "Conclusion" +msgstr "" + +#: tprm/models.py:68 msgid "Entity assessment" msgstr "" -#: tprm/models.py:49 +#: tprm/models.py:69 msgid "Entity assessments" msgstr "" -#: tprm/models.py:83 +#: tprm/models.py:104 msgid "Provider entity" msgstr "" -#: tprm/models.py:89 +#: tprm/models.py:110 msgid "Recipient entity" msgstr "" -#: tprm/models.py:99 +#: tprm/models.py:120 msgid "Solution" msgstr "" -#: tprm/models.py:100 -msgid "Solutions" +#: tprm/serializers.py:61 tprm/serializers.py:96 +msgid "Framework required" msgstr "" + +#: tprm/serializers.py:116 +msgid "CISO Assistant: A questionnaire has been assigned to you" +msgstr "CISO Assistant: Un questionnaire vous a été assigné" diff --git a/backend/tprm/serializers.py b/backend/tprm/serializers.py index 0fef4248e..6e46b06b5 100644 --- a/backend/tprm/serializers.py +++ b/backend/tprm/serializers.py @@ -48,6 +48,14 @@ class EntityAssessmentWriteSerializer(BaseModelSerializer): ) def update(self, instance, validated_data): + for author in validated_data.get('authors', []): + if author not in instance.authors.all(): + author.mailing( + email_template_name="tprm/third_party_email.html", + subject=_("CISO Assistant: A questionnaire has been assigned to you"), + object='entity-assessments', + object_id=instance.id, + ) _audit = instance.compliance_assessment if not _audit: create_audit = validated_data.pop("create_audit") @@ -109,6 +117,14 @@ def create(self, validated_data): audit.create_requirement_assessments() instance.compliance_assessment = audit instance.save() + if instance.authors: + for author in instance.authors.all(): + author.mailing( + email_template_name="tprm/third_party_email.html", + subject=_("CISO Assistant: A questionnaire has been assigned to you"), + object='entity-assessments', + object_id=instance.id, + ) return instance class Meta: