|
All checks were successful
Tests automatisés / Lint et validation (push) Successful in 3s
Tests automatisés / Vérification syntaxe JavaScript (push) Successful in 2s
Tests automatisés / Validation de la clé PGP (push) Successful in 1s
Tests automatisés / Vérifications de sécurité (push) Successful in 1s
Tests automatisés / Vérification documentation (push) Successful in 1s
Tests automatisés / Vérification accessibilité (push) Successful in 1s
Tests automatisés / Tests d'intégration JavaScript (push) Successful in 2s
Tests automatisés / Vérification de buildabilité (push) Successful in 2s
Tests automatisés / Vérification finale (push) Successful in 0s
|
||
|---|---|---|
| .forgejo/workflows | ||
| css | ||
| js | ||
| public/keys | ||
| .gitignore | ||
| apple-touch-icon.png | ||
| BUILD.md | ||
| build.sh | ||
| favicon-96x96.png | ||
| favicon.ico | ||
| favicon.svg | ||
| index.html | ||
| LICENSE | ||
| README.md | ||
| robots.txt | ||
| site.webmanifest | ||
| web-app-manifest-192x192.png | ||
| web-app-manifest-512x512.png | ||
| WORKFLOW.md | ||
Visionneuse de clé PGP publique
Une application web moderne et minimaliste pour afficher et partager votre clé PGP publique.
Demo : https://pgp.manu.quebec
Fonctionnalités
- 📋 Affichage de la clé PGP au format ASCII
- 📊 Extraction automatique des métadonnées (ID, empreinte, algorithme, dates, UIDs)
- 📋 Copie vers le presse-papiers avec fallback
- 💾 Téléchargement de la clé
- 📱 Design responsive mobile-first
- 🌓 Mode sombre automatique
- ♿ Accessible (WCAG AA)
- ⚡ Zéro dépendances externes (JavaScript vanilla)
- ✅ Tests automatisés CI/CD avec Forgejo
Structure du projet
pgp-key-viewer/
├── index.html # Page principale
├── README.md # Ce fichier
├── LICENSE # MIT License
├── .gitignore
│
├── .forgejo/
│ └── workflows/
│ └── tests.yml # CI/CD (6 jobs)
│
├── css/
│ └── styles.css # Design moderne (~750 lignes)
│
├── js/
│ ├── main.js # Orchestration (~330 lignes)
│ ├── pgp-parser.js # Parsing PGP (~280 lignes)
│ └── utils.js # Utilitaires (~180 lignes)
│
└── public/
└── keys/
└── public.asc # Votre clé PGP publique
Installation rapide
1. Cloner le dépôt
git clone https://code.manu.quebec/manu/pgp-key-viewer.git
cd pgp-key-viewer
2. Ajouter votre clé PGP
# Exporter votre clé (remplacer YOUR_KEY_ID)
gpg --export --armor YOUR_KEY_ID > public/keys/public.asc
# Vérifier le format
head -1 public/keys/public.asc
# Doit afficher: -----BEGIN PGP PUBLIC KEY BLOCK-----
3. Tester en local
# Python 3
python3 -m http.server 8000
# Puis ouvrir http://localhost:8000
Déploiement en production
Avec Caddy (Docker Compose)
1. Déployer les fichiers
# Sur votre VPS
mkdir -p /VOTRE/CHEMIN/pgp-key-viewer
cd /VOTRE/CHEMIN/pgp-key-viewer
git clone https://code.manu.quebec/manu/pgp-key-viewer.git .
2. Configuration Caddy
Ajouter ce bloc à votre Caddyfile (ou fichier de configuration Caddy) :
pgp.manu.quebec {
root * /srv/pgp-key-viewer
file_server
encode gzip
# Headers de sécurité
header {
X-Frame-Options "SAMEORIGIN"
X-Content-Type-Options "nosniff"
X-XSS-Protection "1; mode=block"
Referrer-Policy "strict-origin-when-cross-origin"
Content-Security-Policy "default-src 'self'; style-src 'self' 'unsafe-inline'"
}
# Cache pour fichiers statiques
@static {
path /css/* /js/* /public/*
}
header @static Cache-Control "public, max-age=31536000, immutable"
}
3. Recharger Caddy
Redémarrez ou rechargez votre serveur Caddy pour appliquer la nouvelle configuration.
4. Vérifier le déploiement
# Tester depuis votre machine locale
curl -I https://pgp.manu.quebec
Mise à jour
cd /VOTRE/CHEMIN/pgp-key-viewer
git pull origin main
Configuration
Changer le chemin de la clé
Dans js/main.js :
const CONFIG = {
KEY_PATH: './public/keys/public.asc', // Modifier ici
FILENAME: 'public.asc'
};
Personnaliser les couleurs
Dans css/styles.css :
:root {
--color-primary: #2563eb;
--color-success: #10b981;
--color-error: #ef4444;
/* ... */
}
API JavaScript
Le projet expose des fonctions globales utilisables dans la console :
// Configuration
console.log(pgpViewer.config);
// Récupérer la clé en cache
const key = pgpViewer.getCachedKey();
// Recharger la clé
await pgpViewer.reloadKey();
// Parser les métadonnées
const metadata = parseKeyMetadata(key);
// Utilitaires
showNotification('Message', 'success', 2000);
copyToClipboard('texte');
downloadFile('contenu', 'fichier.txt');
Tests automatisés
Les tests CI/CD s'exécutent automatiquement à chaque push sur Forgejo via .forgejo/workflows/tests.yml.
Jobs de tests
-
lint-and-validate - Validation de la structure
- Vérification des répertoires et fichiers requis
- Présence des fonctions principales dans le code
- Structure HTML et imports CSS/JS
-
syntax-check - Vérification syntaxe JavaScript
- Validation syntaxe avec Node.js (
node -c) - Tous les fichiers JS (main.js, utils.js, pgp-parser.js)
- Validation syntaxe avec Node.js (
-
pgp-validation - Validation de la clé PGP
- Format BEGIN/END PGP PUBLIC KEY BLOCK
- Fichier non vide et taille minimale (> 500 bytes)
-
documentation - Vérification documentation
- Présence de README.md, LICENSE, .gitignore
- Sections requises dans README.md
- Configuration .gitignore
-
integration-test - Tests d'intégration JavaScript
- Test de
isPGPKey()avec clés valides/invalides - Test de
formatFingerprint()(ajout d'espaces) - Test de
escapeHtml()(protection XSS) - Test de
cleanPGPText()(nettoyage du texte)
- Test de
-
build-check - Vérification de buildabilité
- Présence de tous les fichiers de production
-
final-check - Résumé final
- Agrégation des résultats de tous les jobs
- Affichage du statut global
Voir les résultats : Actions sur Forgejo
Tests locaux avant push
# Syntaxe JavaScript
node -c js/main.js
node -c js/utils.js
node -c js/pgp-parser.js
# Structure
test -f public/keys/public.asc && echo "✓ Clé trouvée"
test -f index.html && echo "✓ HTML trouvé"
# Format PGP
head -1 public/keys/public.asc | grep -q "BEGIN PGP" && echo "✓ Format correct"
Dépannage
Erreur 404 : fichier non trouvé
# Vérifier le fichier existe
ls -la public/keys/public.asc
# Vérifier les permissions
chmod 644 public/keys/public.asc
# Vérifier le chemin dans main.js
grep "KEY_PATH" js/main.js
Format de clé invalide
# Vérifier le début
head -1 public/keys/public.asc
# Doit afficher: -----BEGIN PGP PUBLIC KEY BLOCK-----
# Réexporter la clé
gpg --export --armor YOUR_KEY_ID > public/keys/public.asc
Bouton copier ne fonctionne pas
- En local : HTTP devrait fonctionner
- En production : HTTPS est requis pour l'API Clipboard
- Vérifier la console (F12) pour erreurs spécifiques
Tests Forgejo ne s'exécutent pas
# Vérifier que le fichier existe
ls -la .forgejo/workflows/tests.yml
# Vérifier que Forgejo Actions est activé (paramètres du dépôt)
# Vérifier que le runner Forgejo est en ligne
Sécurité
- ✅ Content Security Policy (CSP)
- ✅ Protection contre injections HTML (
escapeHtml()) - ✅ Pas de
eval()ouinnerHTML()avec données brutes - ✅ Headers de sécurité (X-Frame-Options, X-Content-Type-Options, etc.)
- ✅ HTTPS obligatoire en production (Let's Encrypt automatique avec Caddy)
- ✅ Validation du format PGP
Navigateurs supportés
- Chrome/Edge 90+
- Firefox 88+
- Safari 14+
- Navigateurs mobiles récents
Contribution
- Fork le projet
- Créer une branche (
git checkout -b feature/amelioration) - Commit (
git commit -am 'Ajouter amélioration') - Push (
git push origin feature/amelioration) - Ouvrir une Pull Request sur Forgejo
License
MIT License - Libre d'utilisation commerciale et personnelle.
Voir le fichier LICENSE pour plus de détails.
Ressources
- Dépôt : https://code.manu.quebec/manu/pgp-key-viewer
- Demo : https://pgp.manu.quebec
- Caddy : https://caddyserver.com
- Documentation PGP : https://www.openpgp.org
Version : 1.0.0
Dernière mise à jour : 2025-10-27
Statut : ✅ Complet et prêt pour production