b0rbor4d 5b447acd1c
Some checks failed
CI/CD Pipeline / Backend Tests (push) Failing after 27s
CI/CD Pipeline / Frontend Tests (push) Failing after 15s
CI/CD Pipeline / Docker Build (push) Has been skipped
CI/CD Pipeline / Security Scan (push) Has been skipped
Initial commit
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00
2026-04-15 01:41:49 +02:00

SAP Business One ↔ Plesk Synchronisations-Webapp

Eine Enterprise-Webapp zur automatischen Synchronisation zwischen SAP Business One (Systemhaus One) und Plesk Webservern für die Abrechnung von Verbrauchskosten.

📁 Projektstruktur

sap-sync-app/
├── backend/              # Rust Backend (Axum + Tokio)
│   ├── src/
│   │   ├── main.rs       # Entry Point
│   │   ├── config/       # Configuration Management
│   │   ├── db/           # Database Pool & Migrations
│   │   ├── handlers/     # API Endpoints
│   │   ├── models/       # Data Models
│   │   ├── routes/       # API Routes
│   │   ├── services/     # Business Logic
│   │   ├── utils/        # Utilities
│   │   └── state.rs      # Application State
│   ├── Cargo.toml        # Rust Dependencies
│   └── Dockerfile        # Backend Container
├── frontend/             # React Frontend (MUI)
│   ├── src/
│   │   ├── App.tsx       # Main Application
│   │   ├── components/   # React Components
│   │   ├── contexts/     # Auth & I18n Contexts
│   │   ├── pages/        # React Pages
│   │   └── main.tsx      # Entry Point
│   ├── package.json      # Node Dependencies
│   └── Dockerfile        # Frontend Container
├── database/
│   ├── init.sql          # PostgreSQL Schema
│   └── seeds/            # Seed Data
├── nginx/
│   └── nginx.conf        # Reverse Proxy Config
├── docker-compose.yml    # Multi-Service Setup
├── .env.example          # Environment Template
└── README.md             # This File

Features (Phase 1 & 2)

Authentication & Security

  • Session-based Auth: PostgreSQL Session Store
  • Password Policy: Min 8 chars, Groß-/Kleinbuchstaben, Ziffern, Sonderzeichen
  • Brute Force Protection: 5 fehlgeschlagene Versuche → 1 Stunde Lockout
  • CSRF Protection: Token-basiert (24h expiry)
  • MFA: Optional TOTP (Google Authenticator, Authy)
  • Secure Cookies: HTTP-only, Secure, SameSite Strict

SAP Integration

  • Service Layer API Client: REST API Verbindung
  • OAuth2 Authentication: Sichere Authentifizierung
  • Customer Management: Get, Create, Update
  • Item Management: Für Abonnements
  • Contract Management: Vertragsdaten
  • Connection Testing: Health Checks

Plesk Integration

  • REST API Client: Plesk API v2
  • Customer Management: CRUD Operations
  • Subscription Management: Webspaces, Domains
  • Usage Metrics: CPU, RAM, Disk, Bandwidth
  • Connection Testing: Health Checks

Sync Engine

  • Worker Pool: Tokio-basierte Parallelverarbeitung
  • Conflict Resolution: 4 Strategien (SAP First, Plesk First, Manual, Timestamp)
  • Bidirectional Sync: SAP ↔ Plesk
  • Progress Tracking: Echtzeit-Status
  • Error Handling: Retry Logic
  • Job Queue: Asynchrone Verarbeitung

Reports & Analytics

  • Revenue Report: Umsatzübersicht
  • Usage Report: Verbrauchsmetriken
  • Sync History: Synchronisations-Historie
  • Export: CSV, Excel (xlsx), PDF

Notifications

  • Email Notifications: SMTP (Lettre)
  • Webhooks: HTTP Callbacks
  • Dashboard Alerts: Real-time Status
  • Error Notifications: Bei Fehlern

Frontend

  • Dashboard: Übersicht, Status, Stats
  • Sync Control: Start, Stop, Monitor
  • Reports: Charts, Export
  • Settings: Profile, Security, Sync Config
  • Multi-Language: DE, FR, EN, SPA

Infrastructure

  • Docker Compose: Multi-Container Setup
  • Nginx: Reverse Proxy, SSL, Rate Limiting
  • PostgreSQL: Database
  • Redis: Caching
  • pgAdmin: Database Management UI
  • MailHog: SMTP Test Server

