Skip to content

Redcat468/SolidMount-Bridge

Repository files navigation

SolidMount

SolidMount Logo

Système de gestion centralisée des partages SMB pour workflows vidéo professionnels

Version Platform Go Wails License

🌐 Site Web📦 Installation📚 API🔧 Développement


📋 Table des matières


🎯 Présentation

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.

Le problème résolu

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.


💎 Proposition de valeur

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

Pour les administrateurs

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

Pour l'infrastructure

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

🏗️ Architecture

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\...   │   │
│  └─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘   │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

Flux de données

  1. Configuration : L'admin configure serveurs, credentials, partages et permissions via l'interface web
  2. Authentification : L'utilisateur se connecte au client avec ses identifiants SolidMount
  3. Récupération : Le client récupère la liste des partages autorisés via l'API REST
  4. Montage : Le client monte les partages en utilisant les credentials SMB stockés côté serveur
  5. Monitoring : Le client surveille l'état des connexions et reconnecte automatiquement si nécessaire

🔧 Stack technique

Choix technologiques et justifications

Langage : Go 1.22+

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

Framework GUI : Wails v2

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)

Frontend Client : Svelte

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

Protocole SMB : go-smb2

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

Composants serveur

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

Composants client

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

SolidMount Server

Service Windows

  • 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

API REST

  • 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
Pages disponibles
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

Scanner SMB

  • 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é

Gestion des credentials

  • 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

SolidMount Client

Interface utilisateur

  • 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
États des partages
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

Comportement application

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

Mode service

  • 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

Single instance

Triple verrou pour garantir une instance unique :

  1. Mutex Windows nommé SolidMountClientMutex
  2. Port TCP 47899 en écoute
  3. 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 :

  1. Détecte tous les lecteurs réseau existants
  2. Déconnecte proprement ceux qui correspondent aux lettres gérées
  3. Informe l'utilisateur via événement UI
  4. Évite les conflits de credentials SMB

Auto-start Windows

  • Activation/désactivation depuis les paramètres
  • Clé registry : HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • Lancement silencieux à l'ouverture de session

Health monitoring

  • 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

Gestion des erreurs SMB

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)

🗃️ Modèle de données

Schéma relationnel

┌─────────────────┐       ┌─────────────────────┐       ┌─────────────────┐
│     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      │
└─────────────────┘

Entités

Server (Serveur SMB)

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

Share (Partage réseau)

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)

🔐 Sécurité

Authentification

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   │
│                                                            │
└────────────────────────────────────────────────────────────┘

Séparation des accès

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

🚀 Installation rapide

Prérequis

  • Windows 10/11 (64-bit)
  • Droits administrateur pour l'installation du serveur

Installation du serveur

  1. Télécharger SolidMount-Server-Setup-1.0.0.exe
  2. Exécuter en tant qu'administrateur
  3. Suivre l'assistant d'installation
  4. Le service démarre automatiquement
  5. Accéder à http://localhost:8080
  6. Se connecter : admin / admin
  7. ⚠️ Changer le mot de passe admin immédiatement

Installation du client

  1. Télécharger SolidMount-Client-Setup-1.0.0.exe
  2. Exécuter l'installateur
  3. Suivre l'assistant
  4. Lancer SolidMount depuis le bureau ou le menu démarrer
  5. Configurer l'URL du serveur dans les paramètres
  6. Se connecter avec ses identifiants

Emplacements des fichiers

Serveur

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

Client

C:\Program Files\SolidMount Client\
└── SolidMount.exe

%APPDATA%\SolidMount\
├── config.json          # Configuration locale
└── solidmount.log       # Log client

⚙️ Configuration

Serveur (config.yaml)

# 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

Client (config.json)

{
  "server_url": "http://192.168.1.100:8080",
  "last_username": "operator1",
  "auto_mount": true
}

📚 Documentation API

Authentification

Toutes les routes (sauf /health et /api/v1/auth/login) nécessitent un token JWT dans le header :

Authorization: Bearer <token>

Endpoints publics

Méthode Route Description
GET /health Health check (monitoring)
GET /api/v1/status Statut du serveur
POST /api/v1/auth/login Authentification

Endpoints authentifiés

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

Serveurs (admin)

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é

Credentials (admin)

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

Partages (admin)

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

Utilisateurs (admin)

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

Client (utilisateur)

Méthode Route Description
GET /api/v1/client/shares Partages de l'utilisateur connecté

Exemples de requêtes

Login

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"
    }
  ]
}

🔨 Développement

Prérequis développeur

Développement serveur

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

Développement client

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

Build des installateurs

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/

Tests manuels

  1. Serveur : Vérifier http://localhost:8080/health
  2. Admin : Se connecter à http://localhost:8080 avec admin/admin
  3. Client : Configurer l'URL serveur, se connecter, tester le montage

📁 Structure du projet

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

🛠️ Dépannage

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

  1. Vérifier que le serveur est accessible : http://SERVER_IP:8080/health
  2. Vérifier le pare-feu Windows (port 8080)
  3. Vérifier l'URL dans les paramètres du client
  4. Consulter %APPDATA%\SolidMount\solidmount.log

Les partages ne se montent pas

  1. Tester manuellement : net use Z: \\server\share /user:DOMAIN\user password
  2. Vérifier les credentials dans l'admin
  3. Vérifier les permissions de l'utilisateur
  4. 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

  1. Vérifier que vous n'avez pas cliqué "Quitter" dans les paramètres
  2. Vérifier qu'une seule instance tourne (tasklist | findstr SolidMount)
  3. Consulter les logs client

🗺️ Roadmap

Version 1.1 (Q1 2025)

  • Support HTTPS natif (sans reverse proxy)
  • Notifications toast Windows natives
  • Thème clair optionnel
  • Export/import de configuration

Version 1.2 (Q2 2025)

  • Signature numérique des installateurs
  • Mise à jour automatique du client (auto-update)
  • Support Active Directory / LDAP
  • Audit log des actions admin

Version 2.0 (2025)

  • Client macOS
  • Client Linux
  • API de monitoring (Prometheus/Grafana)
  • Interface admin mobile
  • Multi-tenancy

📄 Licence

Ce projet est distribué sous licence Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).

Vous êtes autorisé à :

  • 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.


👤 Auteur

Félix Abt
Développeur & Directeur Technique

🌐 Cairn Studios💼 LinkedIn🐙 GitHub


Fait avec ❤️ pour la communauté post-production

About

Solid, Reliable SMB Share Orchestration

Resources

License

Stars

Watchers

Forks

Packages

No packages published