diff --git a/client/src/pages/ImportSettings.tsx b/client/src/pages/ImportSettings.tsx
index 1c1ee62..2298bac 100644
--- a/client/src/pages/ImportSettings.tsx
+++ b/client/src/pages/ImportSettings.tsx
@@ -7,7 +7,7 @@ import { Label } from "@/components/ui/label";
import { Switch } from "@/components/ui/switch";
import { Badge } from "@/components/ui/badge";
import { toast } from "sonner";
-import { Loader2, Save, Upload, FolderOpen, Mail, Play, Square, Download, Inbox, CheckCircle2, Monitor, FolderOutput } from "lucide-react";
+import { Loader2, Save, Upload, FolderOpen, Mail, Play, Square, Download, Inbox, CheckCircle2, Monitor, FolderOutput, Wifi, WifiOff, AlertTriangle, Calendar } from "lucide-react";
import DashboardLayout from "@/components/DashboardLayout";
export default function ImportSettings() {
@@ -50,6 +50,8 @@ export default function ImportSettings() {
const [azureTenantId, setAzureTenantId] = useState("");
const [azureClientId, setAzureClientId] = useState("");
const [azureClientSecret, setAzureClientSecret] = useState("");
+ const [azureSecretExpiresAt, setAzureSecretExpiresAt] = useState("");
+ const testAzureConnectionMutation = trpc.importSettings.testAzureConnection.useMutation();
// Initialize form with settings from database
useEffect(() => {
@@ -83,6 +85,8 @@ export default function ImportSettings() {
setAzureTenantId((settings as any).azureTenantId || "");
setAzureClientId((settings as any).azureClientId || "");
setAzureClientSecret((settings as any).azureClientSecret || "");
+ const expDate = (settings as any).azureSecretExpiresAt;
+ setAzureSecretExpiresAt(expDate ? new Date(expDate).toISOString().split('T')[0] : "");
}
}, [settings]);
@@ -112,6 +116,7 @@ export default function ImportSettings() {
azureTenantId: azureTenantId || null,
azureClientId: azureClientId || null,
azureClientSecret: azureClientSecret || null,
+ azureSecretExpiresAt: azureSecretExpiresAt ? new Date(azureSecretExpiresAt) : null,
});
toast.success("Paramètres enregistrés avec succès");
@@ -680,6 +685,72 @@ export default function ImportSettings() {
/>
Stocké de façon sécurisée. Permissions requises : Files.ReadWrite.All et Sites.ReadWrite.All
+
+ {/* Date d'expiration du secret */}
+
+
+ {/* Alerte expiration */}
+ {azureSecretExpiresAt && (() => {
+ const expDate = new Date(azureSecretExpiresAt);
+ const daysLeft = Math.ceil((expDate.getTime() - Date.now()) / (1000 * 60 * 60 * 24));
+ if (daysLeft <= 0) return (
+
+ );
+ if (daysLeft <= 30) return (
+
+ );
+ return (
+
+ );
+ })()}
+
+ {/* Bouton test connexion */}
+