Merge pull request #18 from tips-of-mine/fix/dashboard-layout-cert-links

Correction de la mise en page du tableau de bord pour les liens de ce…
This commit is contained in:
tips-of-mine
2025-06-16 14:09:08 +02:00
committed by GitHub
2 changed files with 85 additions and 25 deletions

View File

@@ -364,3 +364,57 @@ tr.revoked-cert:hover {
width: 100%;
}
}
/* Styles for certificate entries */
.certificate-entry {
display: flex;
justify-content: space-between; /* Aligne les enfants (infos du cert et actions) aux extrémités */
align-items: center; /* Centre les enfants verticalement */
margin-bottom: 10px; /* Ajoute un peu d'espace entre les entrées de certificat */
padding: 10px; /* Ajoute un peu de rembourrage à l'intérieur de chaque entrée */
border: 1px solid #eee; /* Optionnel : ajoute une bordure pour mieux visualiser les boîtes */
flex-wrap: wrap; /* Permet aux éléments de passer à la ligne sur les petits écrans si nécessaire */
}
.certificate-info {
flex-grow: 1; /* Permet à cette section de prendre l'espace disponible */
margin-right: 10px; /* Espace entre les infos et les boutons d'action */
}
.certificate-actions {
display: flex; /* Rend les boutons d'action eux-mêmes flexibles pour un alignement interne si nécessaire */
flex-shrink: 0; /* Empêche les actions de rétrécir si l'espace est limité */
gap: 5px; /* Ajoute un petit espace entre les boutons de téléchargement */
}
.certificate-info h4 {
margin-top: 0;
margin-bottom: 0;
/* Vous pouvez également envisager de définir display: inline ou display: inline-block si nécessaire,
mais les marges sont le problème le plus courant pour l'alignement vertical dans les conteneurs flex.
Pour l'instant, concentrons-nous sur les marges. */
}
/* Ajustements pour les certificats finaux dans les listes */
.certificates-overview ul .certificate-entry {
/* Peut-être des ajustements spécifiques si nécessaire, mais les styles .certificate-entry ci-dessus devraient déjà bien fonctionner */
/* Par exemple, si la bordure n'est pas souhaitée ici : */
/* border: none; */
/* padding: 5px 0; */ /* Ajuster le rembourrage pour un look plus compact dans la liste */
}
/* Assurer que les paragraphes à l'intérieur des actions n'ajoutent pas de marges indésirables */
.certificate-actions p {
margin: 0;
}
/* Styles pour les boutons de téléchargement pour qu'ils soient plus compacts si nécessaire */
.download-button-small {
padding: 5px 10px; /* Réduire le rembourrage pour les rendre plus petits */
font-size: 0.9em; /* Réduire la taille de la police */
}
/* Pour s'assurer que les liens dans .certificate-actions ne sont pas soulignés par défaut s'ils héritent d'un style global */
.certificate-actions a {
text-decoration: none;
}

View File

