+
+ setFilePolicies({ virustotal_api_key: e.target.value })}
+ placeholder={vtKeyConfigured ? "•••••••• (laisser vide pour conserver)" : "Coller la clé API"}
+ />
+ {vtKeyConfigured && !(filePolicies.virustotal_api_key ?? "").trim() ? (
+
Clé configurée
+ ) : null}
+ {vtKeyMissing ? (
+
+ Analyse activée sans clé API — les uploads ne seront pas scannés.
+
+ ) : null}
+
+ ) : null}
)
diff --git a/components/gmail/email-view/message-attachments.tsx b/components/gmail/email-view/message-attachments.tsx
index 06fc497..4e41419 100644
--- a/components/gmail/email-view/message-attachments.tsx
+++ b/components/gmail/email-view/message-attachments.tsx
@@ -85,6 +85,34 @@ function DriveLocationBadge({ folderPath }: { folderPath: string }) {
)
}
+function attachmentsVirusTotalScanned(attachments: EmailAttachment[]): boolean {
+ return attachments.some((a) => a.virusScanStatus === "clean")
+}
+
+function VirusTotalScanBadge() {
+ return (
+ <>
+ ·
+ Analysé par VirusTotal
+
+
+
+
+
+ VirusTotal analyse les pièces jointes et les compare à une base de signatures pour
+ repérer les virus et logiciels malveillants.
+
+
+ >
+ )
+}
+
export function MessageAttachmentsSection({
messageId,
attachments,
@@ -117,6 +145,7 @@ export function MessageAttachmentsSection({
const summary = n === 1 ? "Une pièce jointe" : `${n} pièces jointes`
const asPills = shouldUseAttachmentPillsInPreview(attachments)
+ const showVirusTotal = attachmentsVirusTotalScanned(attachments)
const openPreview = (index: number) => {
if (!attachments.some((a) => a.id)) {
@@ -167,24 +196,8 @@ export function MessageAttachmentsSection({
{summary}
- ·
- Analysé par VirusTotal
+ {showVirusTotal ? : null}
-
-
-
-
-
- VirusTotal analyse les pièces jointes et les compare à une base de signatures pour
- repérer les virus et logiciels malveillants.
-
-
{allSaved && uniqueSaveFolders.length === 1 ? (
@@ -316,6 +329,7 @@ export function ConversationAttachmentsSection({
? "Une pièce jointe dans cette conversation"
: `${n} pièces jointes dans cette conversation`
const asPills = shouldUseAttachmentPillsInPreview(flat.map((item) => item.attachment))
+ const showVirusTotal = attachmentsVirusTotalScanned(flat.map((item) => item.attachment))
const openPreview = (messageId: string, attachments: EmailAttachment[], index: number) => {
if (!attachments.some((a) => a.id)) {
@@ -336,24 +350,8 @@ export function ConversationAttachmentsSection({
{summary}
- ·
- Analysé par VirusTotal
+ {showVirusTotal ? : null}
-
-
-
-
-
- VirusTotal analyse les pièces jointes et les compare à une base de signatures pour
- repérer les virus et logiciels malveillants.
-
-