🛠 Tech Stack

Backend

  • Language: Rust 1.75+
  • Framework: Axum 0.7
  • Async Runtime: Tokio 1.35
  • Database: PostgreSQL 15 + sqlx 0.7
  • HTTP Client: reqwest 0.11
  • Auth: tower-session + PostgreSQL Store
  • Security: Argon2, CSRF, TOTP

Frontend

  • Framework: React 18
  • Build Tool: Vite 5
  • UI Library: Material UI 5.14
  • Routing: React Router 6
  • HTTP Client: Axios 1.6
  • Charts: Recharts 2.10
  • i18n: i18next 23

Infrastructure

  • Container: Docker 24+
  • Orchestration: Docker Compose
  • Proxy: Nginx Alpine
  • Database: PostgreSQL 15 Alpine
  • Cache: Redis 7 Alpine
  • Management: pgAdmin 4

🚀 Quick Start

1. Voraussetzungen

  • Docker 24.0+ installiert
  • Docker Compose 2.20+ installiert
  • Git installiert
  • Min. 4 GB RAM, 20 GB Speicher

2. Installation

# Repository klonen
git clone <repository-url>
cd sap-sync-app

# Umgebungsvariablen konfigurieren
cp .env.example .env
# .env mit echten Werten bearbeiten

# Alle Services starten
docker-compose up -d

# Logs überprüfen
docker-compose logs -f

3. Erste Schritte

# Admin-User erstellen (wird beim ersten Start automatisch erstellt)
# Default: username: admin, password: <generiert>

# Zugriff:
# Frontend:      http://localhost:3000
# Backend API:   http://localhost:3001/api
# pgAdmin:       http://localhost:8080
# MailHog:       http://localhost:8025

4. SAP & Plesk konfigurieren

  1. SAP Service Layer:

    • URL und Credentials in .env eintragen
    • APP__SAP__URL und APP__SAP__CREDENTIALS
  2. Plesk API:

    • API Key generieren in Plesk
    • In .env eintragen: APP__PLESK__API_KEY
  3. Sync konfigurieren:

    • Frontend öffnen → Settings → Sync Settings
    • Default Direction wählen
    • Conflict Resolution festlegen

📊 API Endpoints

Authentication

POST   /api/auth/login              # Login
POST   /api/auth/logout             # Logout
GET    /api/auth/me                 # Current User
POST   /api/auth/change-password    # Change Password
GET    /api/auth/csrf-token         # Get CSRF Token

Sync Management

GET    /api/sync/status             # Sync Status
POST   /api/sync/start              # Start Sync
POST   /api/sync/stop               # Stop Sync
GET    /api/sync/jobs               # List Jobs
GET    /api/sync/jobs/:id           # Job Details

Configuration

GET    /api/config                  # Get Config
PUT    /api/config                  # Update Config

Reports

GET    /api/reports/revenue         # Revenue Report
GET    /api/reports/usage           # Usage Report
GET    /api/reports/sync-history    # Sync History
GET    /api/reports/export/:format  # Export (csv/xlsx/pdf)

Health & Monitoring

GET    /api/health                  # Overall Health
GET    /api/health/sap              # SAP Connection
GET    /api/health/plesk            # Plesk Connection

Notifications

GET    /api/notifications           # List Notifications
PUT    /api/notifications/:id/read  # Mark as Read
POST   /api/webhooks                # Create Webhook
GET    /api/webhooks                # List Webhooks

🔧 Konfiguration

.env Beispiel

# Database
DB_PASSWORD=your_secure_password
DATABASE_URL=postgresql://sap_user:${DB_PASSWORD}@pgsql:5432/sap_sync

# Backend
APP__SERVER__HOST=0.0.0.0
APP__SERVER__PORT=3001
APP__SESSION__SECURE=false
APP__MFA__ENABLED=true

# SAP Connection
APP__SAP__URL=https://sap-server:50000/b1s/v1
APP__SAP__COMPANY_DB=SBODemoDE
APP__SAP__USERNAME=manager
APP__SAP__PASSWORD=manager

# Plesk Connection
APP__PLESK__URL=https://plesk-server:8443/api/v2
APP__PLESK__API_KEY=your-api-key

# Email (SMTP)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your_email@gmail.com
SMTP_PASSWORD=your_app_password
SMTP_FROM=noreply@sap-sync.local

# Frontend
VITE_API_URL=http://localhost:3001/api

🗄️ Datenbank-Schema

