# Mini-Cloud Selbstgehostete Web-Cloud-Plattform mit Dateiverwaltung, Kalender, Kontakte, E-Mail-Webclient, Office-Viewer und Passwort-Manager. ## Features - **Dateiverwaltung** - Upload/Download, Ordner, Berechtigungen, Share-Links (Passwort + Ablaufdatum) - **Kalender** - CalDAV-kompatibel (iOS, DAVx5, Thunderbird, Outlook), iCal-Export, Teilen mit Benutzern - **Kontakte** - CardDAV-kompatibel, vCard-Export, Adressbuecher teilen - **E-Mail-Webclient** - IMAP/SMTP-Proxy (kein eigener Mailserver), Multi-Account, Absender-Logik - **Office-Viewer** - DOCX, XLSX, PPTX, PDF direkt im Browser anzeigen - **Passwort-Manager** - AES-256-GCM clientseitig verschluesselt, TOTP, KeePass-Import, Ordner teilen - **Benutzerverwaltung** - Rollen (Admin/User), Speicher-Quotas - **Sync-API** - Delta-Sync fuer Desktop/Mobile-Clients ## Tech-Stack | Bereich | Technologie | |---------|------------| | Backend | Python / Flask | | Frontend | Vue 3 / Vite / PrimeVue | | Datenbank | SQLite (WAL-Modus) | | Auth | JWT (Web-UI) + HTTP Basic Auth (CalDAV/CardDAV) | ## Installation ### Voraussetzungen - Python 3.11+ - Node.js 18+ - npm ### Entwicklungsumgebung ```bash # Repository klonen git clone cd mini-cloud-datei-email-kalender-kontakte # .env anlegen cp .env.example .env # SECRET_KEY und JWT_SECRET_KEY generieren: python3 -c "import secrets; print(secrets.token_urlsafe(64))" # Generierte Werte in .env eintragen # Backend einrichten cd backend python3 -m venv venv source venv/bin/activate pip install -r requirements.txt # Backend starten python wsgi.py # -> laeuft auf http://localhost:5000 (nur API, nicht im Browser oeffnen) # Frontend einrichten (neues Terminal) cd frontend npm install # Frontend starten npm run dev # -> laeuft auf http://localhost:3100 ``` **Wichtig - Ports in der Entwicklung:** | Port | Dienst | Im Browser oeffnen? | |------|--------|---------------------| | `5000` | Backend (Flask API) | Nein - nur API, kein Frontend | | `3100` | Frontend (Vite Dev Server) | **Ja - hier arbeiten!** | Im Entwicklungsmodus immer `http://localhost:3100` im Browser oeffnen. Der Vite Dev Server leitet API-Aufrufe automatisch an Port 5000 weiter (Proxy in `vite.config.js`). In der **Docker-Produktion** laeuft alles auf einem einzigen Port (`5000`) - Backend liefert das gebaute Frontend direkt mit aus. Beim ersten Registrieren wird der Benutzer automatisch zum Admin. ### Docker (Produktion) ```bash # .env anlegen und Secrets eintragen cp .env.example .env # Starten docker-compose up --build -d # -> laeuft auf http://localhost:5000 ``` Die Datenbank und hochgeladene Dateien liegen unter `./data/` (Bind Mount, keine Docker Volumes). ## Verwendung ### Dateien - Dateien per Drag-and-Drop oder Upload-Button hochladen - Ordner erstellen, Dateien verschieben/umbenennen/loeschen - Share-Links erstellen: optional mit Passwort und Ablaufdatum - Share-Links funktionieren ohne Login fuer externe Empfaenger ### Kalender - Kalender erstellen, Events anlegen (Monats-/Tagesansicht) - Kalender mit anderen Benutzern teilen (Lesen oder Lesen+Schreiben) - iCal-Link generieren fuer Read-Only-Import in Google Calendar, Apple Kalender etc. - CalDAV-Zugriff fuer native Sync: - **iOS**: Einstellungen > Kalender > Accounts > Anderer > CalDAV - **Android (DAVx5)**: Server-URL: `https:///dav/` - **Thunderbird**: Neuer Kalender > Im Netzwerk > CalDAV - **Outlook (CalDAV-Synchronizer)**: Server-URL: `https:///dav/` ### Kontakte - Adressbuecher anlegen, Kontakte erstellen/bearbeiten - Adressbuecher mit anderen Benutzern teilen - vCard-Export fuer Backup - CardDAV-Zugriff analog zum Kalender ### E-Mail - E-Mail-Konten unter Einstellungen hinzufuegen (IMAP/SMTP-Zugangsdaten) - Kein eigener Mailserver noetig - verbindet sich mit externen Mailservern - Bei keinem konfigurierten Konto wird der E-Mail-Bereich ausgeblendet - Mehrere Konten: Ordner nach Konten gruppiert, Standard-Absender = aktives Konto - Absender-Dropdown nur sichtbar bei mehr als einem Konto ### Office-Viewer - DOCX, XLSX, PPTX und PDF direkt im Browser anzeigen (nur Lesen) - Bilder und Textdateien werden ebenfalls inline dargestellt ### Passwort-Manager - Alle Daten clientseitig mit AES-256-GCM verschluesselt (Zero Knowledge) - TOTP-Codes direkt generieren - Passwort-Generator integriert - KeePass-Import (.kdbx) mit Ordnerstruktur - Einzelne Passwoerter oder ganze Ordner mit anderen Benutzern teilen ## Projektstruktur ``` backend/ app/ api/ # REST-Endpunkte models/ # SQLAlchemy-Models services/ # Business-Logik (Crypto, etc.) dav/ # CalDAV/CardDAV (Radicale-Vorbereitung) wsgi.py # Einstiegspunkt frontend/ src/ views/ # Vue-Seiten components/ # Wiederverwendbare Komponenten stores/ # Pinia State Management api/ # Axios API-Client router/ # Vue Router data/ # Laufzeitdaten (gitignored) minicloud.db # SQLite-Datenbank files/ # Hochgeladene Dateien ``` ## Roadmap - Desktop Sync-Client (Windows, Linux, macOS) mit Full Sync + Virtual Files - Mobile Sync-Client (iOS, Android) mit On-Demand-Download - Native Passwort-Manager Clients mit Autofill und Biometrie - Radicale-Integration fuer vollstaendiges CalDAV/CardDAV-Protokoll ## Lizenz Privates Projekt.