Système de gestion centralisée des partages SMB pour workflows vidéo professionnels
🌐 Site Web •
📦 Installation •
📚 API •
🔧 Développement
SolidMount est un système de gestion centralisée des partages réseau SMB/CIFS conçu spécifiquement pour les environnements de post-production vidéo professionnelle . Il remplace le processus manuel et fastidieux de montage des partages Windows par un système automatisé de type "broker", offrant une expérience similaire à des solutions enterprise comme Avid NEXIS , Facilis ou EditShare .
Dans un environnement de post-production vidéo typique :
Multiples NAS/SAN : TrueNAS, Synology, QNAP, Windows Server...
Nombreux utilisateurs : Monteurs, assistants, étalonneurs, mixeurs... avec des niveaux d'accès différenciés.
Partages variés : Projets, rushes, exports, archives...
Postes multiples : Les utilisateurs changent régulièrement de station
Sans SolidMount : Chaque utilisateur doit manuellement monter ses partages avec net use, retenir les chemins UNC, les credentials, les lettres de lecteur... Un cauchemar opérationnel.
Avec SolidMount : L'utilisateur se connecte une fois, tous ses partages apparaissent automatiquement avec les bonnes lettres de lecteur. Simple, rapide, professionnel.
Pour les utilisateurs finaux
Fonctionnalité
Bénéfice
Authentification unique
Un seul login pour accéder à tous les partages autorisés
Montage automatique
Les partages se montent automatiquement à la connexion
Lettres cohérentes
Toujours les mêmes lettres de lecteur, sur n'importe quel poste
Interface intuitive
Application moderne, simple d'utilisation
Mode service
Tourne en arrière-plan, disponible à tout moment
Fonctionnalité
Bénéfice
Gestion centralisée
Interface web unique pour tout configurer
Credentials masqués
Les identifiants SMB ne sont jamais exposés aux utilisateurs
Permissions granulaires
Contrôle précis de qui accède à quoi
Scanner automatique
Découverte des partages en un clic
Monitoring temps réel
Statut des serveurs et partages en direct
Fonctionnalité
Bénéfice
Léger
Serveur ~15 Mo, Client ~25 Mo
Sans dépendances
Pas de runtime externe (Java, .NET...)
Base embarquée
SQLite, pas de serveur DB à maintenir
Service Windows
Démarre automatiquement, logs rotatifs
Chiffrement
Credentials stockés en AES-256-GCM
SolidMount utilise une architecture client-serveur classique avec une séparation claire des responsabilités :
┌─────────────────────────────────────────────────────────────────────────────┐
│ SOLIDMOUNT ECOSYSTEM │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────────────────────────┐ │
│ │ SOLIDMOUNT SERVER │ │
│ │ (Service Windows + API REST) │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ API REST │ │ Web Admin │ │ SQLite │ │ SMB Scan │ │ │
│ │ │ (net/http) │ │ (embedded) │ │ (modernc) │ │ (go-smb2) │ │ │
│ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │
│ │ │ │ │ │ │ │
│ │ └────────────────┴────────────────┴────────────────┘ │ │
│ │ │ │ │
│ │ ┌──────┴──────┐ │ │
│ │ │ JWT + AES │ │ │
│ │ │ Security │ │ │
│ │ └─────────────┘ │ │
│ └───────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ Port 8080 │
│ (HTTP REST API) │
│ │ │
│ ┌──────────────────────────┼──────────────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ CLIENT │ │ CLIENT │ │ CLIENT │ │
│ │ (Poste 1) │ │ (Poste 2) │ │ (Poste N) │ │
│ │ │ │ │ │ │ │
│ │ ┌─────────┐ │ │ ┌─────────┐ │ │ ┌─────────┐ │ │
│ │ │ Wails │ │ │ │ Wails │ │ │ │ Wails │ │ │
│ │ │ Svelte │ │ │ │ Svelte │ │ │ │ Svelte │ │ │
│ │ │ Win32 │ │ │ │ Win32 │ │ │ │ Win32 │ │ │
│ │ └────┬────┘ │ │ └────┬────┘ │ │ └────┬────┘ │ │
│ └──────┼──────┘ └──────┼──────┘ └──────┼──────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Z: \\nas\p1 │ │ Z: \\nas\p1 │ │ Z: \\nas\p1 │ │
│ │ Y: \\nas\p2 │ │ Y: \\nas\p2 │ │ Y: \\nas\p2 │ │
│ │ X: \\san\ex │ │ X: \\san\ex │ │ X: \\san\ex │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ Lecteurs réseau Lecteurs réseau Lecteurs réseau │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ INFRASTRUCTURE STOCKAGE │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ TrueNAS │ │ Synology │ │ QNAP │ │ Windows │ │
│ │ Scale │ │ DS1821+ │ │ TVS-h874 │ │ Server │ │
│ │ │ │ │ │ │ │ │ │
│ │ \\nas1\... │ │ \\nas2\... │ │ \\san\... │ │ \\srv\... │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Configuration : L'admin configure serveurs, credentials, partages et permissions via l'interface web
Authentification : L'utilisateur se connecte au client avec ses identifiants SolidMount
Récupération : Le client récupère la liste des partages autorisés via l'API REST
Montage : Le client monte les partages en utilisant les credentials SMB stockés côté serveur
Monitoring : Le client surveille l'état des connexions et reconnecte automatiquement si nécessaire
Choix technologiques et justifications
Critère
Justification
Performance
Compilation native, pas de runtime, démarrage instantané
Déploiement
Un seul exécutable, pas de dépendances externes
Concurrence
Goroutines pour le monitoring parallèle des partages
Accessibilité
Plus accessible que Rust pour la maintenance par des non-spécialistes
Écosystème
Bibliothèques matures pour SMB, SQLite, JWT...
Base de données : SQLite (via modernc.org/sqlite)
Critère
Justification
Embedded
Pas de serveur de base de données à installer/maintenir
Pure Go
Pas de CGO, compilation croisée simplifiée
Performance
Suffisant pour des centaines d'utilisateurs
Portabilité
Un seul fichier .db, backup trivial
Fiabilité
SQLite est la DB la plus déployée au monde
Critère
Justification
Natif
Utilise WebView2 (Edge Chromium), pas d'Electron
Léger
~25 Mo vs ~150+ Mo pour Electron
Go backend
Communication directe Go ↔ Frontend
Moderne
Support des frameworks modernes (Svelte, React, Vue)
Critère
Justification
Performance
Compilation, pas de virtual DOM
Bundle size
Minimal, idéal pour une app desktop
Simplicité
Syntaxe claire, courbe d'apprentissage douce
Réactivité
Système réactif natif élégant
Critère
Justification
Pure Go
Pas de dépendance à smbclient ou autres outils externes
SMB 2/3
Support des protocoles modernes
Scanning
Permet la découverte automatique des partages
Montage Windows : Win32 API (WNetAddConnection2)
Critère
Justification
Natif
API Windows officielle pour le montage réseau
Fiable
Comportement identique à net use
Contrôle
Gestion fine des credentials et options
Silencieux
Pas de fenêtre CMD qui apparaît
Composant
Technologie
Rôle
API REST
net/http (stdlib)
Endpoints CRUD + authentification
Routage
Pattern matching manuel
Léger, pas de framework externe
Auth
JWT (HS256)
Tokens stateless pour API
Crypto
AES-256-GCM
Chiffrement des credentials stockés
Service
kardianos/service
Installation comme service Windows
Logs
lumberjack
Rotation automatique des fichiers log
Config
YAML
Configuration lisible et éditable
Web UI
HTML/CSS/JS embedded
Interface admin sans dépendance
Composant
Technologie
Rôle
Framework
Wails v2
Bridge Go ↔ WebView2
UI
Svelte
Interface utilisateur réactive
Styling
CSS custom
Design iOS 15 / Material Design
SMB
mpr.dll (Win32)
Montage/démontage natif
Theme
DWM API
Coins arrondis Windows 11
Singleton
Mutex + TCP + PID
Instance unique garantie
Autostart
Registry
Démarrage avec Windows
📦 Fonctionnalités détaillées
Installation/désinstallation comme service Windows natif
Démarrage automatique au boot du système
Commandes : install, uninstall, start, stop, restart, status, run
Mode console (run) pour le débogage
Logs rotatifs avec compression gzip automatique
Authentification JWT avec tokens signés HS256
Endpoints CRUD complets pour toutes les entités
Middleware de logging et récupération d'erreurs
CORS configuré pour les clients web
Health check public pour monitoring externe
Interface d'administration web
Design moderne inspiré iOS 15 / Android Material Design
Responsive : fonctionne sur desktop, tablette, mobile
Navigation par sidebar avec indicateurs visuels
Thème sombre optimisé pour les environnements de post-production
Feedback visuel : toasts, loaders, confirmations
Page
Fonctionnalités
Dashboard
Vue d'ensemble, statistiques, statut des serveurs
Serveurs
CRUD serveurs, test connectivité, scan partages
Credentials
CRUD credentials par serveur, credential par défaut
Partages
CRUD partages, import depuis scan, lettre par défaut
Utilisateurs
CRUD utilisateurs, rôles (admin/user), activation
Permissions
Attribution partages→utilisateurs avec lettre custom
Découverte automatique des partages sur un serveur
Test de connectivité avec les credentials configurés
Import en masse des partages découverts
Vérification temps réel de l'accessibilité
Chiffrement AES-256-GCM des mots de passe en base
Clé de chiffrement générée automatiquement au premier lancement
Credential par défaut par serveur pour le scanning
Support domaine : DOMAIN\user ou user@domain
Fenêtre frameless : pas de bordure Windows native
Coins arrondis : natifs sur Windows 11 via DWM API
Bordure fine : contour subtil pour délimiter la fenêtre
Titlebar custom : draggable avec boutons minimize/close
Animations : transitions fluides, feedback visuel
Statut
Icône
Description
Connecté
🟢
Partage monté et accessible
Déconnecté
⚪
Partage non monté
Connexion...
🔄
Montage en cours
Inaccessible
🟠
Monté mais serveur injoignable
Erreur
🔴
Échec de montage
Action
Résultat
Clic minimize (─)
Minimise dans la barre des tâches
Clic close (×)
Masque la fenêtre, l'app continue en arrière-plan
Relancer l'exe
Réactive la fenêtre existante (single instance)
Paramètres → Quitter
Démonte les partages et ferme vraiment l'application
Tourne en arrière-plan après fermeture de la fenêtre
Maintient les connexions SMB actives
Monitoring continu de l'état des partages
Reconnexion automatique si un partage devient inaccessible
Triple verrou pour garantir une instance unique :
Mutex Windows nommé SolidMountClientMutex
Port TCP 47899 en écoute
Fichier PID dans %APPDATA%\SolidMount\
Si une instance existe déjà, la nouvelle envoie un signal IPC pour réactiver la fenêtre.
Prise de contrôle au démarrage
Au lancement, le client :
Détecte tous les lecteurs réseau existants
Déconnecte proprement ceux qui correspondent aux lettres gérées
Informe l'utilisateur via événement UI
Évite les conflits de credentials SMB
Activation/désactivation depuis les paramètres
Clé registry : HKCU\Software\Microsoft\Windows\CurrentVersion\Run
Lancement silencieux à l'ouverture de session
Vérification périodique (toutes les 30 secondes)
Ping serveur SolidMount
Test accessibilité des partages montés
Reconnexion automatique si perte de connexion
Événements UI pour informer l'utilisateur
Code Windows
Message utilisateur
ERROR_ACCESS_DENIED
Accès refusé
ERROR_ALREADY_ASSIGNED
Lettre de lecteur déjà utilisée
ERROR_BAD_NET_NAME
Partage introuvable
ERROR_BAD_NETPATH
Serveur inaccessible
ERROR_LOGON_FAILURE
Utilisateur ou mot de passe incorrect
ERROR_SESSION_CREDENTIAL_CONFLICT
Conflit de credentials (session existante)
┌─────────────────┐ ┌─────────────────────┐ ┌─────────────────┐
│ servers │ │ server_credentials │ │ shares │
├─────────────────┤ ├─────────────────────┤ ├─────────────────┤
│ id (PK) │───┐ │ id (PK) │ ┌───│ id (PK) │
│ nickname │ │ │ server_id (FK)──────│───┘ │ server_id (FK)──│───┐
│ hostname │ └───│ label │ │ share_name │ │
│ port │ │ username │ │ display_name │ │
│ description │ │ password_encrypted │ │ description │ │
│ active │ │ domain │ │ default_letter │ │
│ created_at │ │ description │ │ unc_path │ │
│ updated_at │ │ is_default │ │ active │ │
└─────────────────┘ │ created_at │ │ created_at │ │
│ updated_at │ │ updated_at │ │
└─────────────────────┘ └─────────────────┘ │
│ │ │
│ │ │
▼ ▼ │
┌─────────────────┐ ┌─────────────────────────────────────────────┐ │
│ users │ │ user_share_permissions │ │
├─────────────────┤ ├─────────────────────────────────────────────┤ │
│ id (PK) │───┐ │ id (PK) │ │
│ username │ │ │ user_id (FK)────────────────────────────────│─────┘
│ password_hash │ └───│ share_id (FK)───────────────────────────────│───┐
│ display_name │ │ credential_id (FK)──────────────────────────│───┘
│ email │ │ auto_mount │
│ role │ │ custom_letter │
│ active │ │ created_at │
│ last_login │ │ updated_at │
│ created_at │ └─────────────────────────────────────────────┘
│ updated_at │
└─────────────────┘
Champ
Type
Description
id
UUID
Identifiant unique
nickname
string
Nom d'affichage (ex: "NAS Principal")
hostname
string
IP ou hostname (ex: "192.168.1.10")
port
int
Port SMB (défaut: 445)
description
string
Description optionnelle
active
bool
Serveur actif/inactif
ServerCredential (Identifiants SMB)
Champ
Type
Description
id
UUID
Identifiant unique
server_id
UUID
Référence au serveur
label
string
Nom d'affichage (ex: "Admin NAS")
username
string
Nom d'utilisateur SMB
password_encrypted
blob
Mot de passe chiffré AES-256-GCM
domain
string
Domaine optionnel
is_default
bool
Credential par défaut pour ce serveur
Champ
Type
Description
id
UUID
Identifiant unique
server_id
UUID
Référence au serveur
share_name
string
Nom du partage SMB (ex: "video")
display_name
string
Nom d'affichage (ex: "Projets Vidéo")
description
string
Description optionnelle
default_letter
char
Lettre par défaut (ex: "Z")
unc_path
string
Chemin complet (ex: "\\nas\video")
active
bool
Partage actif/inactif
User (Utilisateur SolidMount)
Champ
Type
Description
id
UUID
Identifiant unique
username
string
Identifiant de connexion
password_hash
string
Hash bcrypt du mot de passe
display_name
string
Nom affiché
email
string
Email optionnel
role
enum
"admin" ou "user"
active
bool
Compte actif/inactif
last_login
datetime
Dernière connexion
UserSharePermission (Permission)
Champ
Type
Description
id
UUID
Identifiant unique
user_id
UUID
Référence à l'utilisateur
share_id
UUID
Référence au partage
credential_id
UUID
Credential à utiliser pour ce montage
auto_mount
bool
Monter automatiquement à la connexion
custom_letter
char
Lettre personnalisée (override default)
Mécanisme
Implémentation
Mots de passe utilisateurs
Hash bcrypt (cost 10)
Tokens API
JWT signé HS256, expiration 24h
Secret JWT
Généré aléatoirement au premier lancement
Chiffrement des credentials SMB
┌────────────────────────────────────────────────────────────┐
│ STOCKAGE CREDENTIALS │
├────────────────────────────────────────────────────────────┤
│ │
│ Mot de passe SMB en clair │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────┐ │
│ │ AES-256-GCM Encryption │ │
│ │ ┌─────────────┐ ┌──────────────┐ │ │
│ │ │ Nonce │ │ Ciphertext │ │ │
│ │ │ (12 bytes) │ │ + Auth Tag │ │ │
│ │ └─────────────┘ └──────────────┘ │ │
│ └──────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ Stocké en base : nonce || ciphertext │
│ │
│ Clé de chiffrement : │
│ - Générée au premier lancement (32 bytes random) │
│ - Stockée dans config.yaml ou variable d'environnement │
│ │
└────────────────────────────────────────────────────────────┘
Interface
Accessible par
Authentification
Web Admin
Administrateurs uniquement
JWT (role=admin)
API /client/
Utilisateurs finaux
JWT (role=user ou admin)
API /health
Tout le monde
Aucune (monitoring)
Bonnes pratiques implémentées
✅ Pas de credentials SMB stockés côté client
✅ Credentials transmis uniquement pour le montage, jamais affichés
✅ HTTPS recommandé en production (via reverse proxy)
✅ Tokens JWT à durée limitée
✅ Mots de passe jamais loggés
✅ Input validation sur tous les endpoints
Windows 10/11 (64-bit)
Droits administrateur pour l'installation du serveur
Télécharger SolidMount-Server-Setup-1.0.0.exe
Exécuter en tant qu'administrateur
Suivre l'assistant d'installation
Le service démarre automatiquement
Accéder à http://localhost:8080
Se connecter : admin / admin
⚠️ Changer le mot de passe admin immédiatement
Télécharger SolidMount-Client-Setup-1.0.0.exe
Exécuter l'installateur
Suivre l'assistant
Lancer SolidMount depuis le bureau ou le menu démarrer
Configurer l'URL du serveur dans les paramètres
Se connecter avec ses identifiants
Emplacements des fichiers
C:\Program Files\SolidMount Server\
└── solidmount-server.exe
C:\ProgramData\SolidMount\
├── config.yaml # Configuration
├── solidmount.db # Base de données
└── logs\
├── solidmount.log # Log actuel
└── solidmount-*.gz # Logs archivés
C:\Program Files\SolidMount Client\
└── SolidMount.exe
%APPDATA%\SolidMount\
├── config.json # Configuration locale
└── solidmount.log # Log client
# Configuration SolidMount Server
server :
host : " 0.0.0.0" # Écouter sur toutes les interfaces
port : 8080 # Port HTTP
database :
path : " C:\\ ProgramData\\ SolidMount\\ solidmount.db"
security :
jwt_secret : " votre-secret-jwt-genere" # Généré automatiquement
encryption_key : " votre-cle-aes-256" # Généré automatiquement
logging :
path : " C:\\ ProgramData\\ SolidMount\\ logs\\ solidmount.log"
max_size_mb : 10 # Taille max avant rotation
max_backups : 5 # Nombre de fichiers conservés
max_age_days : 30 # Rétention en jours
compress : true # Compression gzip des anciens logs
Variables d'environnement (priorité sur config.yaml)
Variable
Description
SOLIDMOUNT_HOST
Adresse d'écoute
SOLIDMOUNT_PORT
Port d'écoute
SOLIDMOUNT_DB
Chemin base de données
SOLIDMOUNT_JWT_SECRET
Secret JWT
SOLIDMOUNT_ENCRYPTION_KEY
Clé AES-256
SOLIDMOUNT_DATA
Répertoire de données
{
"server_url" : " http://192.168.1.100:8080" ,
"last_username" : " operator1" ,
"auto_mount" : true
}
Toutes les routes (sauf /health et /api/v1/auth/login) nécessitent un token JWT dans le header :
Authorization: Bearer <token>
Méthode
Route
Description
GET
/health
Health check (monitoring)
GET
/api/v1/status
Statut du serveur
POST
/api/v1/auth/login
Authentification
Méthode
Route
Description
POST
/api/v1/auth/logout
Déconnexion
GET
/api/v1/auth/me
Infos utilisateur courant
POST
/api/v1/auth/change-password
Changer mot de passe
Méthode
Route
Description
GET
/api/v1/servers
Liste des serveurs
POST
/api/v1/servers
Créer un serveur
GET
/api/v1/servers/:id
Détails d'un serveur
PUT
/api/v1/servers/:id
Modifier un serveur
DELETE
/api/v1/servers/:id
Supprimer un serveur
POST
/api/v1/servers/:id/scan
Scanner les partages
POST
/api/v1/servers/:id/check
Vérifier connectivité
Méthode
Route
Description
GET
/api/v1/servers/:id/credentials
Credentials d'un serveur
POST
/api/v1/servers/:id/credentials
Créer un credential
GET
/api/v1/credentials/:id
Détails d'un credential
PUT
/api/v1/credentials/:id
Modifier un credential
DELETE
/api/v1/credentials/:id
Supprimer un credential
Méthode
Route
Description
GET
/api/v1/shares
Liste des partages
POST
/api/v1/shares
Créer un partage
GET
/api/v1/shares/:id
Détails d'un partage
PUT
/api/v1/shares/:id
Modifier un partage
DELETE
/api/v1/shares/:id
Supprimer un partage
Méthode
Route
Description
GET
/api/v1/users
Liste des utilisateurs
POST
/api/v1/users
Créer un utilisateur
GET
/api/v1/users/:id
Détails d'un utilisateur
PUT
/api/v1/users/:id
Modifier un utilisateur
DELETE
/api/v1/users/:id
Supprimer un utilisateur
GET
/api/v1/users/:id/permissions
Permissions d'un utilisateur
POST
/api/v1/users/:id/permissions
Ajouter une permission
DELETE
/api/v1/permissions/:id
Supprimer une permission
Méthode
Route
Description
GET
/api/v1/client/shares
Partages de l'utilisateur connecté
curl -X POST http://localhost:8080/api/v1/auth/login \
-H " Content-Type: application/json" \
-d ' {"username": "admin", "password": "admin"}'
Réponse :
{
"success" : true ,
"data" : {
"token" : " eyJhbGciOiJIUzI1NiIs..." ,
"user" : {
"id" : " uuid" ,
"username" : " admin" ,
"role" : " admin"
}
}
}
Récupérer ses partages (client)
curl http://localhost:8080/api/v1/client/shares \
-H " Authorization: Bearer <token>"
Réponse :
{
"success" : true ,
"data" : [
{
"share_id" : " uuid" ,
"share_name" : " video" ,
"display_name" : " Projets Vidéo" ,
"unc_path" : " \\\\ nas\\ video" ,
"drive_letter" : " Z" ,
"server_name" : " NAS Principal" ,
"auto_mount" : true ,
"smb_username" : " editor" ,
"smb_password" : " ***" ,
"smb_domain" : " WORKGROUP"
}
]
}
cd server
# Mode développement (répertoire local)
$env: SOLIDMOUNT_DATA = " ."
go run . run
# Build production
go build - ldflags= " -s -w" - o solidmount-server.exe .
Le serveur est accessible sur http://localhost:8080
cd client- gui
# Installer les dépendances frontend
cd frontend && npm install && cd ..
# Mode développement avec hot-reload
wails dev
# Build production
wails build - clean - windowsconsole= false
L'exécutable est généré dans client-gui/build/bin/SolidMount.exe
cd installer
# Tout compiler
.\build-all.bat
# Ou séparément
.\build.bat # Serveur
.\build-client.bat # Client
Les installateurs sont générés dans installer/output/
Serveur : Vérifier http://localhost:8080/health
Admin : Se connecter à http://localhost:8080 avec admin/admin
Client : Configurer l'URL serveur, se connecter, tester le montage
SolidMount-Bridge/
│
├── server/ # 🖥️ SERVEUR
│ ├── main.go # Point d'entrée, service Windows
│ ├── config/
│ │ └── config.go # Chargement configuration YAML
│ ├── api/
│ │ ├── auth.go # Authentification JWT
│ │ ├── middleware.go # Logging, recovery, CORS
│ │ ├── servers.go # CRUD serveurs
│ │ ├── credentials.go # CRUD credentials
│ │ ├── shares.go # CRUD partages
│ │ ├── users.go # CRUD utilisateurs
│ │ ├── permissions.go # CRUD permissions
│ │ ├── scanner.go # Découverte SMB
│ │ └── connectivity.go # Test connexion temps réel
│ ├── db/
│ │ ├── database.go # Connexion SQLite
│ │ ├── schema.go # Création tables
│ │ ├── models.go # Structures de données
│ │ └── crypto.go # Chiffrement AES-256-GCM
│ ├── web/
│ │ ├── embed.go # Embedding fichiers statiques
│ │ └── static/
│ │ ├── index.html # SPA admin
│ │ ├── css/style.css # Styles iOS/Material
│ │ └── js/
│ │ ├── api.js # Client HTTP
│ │ └── app.js # Logique UI
│ ├── config.yaml # Configuration
│ └── go.mod # Dépendances Go
│
├── client-gui/ # 💻 CLIENT
│ ├── main.go # Point d'entrée, singleton
│ ├── app.go # Logique application Wails
│ ├── windows_theme.go # Coins arrondis Win11
│ ├── internal/
│ │ ├── api/
│ │ │ ├── client.go # Client HTTP vers serveur
│ │ │ └── types.go # Types partagés
│ │ ├── config/
│ │ │ └── config.go # Configuration locale JSON
│ │ ├── smb/
│ │ │ ├── mount.go # WNetAddConnection2
│ │ │ ├── cleanup.go # Nettoyage lecteurs
│ │ │ └── status.go # État des montages
│ │ ├── service/
│ │ │ ├── orchestrator.go # Coordination montages
│ │ │ ├── state.go # État global
│ │ │ └── health.go # Monitoring connexions
│ │ ├── singleton/
│ │ │ └── guardian.go # Instance unique
│ │ └── autostart/
│ │ └── autostart.go # Démarrage Windows
│ ├── frontend/
│ │ ├── src/
│ │ │ ├── App.svelte # Composant racine
│ │ │ ├── main.js # Point d'entrée Svelte
│ │ │ └── components/
│ │ │ ├── Login.svelte # Écran connexion
│ │ │ ├── Header.svelte # Barre de titre
│ │ │ ├── ShareList.svelte # Liste des partages
│ │ │ ├── ShareItem.svelte # Item partage
│ │ │ └── Modal.svelte # Modals génériques
│ │ ├── package.json # Dépendances npm
│ │ └── vite.config.js # Config Vite
│ ├── build/windows/
│ │ └── icon.ico # Icône application
│ ├── wails.json # Config Wails
│ └── go.mod # Dépendances Go
│
├── installer/ # 📦 INSTALLATEURS
│ ├── solidmount-server.iss # Script Inno Setup serveur
│ ├── solidmount-client.iss # Script Inno Setup client
│ ├── build.bat # Build serveur
│ ├── build-client.bat # Build client
│ ├── build-all.bat # Build tout
│ └── output/ # Installateurs générés
│
├── docs/ # 🌐 SITE WEB
│ ├── index.html # Landing page EN
│ ├── fr.html # Landing page FR
│ ├── css/style.css # Styles glassmorphism
│ ├── js/main.js # Interactions
│ └── img/ # Screenshots
│
├── logo/ # 🎨 ASSETS
│ ├── logo*.png # Logo différentes tailles
│ ├── server*.ico # Icônes serveur
│ └── client*.ico # Icônes client
│
├── screenshots/ # 📸 CAPTURES
│
├── LICENSE # CC BY-NC-SA 4.0
└── README.md # Ce fichier
Le service serveur ne démarre pas
# Vérifier le statut
.\solidmount-server.exe status
# Lancer en mode console pour voir les erreurs
.\solidmount-server.exe run
# Consulter les logs
Get-Content " C:\ProgramData\SolidMount\logs\solidmount.log" - Tail 100
Le client ne se connecte pas au serveur
Vérifier que le serveur est accessible : http://SERVER_IP:8080/health
Vérifier le pare-feu Windows (port 8080)
Vérifier l'URL dans les paramètres du client
Consulter %APPDATA%\SolidMount\solidmount.log
Les partages ne se montent pas
Tester manuellement : net use Z: \\server\share /user:DOMAIN\user password
Vérifier les credentials dans l'admin
Vérifier les permissions de l'utilisateur
Conflit de credentials : net use * /delete puis réessayer
Erreur "Conflit de credentials"
Windows maintient des sessions SMB par serveur. Si vous avez une session existante avec des credentials différents :
# Voir les sessions actives
net use
# Supprimer toutes les connexions
net use * / delete / yes
# Ou supprimer une connexion spécifique
net use Z: / delete
Le client ne reste pas en arrière-plan
Vérifier que vous n'avez pas cliqué "Quitter" dans les paramètres
Vérifier qu'une seule instance tourne (tasklist | findstr SolidMount)
Consulter les logs client
Ce projet est distribué sous licence Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) .
Partager — copier et redistribuer le matériel sur tout support ou format
Adapter — remixer, transformer et créer à partir du matériel
Selon les conditions suivantes :
Attribution — Vous devez créditer l'auteur original, fournir un lien vers la licence et indiquer si des modifications ont été effectuées
Pas d'Utilisation Commerciale — Vous ne pouvez pas utiliser ce projet à des fins commerciales
Partage dans les Mêmes Conditions — Si vous modifiez, transformez ou créez à partir de ce projet, vous devez distribuer vos contributions sous la même licence
📜 Voir le fichier LICENSE pour le texte complet de la licence.
Félix Abt
Développeur & Directeur Technique
🌐 Cairn Studios •
💼 LinkedIn •
🐙 GitHub
Fait avec ❤️ pour la communauté post-production