Sign inSign up

sebchevre/passbolt-viewer

By sebchevre

•Updated 6 months ago

Image
0

444

sebchevre/passbolt-viewer repository overview

⁠Passbolt Viewer

Petite application web permettant de consulter des mots de passe Passbolt sans extension navigateur. Toute la cryptographie (OpenPGP) s'exécute côté client : la clé privée et la passphrase ne quittent jamais le navigateur.

⁠Vue d'ensemble

  • Frontend : HTML/CSS/JS + OpenPGP.js (client-side decryption)
  • Backend : Express.js — proxy vers l'API Passbolt (whitelist, rate limiting, CSRF)

⁠Prérequis

  • Node.js >= 18 (développement local)
  • Docker & Docker Compose (déploiement)
  • Une instance Passbolt accessible

⁠Développement local

git clone .../passbolt-viewer.git
cd passbolt-viewer
npm install
cp .env.example .env
# Éditer .env (au minimum `PASSBOLT_URL` et `SESSION_SECRET`)

# Lancer en local
node server.js
# ou pour rechargement automatique
npx nodemon server.js

L'application sera disponible sur http://localhost:3100.

Note : en développement NODE_ENV n'est pas production, les cookies CSRF ne sont donc pas marqués secure pour permettre HTTP.

⁠Déploiement Docker

Image officielle publiée sur Docker Hub : https://hub.docker.com/repository/docker/sebchevre/passbolt-viewer/general⁠

  • Nom d'image : sebchevre/passbolt-viewer
  • Tag par défaut utilisé par docker-compose.yml : latest

Commandes utiles :

# Démarrer avec l'image publiée (production)
docker compose up -d

# Développement local (rebuild du code local)
docker compose -f dev-docker-compose.yml up -d --build

Remarque : pour tester une modification locale, utilisez dev-docker-compose.yml (monte un volume Docker pour persister tags.json).

⁠Stockage des tags

Les tags ajoutés dans l'interface sont sauvegardés côté serveur dans TAGS_FILE (par défaut /data/tags.json) :

  • Si vous hébergez plusieurs réplicas sans volume partagé, chaque instance aura son propre jeu de tags.
  • Pour partager les tags entre instances, montez un volume partagé sur /data ou centralisez le fichier.

Pour afficher ou migrer les tags depuis la machine hôte :

# Lire le fichier tags (si le container tourne)
docker exec pb-viewer cat /data/tags.json

# Ou depuis l'hôte, lire le volume nommé
docker run --rm -v pb_tags_data:/data alpine cat /data/tags.json

Pour exporter/importer les tags entre instances A → B :

# Sur A (export)
docker run --rm -v pb_tags_data:/data -v "$PWD":/backup alpine sh -c 'cp /data/tags.json /backup/tags.json || echo "{}" > /backup/tags.json'

# Transférer tags.json vers la machine B (scp/rsync)

# Sur B (import)
docker run --rm -v pb_tags_data:/data -v "$PWD":/backup alpine sh -c 'cp /backup/tags.json /data/tags.json'

⁠Configuration

Copier et éditer l'exemple d'environnement :

cp .env.example .env
# Définir au minimum :
# PASSBOLT_URL=https://votre.instance.passbolt
# SESSION_SECRET=<openssl rand -hex 32>
# ALLOWED_ORIGIN=https://keys.example.com

⁠Nginx & DNS

  • Ajouter l'enregistrement DNS pointant vers le serveur (ex. keys.example.com).
  • Recharger Nginx après changement de configuration :
cd ../nginx-reverse-proxy
docker compose exec reverse_proxy nginx -s reload

⁠Sécurité & bonnes pratiques

  • La clé privée et la passphrase restent dans le navigateur.
  • L'API Passbolt est accédée via un proxy qui limite les chemins autorisés et applique CSRF/rate-limiting.
  • En production, exécuter derrière un reverse-proxy TLS et activer NODE_ENV=production.

⁠Structure du projet

passbolt-viewer/
├── server.js              # Backend proxy Express
├── package.json
├── Dockerfile
├── docker-compose.yml
├── dev-docker-compose.yml # Compose pour développement local
├── .env.example
├── public/                # Frontend
│   ├── index.html
│   ├── css/style.css
│   └── js/
│       ├── app.js
│       └── modules/
└── README.md

⁠Aide / Dépannage

  • Si les tags n'apparaissent pas sur un poste alors qu'ils sont présents sur un autre, vérifier que vous atteignez la même instance (même URL/IP) et que le fichier /data/tags.json est identique pour tous les réplicas.
  • Vérifier la réponse de l'API depuis le poste :
curl -sS 'https://keys.example.com/api/tags' | jq .

Si tu veux, je peux :

  • pousser cette version nettoyée du README.md dans le dépôt (git commit + git push),
  • ou ajouter un paragraphe supplémentaire (ex: CI, image tags, politique de versions). Indique ta préférence.

Tag summary

Content type

Image

Digest

sha256:aca0c50b5…

Size

66.5 MB

Last updated

6 months ago

docker pull sebchevre/passbolt-viewer