diff --git a/backend/src/services/contract.service.ts b/backend/src/services/contract.service.ts index 7391b956..f25dcbf0 100644 --- a/backend/src/services/contract.service.ts +++ b/backend/src/services/contract.service.ts @@ -177,6 +177,13 @@ export async function getContractById(id: number, decryptPassword = false) { } } + // Virtuelles Bool-Flag, damit das Frontend "PW gesetzt?" weiß, ohne dass + // der verschlüsselte Blob in die Response leakt (sanitizeContract strippt + // portalPasswordEncrypted bewusst). Pentest Runde 15 – sensitive Feld + // raus aus /contracts/:id; UI nutzt jetzt `hasPortalPassword`. + (contract as Record).hasPortalPassword = + !!contract.portalPasswordEncrypted; + return contract; } diff --git a/frontend/src/pages/contracts/ContractDetail.tsx b/frontend/src/pages/contracts/ContractDetail.tsx index 16f42128..35d48630 100644 --- a/frontend/src/pages/contracts/ContractDetail.tsx +++ b/frontend/src/pages/contracts/ContractDetail.tsx @@ -2399,7 +2399,7 @@ export default function ContractDetail() { {/* Portal Credentials */} - {(c.portalUsername || c.stressfreiEmail || c.portalPasswordEncrypted) && ( + {(c.portalUsername || c.stressfreiEmail || c.hasPortalPassword) && (
{(c.portalUsername || c.stressfreiEmail) && ( @@ -2416,7 +2416,7 @@ export default function ContractDetail() { )} - {c.portalPasswordEncrypted && ( + {c.hasPortalPassword && (
Passwort
@@ -2435,7 +2435,7 @@ export default function ContractDetail() {
{/* Auto-Login Button */} - {c.provider?.portalUrl && (c.portalUsername || c.stressfreiEmail) && c.portalPasswordEncrypted && ( + {c.provider?.portalUrl && (c.portalUsername || c.stressfreiEmail) && c.hasPortalPassword && (