[Integration] Map & test Nextcloud document storage integration #38

Open
opened 2026-03-23 09:35:48 -07:00 by pyr0ball · 0 comments
Owner

Nextcloud — Self-Hosted Document Storage

Save cover letters and PDFs to a self-hosted Nextcloud instance via WebDAV. Priority integration for privacy-focused users on the Free tier.

Current state

scripts/integrations/nextcloud.py exists (48 lines, 4 methods). WebDAV is credential-simple — no OAuth needed.

Tasks

Mapping

  • Document credentials: server URL, username, password (or app password)
  • Define WebDAV path: /remote.php/dav/files/{username}/Peregrine/{company}/{role}/
  • Note: Nextcloud app passwords are preferred over account password for security
  • Config: config/integrations/nextcloud.yaml

Implementation

  • Implement NextcloudIntegration.connect() — store URL, username, password
  • Implement NextcloudIntegration.test() — PROPFIND to validate credentials
  • Implement NextcloudIntegration.upload(path, content_bytes) — PUT via WebDAV
  • Auto-create Peregrine/ folder via MKCOL if it doesn't exist

Testing

  • Integration test against a real Nextcloud instance (the CF Nextcloud at nc.opensourcesolarpunk.com can be used)
  • Test with app password (not account password)
  • Test auto-folder creation on first upload

Acceptance criteria

  • Settings → Integrations shows Nextcloud card (URL, username, password fields)
  • Free tier eligible — self-hosted storage requires no cloud subscription
  • PDFs upload to correct path under Peregrine/ folder
## Nextcloud — Self-Hosted Document Storage Save cover letters and PDFs to a self-hosted Nextcloud instance via WebDAV. Priority integration for privacy-focused users on the Free tier. ### Current state `scripts/integrations/nextcloud.py` exists (48 lines, 4 methods). WebDAV is credential-simple — no OAuth needed. ### Tasks **Mapping** - [ ] Document credentials: server URL, username, password (or app password) - [ ] Define WebDAV path: `/remote.php/dav/files/{username}/Peregrine/{company}/{role}/` - [ ] Note: Nextcloud app passwords are preferred over account password for security - [ ] Config: `config/integrations/nextcloud.yaml` **Implementation** - [ ] Implement `NextcloudIntegration.connect()` — store URL, username, password - [ ] Implement `NextcloudIntegration.test()` — PROPFIND to validate credentials - [ ] Implement `NextcloudIntegration.upload(path, content_bytes)` — PUT via WebDAV - [ ] Auto-create `Peregrine/` folder via MKCOL if it doesn't exist **Testing** - [ ] Integration test against a real Nextcloud instance (the CF Nextcloud at nc.opensourcesolarpunk.com can be used) - [ ] Test with app password (not account password) - [ ] Test auto-folder creation on first upload ### Acceptance criteria - Settings → Integrations shows Nextcloud card (URL, username, password fields) - Free tier eligible — self-hosted storage requires no cloud subscription - PDFs upload to correct path under `Peregrine/` folder
pyr0ball added this to the Public Launch milestone 2026-03-23 09:35:48 -07:00
pyr0ball added the
feature-request
label 2026-03-23 09:35:48 -07:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Circuit-Forge/peregrine#38
No description provided.