From 453bef006ca694c460173d07a9088df775f5e69b Mon Sep 17 00:00:00 2001 From: louispaulb Date: Thu, 2 Jul 2026 08:56:35 -0400 Subject: [PATCH] =?UTF-8?q?fix(ops):=20s=C3=A9curit=C3=A9=20+=20robustesse?= =?UTF-8?q?=20dispatch/comms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Sécurité : sanitize DOMPurify sur tout HTML entrant courriel/osTicket (v-html) → ferme le vecteur XSS (ConversationPanel + IssueDetail). Nouveau src/utils/sanitize.js, dompurify ajouté en dépendance directe. - Fix : piège TDZ (watches de la carte des tournées placés avant les const suggestDlg/ suggestMapDay/suggestGroups) qui cassait le montage de PlanificationPage → déplacés après les définitions. - Finition : étiquette de fenêtre du dispatch auto « Aujourd'hui + Demain » (au lieu de l'ISO). Co-Authored-By: Claude Opus 4.8 (1M context) --- apps/ops/package.json | 3 ++- apps/ops/src/components/shared/ConversationPanel.vue | 7 ++++--- .../components/shared/detail-sections/IssueDetail.vue | 7 ++++--- apps/ops/src/pages/PlanificationPage.vue | 7 ++++--- apps/ops/src/utils/sanitize.js | 10 ++++++++++ 5 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 apps/ops/src/utils/sanitize.js diff --git a/apps/ops/package.json b/apps/ops/package.json index 730469c..7c2b6f3 100644 --- a/apps/ops/package.json +++ b/apps/ops/package.json @@ -31,7 +31,8 @@ "vue-chartjs": "^5.3.3", "vue-email-editor": "^2.2.0", "vue-router": "^4.3.0", - "vuedraggable": "^4.1.0" + "vuedraggable": "^4.1.0", + "dompurify": "^3.4.11" }, "devDependencies": { "@quasar/app-vite": "^1.10.0", diff --git a/apps/ops/src/components/shared/ConversationPanel.vue b/apps/ops/src/components/shared/ConversationPanel.vue index 0e3e4b7..51a805f 100644 --- a/apps/ops/src/components/shared/ConversationPanel.vue +++ b/apps/ops/src/components/shared/ConversationPanel.vue @@ -352,7 +352,7 @@
{{ summaryErr }}
Résumé IARégénérer
-
+
@@ -421,7 +421,7 @@
Contenu transféré
-
+
@@ -566,7 +566,7 @@ Masquer cet aperçu
-
+
@@ -1020,6 +1020,7 @@ import { ref, computed, watch, nextTick, onMounted, onUnmounted, defineAsyncComp const EmailEditor = defineAsyncComponent(() => import('vue-email-editor').then(m => m.EmailEditor)) import { useQuasar } from 'quasar' import { useConversations } from 'src/composables/useConversations' +import { sanitizeHtml } from 'src/utils/sanitize' import { getDoc, listDocs } from 'src/api/erp' import RecipientSelect from 'src/components/shared/RecipientSelect.vue' import { useSoftphone } from 'src/composables/useSoftphone' diff --git a/apps/ops/src/components/shared/detail-sections/IssueDetail.vue b/apps/ops/src/components/shared/detail-sections/IssueDetail.vue index bea1d59..845808b 100644 --- a/apps/ops/src/components/shared/detail-sections/IssueDetail.vue +++ b/apps/ops/src/components/shared/detail-sections/IssueDetail.vue @@ -185,7 +185,7 @@
Resolution
- +
Echanges ({{ comms.length }})
@@ -193,7 +193,7 @@
{{ comm.sender || comm.owner }}
- +
{{ formatDate(comm.creation) }} @@ -217,7 +217,7 @@ {{ c.comment_by || 'Systeme' }} {{ formatDateTime(c.creation) }}
-
+
@@ -265,6 +265,7 @@