@@ -34,16 +34,16 @@ require_once APP_ROOT_DIR . '/src/Views/shared/header.php';
<!-- Root Certificate -->
<h3><?= htmlspecialchars($translations['root_certificate_title'] ?? 'Root Certificate') ?></h3>
<?php if (isset($structuredCertificates['root']) && $structuredCertificates['root']): ?>
<div>
<p><strong><?= htmlspecialchars($translations['name'] ?? 'Name:') ?></strong> <?= htmlspecialchars($structuredCertificates['root']['name']) ?></p>
<p>
<div class="certificate-entry">
<span><strong><?= htmlspecialchars($translations['name'] ?? 'Name:') ?></strong> <?= htmlspecialchars($structuredCertificates['root']['name']) ?></span>
<div class="certificate-actions">
<a href="/certificates/download?type=root&file=ca.cert.pem" class="button">
<?= htmlspecialchars($translations['download_certificate_pem'] ?? 'Download Certificate (.pem)') ?>
</a>
<a href="/certificates/download?type=root&file=ca.key.pem" class="button" style="margin-left: 10px;">
<?= htmlspecialchars($translations['download_key_pem'] ?? 'Download Private Key (.key)') ?>
</a>
</p>
</div>
</div>
<?php else: ?>
<p><?= htmlspecialchars($translations['root_certificate_not_configured'] ?? 'Root certificate is not configured.') ?></p>
@@ -54,32 +54,38 @@ require_once APP_ROOT_DIR . '/src/Views/shared/header.php';
<?php if (isset($structuredCertificates['intermediates']) && !empty($structuredCertificates['intermediates'])): ?>
<?php foreach ($structuredCertificates['intermediates'] as $intermediate): ?>
<div class="intermediate-certificate">
<h4><?= htmlspecialchars($intermediate['name']) ?> (<?= htmlspecialchars($translations['perimeter'] ?? 'Perimeter:') ?> <?= htmlspecialchars($intermediate['perimeter_name']) ?>)</h4>
<p>
<a href="/certificates/download?type=intermediate&perimeter=<?= urlencode($intermediate['perimeter_name']) ?>&file=<?= urlencode($intermediate['name']) ?>" class="button">
<?= htmlspecialchars($translations['download_certificate_pem'] ?? 'Download Certificate (.pem)') ?>
</a>
<?php if (isset($userRole) && $userRole === 'admin'): ?>
<?php
// Suppose que le nom du fichier clé est le nom du cert avec .key.pem au lieu de .cert.pem
$intermediateKeyName = str_replace('.cert.pem', '.key.pem', $intermediate['name']);
?>
<a href="/certificates/download?type=intermediate&perimeter=<?= urlencode($intermediate['perimeter_name']) ?>&file=<?= urlencode($intermediateKeyName) ?>" class="button" style="margin-left: 10px;">
<?= htmlspecialchars($translations['download_private_key'] ?? 'Télécharger Clé Privée (.key)') ?>
<div class="certificate-entry">
<div class="certificate-info">
<h4><?= htmlspecialchars($intermediate['name']) ?> (<?= htmlspecialchars($translations['perimeter'] ?? 'Perimeter:') ?> <?= htmlspecialchars($intermediate['perimeter_name']) ?>)</h4>
</div>
<div class="certificate-actions">
<a href="/certificates/download?type=intermediate&perimeter=<?= urlencode($intermediate['perimeter_name']) ?>&file=<?= urlencode($intermediate['name']) ?>" class="button">
<?= htmlspecialchars($translations['download_certificate_pem'] ?? 'Download Certificate (.pem)') ?>
</a>
<?php endif; ?>
</p>
<?php if (isset($userRole) && $userRole === 'admin'): ?>
<?php
// Suppose que le nom du fichier clé est le nom du cert avec .key.pem au lieu de .cert.pem
$intermediateKeyName = str_replace('.cert.pem', '.key.pem', $intermediate['name']);
?>
<a href="/certificates/download?type=intermediate&perimeter=<?= urlencode($intermediate['perimeter_name']) ?>&file=<?= urlencode($intermediateKeyName) ?>" class="button" style="margin-left: 10px;">
<?= htmlspecialchars($translations['download_private_key'] ?? 'Télécharger Clé Privée (.key)') ?>
</a>
<?php endif; ?>
</div>
</div>
<h5><?= htmlspecialchars($translations['associated_final_certificates_title'] ?? 'Associated Final Certificates') ?></h5>
<?php if (isset($intermediate['final_certificates']) && !empty($intermediate['final_certificates'])): ?>
<ul>
<?php foreach ($intermediate['final_certificates'] as $finalCert): ?>
<li>
<?= htmlspecialchars($finalCert['name']) ?>
(<?= htmlspecialchars($translations['type'] ?? 'Type:') ?> <?= htmlspecialchars($finalCert['type']) ?>,
<?= htmlspecialchars($translations['expires'] ?? 'Expires:') ?> <?= htmlspecialchars($finalCert['expiration_date']) ?>,
<?= htmlspecialchars($translations['revoked'] ?? 'Revoked:') ?> <?= $finalCert['is_revoked'] ? htmlspecialchars($translations['yes'] ?? 'Yes') : htmlspecialchars($translations['no'] ?? 'No') ?>)
<p>
<li class="certificate-entry">
<div class="certificate-info">
<?= htmlspecialchars($finalCert['name']) ?>
(<?= htmlspecialchars($translations['type'] ?? 'Type:') ?> <?= htmlspecialchars($finalCert['type']) ?>,
<?= htmlspecialchars($translations['expires'] ?? 'Expires:') ?> <?= htmlspecialchars($finalCert['expiration_date']) ?>,
<?= htmlspecialchars($translations['revoked'] ?? 'Revoked:') ?> <?= $finalCert['is_revoked'] ? htmlspecialchars($translations['yes'] ?? 'Yes') : htmlspecialchars($translations['no'] ?? 'No') ?>)
</div>
<div class="certificate-actions">
<a href="/certificates/download?type=simple&perimeter=<?= urlencode($intermediate['perimeter_name']) ?>&file=<?= urlencode($finalCert['name']) ?>" class="button download-button-small">
<?= htmlspecialchars($translations['download_certificate_pem'] ?? 'Download Certificate (.pem)') ?>
</a>
@@ -92,7 +98,7 @@ require_once APP_ROOT_DIR . '/src/Views/shared/header.php';
<?= htmlspecialchars($translations['download_private_key'] ?? 'Télécharger Clé Privée (.key)') ?>
</a>
<?php endif; ?>
</p>
</div>
</li>
<?php endforeach; ?>
</ul>