You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

702 lines
18 KiB

# 🚀 Git Pusher for Splunk
**Version 2.0** | Application Splunk pour déployer vos applications vers Git
---
## 📋 Table des matières
- [Présentation](#-présentation)
- [Fonctionnalités](#-fonctionnalités)
- [Architecture](#-architecture)
- [Installation](#-installation)
- [Configuration](#-configuration)
- [Configuration HTTPS](#-configuration-https)
- [Système de Licence](#-système-de-licence)
- [Utilisation](#-utilisation)
- [Sécurité](#-sécurité)
- [Personnalisation du Dashboard](#-personnalisation-du-dashboard)
- [Dépannage](#-dépannage)
- [API Reference](#-api-reference)
- [Changelog](#-changelog)
- [Support](#-support)
---
## 🎯 Présentation
**Git Pusher** est une application Splunk Enterprise qui permet de versionner et déployer vos applications Splunk vers un repository Git en quelques clics.
Idéal pour :
- 📦 Sauvegarder vos configurations Splunk
- 🔄 Versionner vos dashboards et applications
- 👥 Collaborer en équipe sur les développements Splunk
- 🚀 Mettre en place un workflow CI/CD pour Splunk
---
## ✨ Fonctionnalités
| Fonctionnalité | Description |
|----------------|-------------|
| **Push vers Git** | Déployez une ou plusieurs applications Splunk vers votre repository Git |
| **Interface moderne** | Dashboard intuitif avec sélection visuelle des applications |
| **Multi-repository** | Support de GitHub, GitLab, Gitea, Bitbucket et tout serveur Git |
| **Support HTTPS** | Communication sécurisée avec certificats SSL |
| **Système de licence** | Gestion par fichier `.lic` sécurisé |
| **Credentials sécurisés** | Chiffrement des mots de passe Splunk |
| **Logs détaillés** | Traçabilité complète des opérations |
---
## 🏗 Architecture
```
pusher_app_prem/
├── bin/
│ ├── git_pusher.py # Serveur HTTP/HTTPS principal (port 9999)
│ ├── license_validator.py # Validation des licences
│ ├── license_generator.py # Génération des licences (vendeur)
│ ├── credentials_manager.py # Gestion sécurisée des credentials
│ └── start_git_pusher.sh # Script de démarrage
├── appserver/static/
│ ├── git_pusher.js # Logique JavaScript principale
│ └── license_validation.js # Interface de gestion des licences
├── default/data/ui/views/
│ └── git_pusher_-_deploy_applications.xml # Dashboard principal
├── local/
│ ├── license.lic # Fichier de licence (après activation)
│ ├── .credentials # Credentials chiffrés
│ ├── .key # Clé de chiffrement
│ └── certs/ # Certificats SSL
│ ├── server.crt
│ └── server.key
└── README.md
```
### Flux de données
```
┌─────────────────┐ ┌────────────────────┐ ┌─────────────┐
│ Splunk │────▶│ Git Pusher │────▶│ Git Repo │
│ Dashboard │ │ Server:9999 │ │ (Remote) │
│ (HTTPS) │ │ (HTTP/HTTPS) │ │ │
└─────────────────┘ └────────────────────┘ └─────────────┘
┌──────┴──────┐
│ /opt/splunk/etc/apps/ │
│ (Applications locales)│
└─────────────────────┘
```
---
## 📥 Installation
### Prérequis
- Splunk Enterprise 8.x ou supérieur
- Python 3.7+
- Git installé sur le serveur (`yum install git` ou `apt install git`)
- OpenSSL (pour la génération des certificats HTTPS)
- Accès réseau vers votre repository Git
### Étapes d'installation
#### 1. Extraire l'application
```bash
# Copier l'application dans Splunk
cp -r pusher_app_prem /opt/splunk/etc/apps/
# Définir les permissions
chown -R splunk:splunk /opt/splunk/etc/apps/pusher_app_prem
chmod +x /opt/splunk/etc/apps/pusher_app_prem/bin/*.sh
```
#### 2. Configurer les credentials Splunk
```bash
cd /opt/splunk/etc/apps/pusher_app_prem/bin/
./start_git_pusher.sh credentials setup
```
```
==================================================
Git Pusher - Credentials Setup
==================================================
Splunk Username [admin]: admin
Splunk Password: ********
Confirm Password: ********
✓ Credentials saved securely!
```
#### 3. Configurer HTTPS (si Splunk est en HTTPS)
Voir la section [Configuration HTTPS](#-configuration-https).
#### 4. Démarrer le serveur Git Pusher
```bash
./start_git_pusher.sh start
```
#### 5. Ouvrir le firewall (si nécessaire)
```bash
# FirewallD
sudo firewall-cmd --add-port=9999/tcp --permanent
sudo firewall-cmd --reload
# UFW
sudo ufw allow 9999/tcp
```
#### 6. Redémarrer Splunk
```bash
/opt/splunk/bin/splunk restart
```
#### 7. Accéder au dashboard
Ouvrez votre navigateur et allez sur :
```
http://VOTRE_IP_SPLUNK:8000/app/pusher_app_prem/git_pusher_-_deploy_applications
```
Ou en HTTPS :
```
https://VOTRE_IP_SPLUNK:8000/app/pusher_app_prem/git_pusher_-_deploy_applications
```
---
## ⚙️ Configuration
### Commandes du script de gestion
```bash
# Démarrer le serveur
./start_git_pusher.sh start
# Arrêter le serveur
./start_git_pusher.sh stop
# Redémarrer le serveur
./start_git_pusher.sh restart
# Voir le statut
./start_git_pusher.sh status
# Voir les logs
./start_git_pusher.sh logs
./start_git_pusher.sh logs -f # Mode follow
# Gestion des credentials
./start_git_pusher.sh credentials setup
./start_git_pusher.sh credentials status
./start_git_pusher.sh credentials delete
```
### Variables d'environnement (optionnel)
Si vous préférez ne pas utiliser le credentials manager :
```bash
export SPLUNK_USERNAME=admin
export SPLUNK_PASSWORD=your_password
export SPLUNK_HOME=/opt/splunk
```
### Fichiers de configuration
| Fichier | Description |
|---------|-------------|
| `local/license.lic` | Fichier de licence |
| `local/.credentials` | Credentials Splunk chiffrés |
| `local/.key` | Clé de chiffrement (générée automatiquement) |
| `local/certs/server.crt` | Certificat SSL |
| `local/certs/server.key` | Clé privée SSL |
---
## 🔒 Configuration HTTPS
Si votre Splunk est configuré en HTTPS, le serveur Git Pusher doit également être en HTTPS pour éviter les erreurs "Mixed Content" du navigateur.
### 1. Générer les certificats SSL
```bash
# Créer le dossier des certificats
mkdir -p /opt/splunk/etc/apps/pusher_app_prem/local/certs
# Générer un certificat auto-signé (valide 365 jours)
openssl req -x509 -newkey rsa:4096 \
-keyout /opt/splunk/etc/apps/pusher_app_prem/local/certs/server.key \
-out /opt/splunk/etc/apps/pusher_app_prem/local/certs/server.crt \
-days 365 -nodes -subj "/CN=git-pusher"
# Définir les permissions
chmod 600 /opt/splunk/etc/apps/pusher_app_prem/local/certs/server.key
chown -R splunk:splunk /opt/splunk/etc/apps/pusher_app_prem/local/certs/
```
### 2. Redémarrer le serveur
```bash
./start_git_pusher.sh restart
```
### 3. Vérifier que HTTPS fonctionne
```bash
curl -k https://127.0.0.1:9999/health
```
Vous devriez voir :
```json
{"status": "ok", "service": "git_pusher", "timestamp": "..."}
```
### 4. Accepter le certificat dans le navigateur
Comme le certificat est auto-signé, le navigateur ne lui fait pas confiance par défaut.
1. Ouvrez un nouvel onglet
2. Allez sur : `https://VOTRE_IP_SPLUNK:9999/health`
3. Cliquez sur **"Avancé"** puis **"Accepter le risque et continuer"**
4. Retournez sur le dashboard Splunk et rafraîchissez (Ctrl+Shift+R)
### 5. (Optionnel) Désactiver HTTPS
Si vous souhaitez forcer le mode HTTP :
```bash
cd /opt/splunk/etc/apps/pusher_app_prem/bin/
python3 git_pusher.py --no-ssl
```
### Vérification dans les logs
```bash
tail -20 /opt/splunk/var/log/splunk/git_pusher.log
```
Vous devriez voir :
```
SSL enabled using: /opt/splunk/etc/apps/pusher_app_prem/local/certs/server.crt
Git Pusher server listening on 0.0.0.0:9999 (HTTPS)
```
---
## 🔐 Système de Licence
Git Pusher utilise un système de licence par fichier `.lic` pour activer les fonctionnalités.
### Types de licences
| Type | Durée | Apps max | Pushes/jour | Fonctionnalités |
|------|-------|----------|-------------|-----------------|
| **Trial** | 14 jours | 3 | 5 | Push basique |
| **Starter** | 1 an | 10 | 50 | + Push programmé |
| **Professional** | 1 an | Illimité | Illimité | + Multi-repo, Support prioritaire |
| **Enterprise** | 1 an | Illimité | Illimité | + Branding personnalisé, API |
### Obtenir une licence
1. **Récupérer votre hostname Splunk**
- Visible dans le dashboard Git Pusher lors de l'activation
- Ou via la commande : `hostname`
2. **Contacter le support** avec :
- Votre hostname Splunk
- Votre email
- Le type de licence souhaité
3. **Recevoir votre fichier `.lic`**
4. **Activer la licence**
- Ouvrir le dashboard Git Pusher
- Glisser-déposer le fichier `.lic`
- Cliquer sur "Activer"
### Structure du fichier de licence
```
# =============================================
# Git Pusher License File
# =============================================
# Customer: Acme Corp
# Email: admin@acme.com
# Type: Professional
# Hostname: splunk-prod-01
# Expires: 2026-01-30
# License ID: A1B2C3D4E5F6
# =============================================
# DO NOT MODIFY THIS FILE
# =============================================
eyJsaWNlbnNlIjogey4uLn0sICJzaWduYXR1cmUiOiAiLi4uIn0=
# =============================================
# END OF LICENSE
# =============================================
```
### Génération de licences (Vendeur uniquement)
```bash
# Mode interactif
python3 license_generator.py
# Mode rapide
python3 license_generator.py quick "Client Name" "email@client.com" "hostname" "professional"
# Valider une licence
python3 license_generator.py validate
```
---
## 📖 Utilisation
### Pousser des applications vers Git
1. **Ouvrir le dashboard** Git Pusher
2. **Configurer Git**
- **Repository URL** : `https://github.com/user/repo.git` ou `https://gitlab.com/user/repo.git`
- **Branch** : `main`, `master`, ou votre branche
- **Token** : Personal Access Token avec droits `write`
3. **Sélectionner les applications**
- Cocher les applications à déployer
- Utiliser "Select All" pour tout sélectionner
4. **Écrire le message de commit**
- Décrivez les changements effectués
5. **Cliquer sur "Deploy to Git"**
### Obtenir un token Git
#### GitHub
1. Settings → Developer settings → Personal access tokens → Tokens (classic)
2. Generate new token
3. Cocher : `repo` (Full control)
#### GitLab
1. Preferences → Access Tokens
2. Create personal access token
3. Scopes : `write_repository`
#### Gitea
1. Settings → Applications → Generate New Token
2. Permissions : `repository: write`
---
## 🔒 Sécurité
### Credentials Splunk
Les credentials Splunk sont :
- **Chiffrés** avec une clé dérivée de l'ID machine
- **Stockés** dans un fichier avec permissions `600`
- **Jamais visibles** en clair dans les logs ou scripts
```bash
# Les credentials sont stockés ici (chiffrés)
/opt/splunk/etc/apps/pusher_app_prem/local/.credentials
# La clé de chiffrement (unique par machine)
/opt/splunk/etc/apps/pusher_app_prem/local/.key
```
### Communication HTTPS
- Le serveur Git Pusher supporte HTTPS avec certificats SSL
- Les certificats auto-signés sont supportés
- Communication chiffrée entre le navigateur et le serveur
### Token Git
- Le token Git n'est **jamais stocké** sur le serveur
- Il est transmis uniquement lors de l'opération de push
- Option "Save credentials" stocke en localStorage du navigateur (encodé)
### Licence
- Signature HMAC-SHA256 anti-falsification
- Binding au hostname Splunk
- Vérification de l'expiration
### Recommandations
1. ✅ Utiliser HTTPS pour Splunk et Git Pusher
2. ✅ Utiliser des tokens Git avec permissions minimales
3. ✅ Renouveler les tokens régulièrement
4. ✅ Utiliser HTTPS pour les repositories Git
5. ✅ Restreindre l'accès au dashboard aux administrateurs
---
## 🎨 Personnalisation du Dashboard
### Masquer les boutons d'édition
Pour empêcher la modification du dashboard par les utilisateurs, éditez le fichier XML :
```bash
nano /opt/splunk/etc/apps/pusher_app_prem/default/data/ui/views/git_pusher_-_deploy_applications.xml
```
Modifiez la première ligne :
```xml
<dashboard version="1.1" script="license_validation.js, git_pusher.js" hideEdit="true" hideExport="true">
```
### Options disponibles
| Attribut | Description |
|----------|-------------|
| `hideEdit="true"` | Masque le bouton "Modifier" |
| `hideExport="true"` | Masque le bouton "Exporter" |
| `hideTitle="true"` | Masque le titre du dashboard |
| `hideSplunkBar="true"` | Masque la barre Splunk en haut |
| `hideAppBar="true"` | Masque la barre de l'application |
| `hideFooter="true"` | Masque le footer |
### Appliquer les changements
```bash
rm -rf /opt/splunk/var/run/splunk/appserver/*
/opt/splunk/bin/splunk restart
```
---
## 🔧 Dépannage
### Le serveur ne démarre pas
```bash
# Vérifier les logs
tail -f /opt/splunk/var/log/splunk/git_pusher.log
# Vérifier si le port est utilisé
ss -tlnp | grep 9999
# Vérifier les permissions
ls -la /opt/splunk/etc/apps/pusher_app_prem/bin/
```
### Erreur "Connexion refusée"
```bash
# Vérifier que le serveur tourne
ps aux | grep git_pusher
# Vérifier le firewall
sudo firewall-cmd --list-ports
# Ouvrir le port
sudo firewall-cmd --add-port=9999/tcp --permanent
sudo firewall-cmd --reload
```
### Erreur CORS
Les fichiers JavaScript doivent utiliser l'adresse IP du serveur automatiquement.
Vérifier :
```bash
head -10 /opt/splunk/etc/apps/pusher_app_prem/appserver/static/license_validation.js
```
Doit contenir :
```javascript
const LICENSE_API_URL = window.location.protocol + '//' + window.location.hostname + ':9999';
```
### Erreur CORS avec HTTPS
Si vous voyez une erreur CORS avec HTTPS et un certificat auto-signé :
1. Ouvrez `https://VOTRE_IP:9999/health` dans un nouvel onglet
2. Acceptez le certificat
3. Retournez sur Splunk et rafraîchissez
### Erreur SSL "wrong version number"
Le serveur n'a pas activé SSL. Vérifiez :
```bash
# Les certificats existent-ils ?
ls -la /opt/splunk/etc/apps/pusher_app_prem/local/certs/
# Les logs montrent-ils SSL enabled ?
grep -i ssl /opt/splunk/var/log/splunk/git_pusher.log
```
Si les certificats n'existent pas, créez-les (voir section HTTPS).
### Les applications ne sont pas poussées
```bash
# Vérifier les logs
tail -50 /opt/splunk/var/log/splunk/git_pusher.log
# Tester manuellement
curl -k https://localhost:9999/health
```
### Erreur de licence
```bash
# Vérifier le hostname
hostname
# Vérifier la licence
python3 /opt/splunk/etc/apps/pusher_app_prem/bin/license_validator.py status
```
### Les boutons ne fonctionnent pas
Vérifiez la console du navigateur (F12). Si les fonctions ne sont pas définies, videz le cache :
```bash
rm -rf /opt/splunk/var/run/splunk/appserver/*
/opt/splunk/bin/splunk restart
```
Puis dans le navigateur : **Ctrl+Shift+R**
### Vider le cache Splunk
```bash
rm -rf /opt/splunk/var/run/splunk/appserver/*
/opt/splunk/bin/splunk restart
```
---
## 📡 API Reference
### Endpoints
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| `GET` | `/health` | Health check |
| `GET` | `/license` | Statut de la licence |
| `GET` | `/license/hostname` | Hostname Splunk |
| `POST` | `/license/upload` | Uploader une licence |
| `POST` | `/push` | Pousser les applications |
### Exemple : Health Check
```bash
curl -k https://localhost:9999/health
```
```json
{
"status": "ok",
"service": "git_pusher",
"timestamp": "2026-01-31T12:00:00.000000"
}
```
### Exemple : Statut de licence
```bash
curl -k https://localhost:9999/license
```
```json
{
"status": "valid",
"hostname": "splunk-server",
"license": {
"license_id": "A1B2C3D4E5F6",
"type": "professional",
"type_name": "Professional",
"expires": "2027-01-30",
"days_remaining": 365
}
}
```
### Exemple : Push
```bash
curl -k -X POST "https://localhost:9999/push?git_url=https://github.com/user/repo.git&git_branch=main&git_token=TOKEN&commit_message=Update&apps=[{\"id\":\"my_app\"}]&user=admin"
```
```json
{
"status": "success",
"message": "Successfully pushed 1 application(s) to Git",
"apps_pushed": 1,
"license_type": "Professional"
}
```
---
## 📝 Changelog
### Version 2.0.0 (Février 2026)
- ✨ Nouveau système de licence par fichier `.lic`
- 🔐 Credentials Splunk chiffrés
- 🔒 Support HTTPS avec certificats SSL
- 🎨 Interface utilisateur modernisée
- 📊 Badge de licence en temps réel
- 🔧 Script de gestion amélioré
- 🛡️ Options pour masquer les boutons d'édition du dashboard
- 📝 Logs détaillés
- 🐛 Correction des problèmes CORS
### Version 1.0.0
- 🚀 Version initiale
- Push d'applications vers Git
- Interface basique
---
## 📞 Support
### Obtenir de l'aide
- 📧 Email : support@gitpusher.com
- 🌐 Site web : https://gitpusher.com
- 📖 Documentation : https://docs.gitpusher.com
### Signaler un bug
Incluez dans votre rapport :
1. Version de Git Pusher
2. Version de Splunk
3. Configuration (HTTP/HTTPS)
4. Logs (`/opt/splunk/var/log/splunk/git_pusher.log`)
5. Erreurs de la console navigateur (F12)
6. Étapes pour reproduire le problème
---
## 📄 Licence
Git Pusher est un logiciel propriétaire. Une licence valide est requise pour son utilisation.
© 2026 Git Pusher - Tous droits réservés
---
<p align="center">
Made with ❤️ for Splunk administrators
</p>