bmc_hub/NEXTCLOUD_MODULE_PLAN.md

241 lines
6.4 KiB
Markdown
Raw Normal View History

# Nextcloud-modul BMC Hub
## 1. Formål og rolle i Hubben
Nextcloud-modulet gør det muligt at sælge, administrere og supportere kunders Nextcloudlø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 Nextcloudfane i UI.
- Uden tag vises ingen Nextcloudfunktioner.
## 3. Kunde → Nextcloudfane (overblik)
Fanen indeholder:
1. Drifts og systeminformation (readonly)
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
- Readonly
- Cached i DB med global TTL = 5 min
### 4.1 Overblik
Vises øverst i fanen:
- Instansstatus (Online / Offline / Ukendt)
- Sidst opdateret
- Nextcloudversion
- PHPversion
- Databasetype 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 Nextcloudnø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 Nextcloudfanen
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 Nextcloudhandling udføres uden en sag
### 6.2 Sag felter og logik
**Firma**
- Vælg eksisterende firma
- Hub slår tilknyttet Nextcloudinstans 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 Nextcloudbruger
- 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)
- Perinstans auth ligger krypteret i DB
- Global DBcache (5 min) for readonly statusdata
## 9. Logning og sporbarhed
For hver handling gemmes:
- tidspunkt
- handlingstype
- udførende bruger
- mål (bruger/instans)
- teknisk resultat (success/fejl)
Auditlog er **separat pr. kunde**, med **manuel retention** og **tidsbaseret partitionering**.
## 10. Afgrænsninger (v1)
Modulet indeholder ikke:
- ændring af serverkonfiguration
- håndtering af apps
- ændring af kvoter
- direkte adminlogin
## 11. Klar til udvidelse
Modulet er designet til senere udvidelser:
- overvågning → automatisk sag
- historiske grafer
- offboardingflows
- kvotestyring
- SLArapportering
## 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
- TLSonly base URLs
## 13. Backendstruktur (plan)
Placering: `app/modules/nextcloud/`
- `backend/router.py`
- `backend/service.py`
- `backend/models.py`
Alle eksterne kald går via servicelaget, som:
- loader instans fra DB
- dekrypterer credentials
- bruger global DBcache (5 min)
- skriver auditlog pr. kunde
## 14. Databasemodel (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 adminUI.
## 15. APIendpoints (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 auditlog
- respektere `READ_ONLY`/`DRY_RUN`
## 16. UIkrav (plan)
Nextcloudfanen i kundevisning skal vise:
- Systemstatus
- Nøgletal
- Handlinger
- Historik
AdminUI (Settings) skal give:
- Liste over instanser
- Enable/disable
- Rotation af credentials
- Retentionstyring af auditlog 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 servicelag
4. Implementer routere og schemas
5. Implementer UIfanen + adminUI
6. Implementer auditlog viewer/export