# Nextcloud-modul – BMC Hub ## 1. Formål og rolle i Hubben Nextcloud-modulet gør det muligt at sælge, administrere og supportere kunders Nextcloud‑løsninger direkte i Hubben. Hubben er styrende system. Nextcloud er et eksternt drifts‑ og brugersystem, som Hubben taler med direkte (ingen gateway). ## 2. Aktivering af modulet Modulet er kontekstbaseret og aktiveres via tag: - Når Firma, Kontakt eller Sag har tagget `nextcloud`, vises en Nextcloud‑fane i UI. - Uden tag vises ingen Nextcloud‑funktioner. ## 3. Kunde → Nextcloud‑fane (overblik) Fanen indeholder: 1. Drifts‑ og systeminformation (read‑only) 2. Handlinger relateret til brugere 3. Historik (hvad Hubben har gjort mod instansen) Fanen må aldrig blokere kundevisningen, selv hvis Nextcloud er utilgængelig. ## 4. Systemstatus og driftsinformation **Datakilde**: Nextcloud Serverinfo API - `GET /ocs/v2.php/apps/serverinfo/api/v1/info` - Direkte kald til Nextcloud - Autentificeret - Read‑only - Cached i DB med global TTL = 5 min ### 4.1 Overblik Vises øverst i fanen: - Instans‑status (Online / Offline / Ukendt) - Sidst opdateret - Nextcloud‑version - PHP‑version - Database‑type og ‑version ### 4.2 Ressourceforbrug Vises som simple værdier/badges: - CPU - Load average (1 / 5 / 15 min) - Antal kerner - RAM (total + brug i %) - Disk (total + brug i % + fri plads) Ved kritiske værdier vises advarsel. ### 4.3 Nextcloud‑nøgletal Hvor API tillader det: - Antal brugere - Aktive brugere - Antal filer - Samlet datamængde - Status på: database, cache/Redis, cron/background jobs ## 5. Handlinger i Nextcloud‑fanen Knapper: - Tilføj ny bruger - Reset password - Luk bruger - Gensend guide Alle handlinger: - udføres direkte mod Nextcloud - logges i Hub - kan spores i historik - kan knyttes til sag ## 6. Tilføj ny bruger (primær funktion) ### 6.1 Start af flow - Ved “Tilføj ny bruger” oprettes automatisk en ny Sag - Sagstype: **Nextcloud – Brugeroprettelse** - Ingen Nextcloud‑handling udføres uden en sag ### 6.2 Sag – felter og logik **Firma** - Vælg eksisterende firma - Hub slår tilknyttet Nextcloud‑instans op i DB og vælger automatisk - Instans kan ikke ændres manuelt **Kontaktperson** - Vælg eksisterende kontakt eller opret ny - Bruges til kommunikation, velkomstmail og ejerskab af sag **Grupper** - Multiselect - Hentes live fra Nextcloud (OCS groups API) - Kun gyldige grupper kan vælges **Velkomstbrev** - Checkbox: skal velkomstbrev sendes? - Hvis ja: bruger oprettes, password genereres, guide + logininfo sendes - Hvis nej: bruger oprettes uden mail, sag forbliver åben til manuel opfølgning ## 7. Øvrige handlinger **Reset password** - Vælg eksisterende Nextcloud‑bruger - Nyt password genereres - Valg: send mail til kontakt eller kun log i sag **Luk bruger** - Bruger deaktiveres i Nextcloud - Data bevares - Kræver eksplicit bekræftelse - Logges i sag og historik **Gensend guide** - Gensender velkomstmail og guide - Password ændres ikke - Kan udføres uden ny sag, men logges ## 8. Arkitekturprincipper - Hub ejer: firma, kontakt, sag, historik - Nextcloud ejer: brugere, filer, rettigheder - Integration er direkte (ingen gateway) - Per‑instans auth ligger krypteret i DB - Global DB‑cache (5 min) for read‑only statusdata ## 9. Logning og sporbarhed For hver handling gemmes: - tidspunkt - handlingstype - udførende bruger - mål (bruger/instans) - teknisk resultat (success/fejl) Audit‑log er **separat pr. kunde**, med **manuel retention** og **tidsbaseret partitionering**. ## 10. Afgrænsninger (v1) Modulet indeholder ikke: - ændring af server‑konfiguration - håndtering af apps - ændring af kvoter - direkte admin‑login ## 11. Klar til udvidelse Modulet er designet til senere udvidelser: - overvågning → automatisk sag - historiske grafer - offboarding‑flows - kvote‑styring - SLA‑rapportering ## 12. Sikkerhed og drift - Credentials krypteres med `settings.NEXTCLOUD_ENCRYPTION_KEY` - Safety switches: `NEXTCLOUD_READ_ONLY` og `NEXTCLOUD_DRY_RUN` (default true) - Ingen credentials i UI eller logs - TLS‑only base URLs ## 13. Backend‑struktur (plan) Placering: `app/modules/nextcloud/` - `backend/router.py` - `backend/service.py` - `backend/models.py` Alle eksterne kald går via service‑laget, som: - loader instans fra DB - dekrypterer credentials - bruger global DB‑cache (5 min) - skriver audit‑log pr. kunde ## 14. Database‑model (plan) ### `nextcloud_instances` - `customer_id` FK - `base_url` - `auth_type` - `username` - `password_encrypted` - `is_enabled`, `disabled_at` - `created_at`, `updated_at`, `deleted_at` ### `nextcloud_cache` - `cache_key` (PK) - `payload` (JSONB) - `expires_at` - `created_at` ### `nextcloud_audit_log` - `customer_id`, `instance_id` - `event_type` - `request_meta`, `response_meta` - `actor_user_id` - `created_at` Partitionering: månedlig range på `created_at`. Retention er manuel via admin‑UI. ## 15. API‑endpoints (v1) ### Instanser (admin) - `GET /api/v1/nextcloud/instances` - `POST /api/v1/nextcloud/instances` - `PATCH /api/v1/nextcloud/instances/{id}` - `POST /api/v1/nextcloud/instances/{id}/disable` - `POST /api/v1/nextcloud/instances/{id}/enable` - `POST /api/v1/nextcloud/instances/{id}/rotate-credentials` ### Status + grupper - `GET /api/v1/nextcloud/instances/{id}/status` - `GET /api/v1/nextcloud/instances/{id}/groups` ### Brugere (handlinger) - `POST /api/v1/nextcloud/instances/{id}/users` (opret) - `POST /api/v1/nextcloud/instances/{id}/users/{uid}/reset-password` - `POST /api/v1/nextcloud/instances/{id}/users/{uid}/disable` - `POST /api/v1/nextcloud/instances/{id}/users/{uid}/resend-guide` Alle endpoints skal: - validere `is_enabled = true` - håndhæve kundeejerskab - skrive audit‑log - respektere `READ_ONLY`/`DRY_RUN` ## 16. UI‑krav (plan) Nextcloud‑fanen i kundevisning skal vise: - Systemstatus - Nøgletal - Handlinger - Historik Admin‑UI (Settings) skal give: - Liste over instanser - Enable/disable - Rotation af credentials - Retentionstyring af audit‑log pr. kunde ## 17. Migrations (plan) 1. `migrations/0XX_nextcloud_instances.sql` 2. `migrations/0XX_nextcloud_cache.sql` 3. `migrations/0XX_nextcloud_audit_log.sql` (partitioneret) ## 18. Næste skridt 1. Opret migrationsfiler 2. Implementer kryptering helper 3. Implementer service‑lag 4. Implementer routere og schemas 5. Implementer UI‑fanen + admin‑UI 6. Implementer audit‑log viewer/export