Haupttabellen

  • users: Admin-Benutzer
  • sessions: Session Management
  • customers: SAP ↔ Plesk Customer Mapping
  • subscriptions: Abonnements/Verträge
  • usage_metrics: Verbrauchsdaten
  • sync_jobs: Sync-Jobs Queue
  • sync_logs: Synchronisations-Logs
  • notifications: Benachrichtigungen
  • webhooks: Webhook-Konfiguration
  • config: System-Konfiguration

Erweiterte Features

  • JSONB Columns: Flexible Datenspeicherung
  • GIN/GIST Indexes: Schnelle JSON-Suche
  • Materialized Views: Dashboard Performance
  • Triggers: Automatische Timestamps
  • Full-text Search: Kunden-Suche

🔒 Sicherheit

Password Policy

  • Min 8 Zeichen
  • Min 1 Großbuchstabe (A-Z)
  • Min 1 Kleinbuchstabe (a-z)
  • Min 1 Ziffer (0-9)
  • Min 1 Sonderzeichen (!@#$%&*)

Session Security

  • HTTP-only Cookies
  • Secure Flag (HTTPS)
  • SameSite Strict
  • 30 Minuten Expiry
  • Remember Me (7 Tage)

Rate Limiting

  • General API: 10 req/s
  • Auth Endpoints: 5 req/min
  • Nginx Built-in

📈 Performance

Backend

  • Async Rust (Tokio)
  • Connection Pooling (sqlx)
  • Worker Pool (Sync Engine)
  • JSONB Queries (PostgreSQL)

Frontend

  • React 18 (Concurrent Rendering)
  • Vite (Fast Build)
  • Code Splitting
  • Lazy Loading

🧪 Testing

# Backend Tests
cd backend
cargo test

# Frontend Tests
cd frontend
npm test

# Integration Tests
docker-compose -f docker-compose.test.yml up

📦 Production Deployment

Plesk Deployment

  1. Docker auf Plesk Server:

    # Docker installieren
    curl -fsSL https://get.docker.com | bash
    
    # Repository klonen
    git clone <repo> /opt/sap-sync
    cd /opt/sap-sync
    
  2. SSL Zertifikate:

    # Certbot für Let's Encrypt
    certbot certonly --standalone -d your-domain.com
    
    # Zertifikate kopieren
    cp /etc/letsencrypt/live/your-domain.com/fullchain.pem nginx/ssl/cert.pem
    cp /etc/letsencrypt/live/your-domain.com/privkey.pem nginx/ssl/key.pem
    
  3. Environment konfigurieren:

    cp .env.example .env
    # .env bearbeiten mit Production-Werten
    
  4. Services starten:

    docker-compose up -d
    
  5. Plesk Proxy:

    • Nginx Proxy in Plesk konfigurieren
    • Domain → Apache & nginx Settings → Additional nginx directives
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    

🐛 Troubleshooting

Backend startet nicht

# Logs prüfen
docker-compose logs backend

# Database Connection testen
docker-compose exec backend psql $DATABASE_URL -c "SELECT 1"

Frontend Build Fehler

# Dependencies neu installieren
cd frontend
rm -rf node_modules package-lock.json
npm install
npm run build

SAP/Plesk Connection Failed

# Connection testen
curl -X GET http://localhost:3001/api/health/sap
curl -X GET http://localhost:3001/api/health/plesk

# Credentials prüfen
docker-compose exec backend env | grep SAP
docker-compose exec backend env | grep PLESK

📝 Development

Backend Development

cd backend

# Rust installieren (falls nicht vorhanden)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Cargo Watch für Hot Reload
cargo install cargo-watch
cargo watch -x run

# Tests
cargo test

Frontend Development

cd frontend

# Dependencies
npm install

# Dev Server
npm run dev

# Build
npm run build

📄 License

MIT License - siehe LICENSE Datei

🤝 Contributing

  1. Fork erstellen
  2. Feature Branch (git checkout -b feature/AmazingFeature)
  3. Committen (git commit -m 'Add some AmazingFeature')
  4. Push (git push origin feature/AmazingFeature)
  5. Pull Request öffnen

📞 Support


Erstellt mit ❤️ für Enterprise SAP ↔ Plesk Synchronisation

Description
SAP-PLEX-SYNC Project
Readme 666 KiB
Languages
TypeScript 55.4%
Rust 38.3%
PLpgSQL 5.8%
Dockerfile 0.3%
HTML 0.1%