- CLI tools: nextcloud-client, nextcloud-contacts, nextcloud-calendar, nextcloud-mail - Build script with compile-time credentials - Skills for all four tools - Email tool supports IMAP/SMTP with attachment download
241 lines
6.5 KiB
Markdown
241 lines
6.5 KiB
Markdown
# Nextcloud Files Skill
|
|
|
|
**Purpose:** Manage files and folders on Nextcloud servers using the nextcloud-client CLI tool.
|
|
|
|
## Overview
|
|
|
|
This skill provides file operations for Nextcloud using the nextcloud-client Go binary. The CLI tool handles all WebDAV operations and XML parsing.
|
|
|
|
## Prerequisites
|
|
|
|
- Go compiler (for building CLI tool)
|
|
- Nextcloud server URL
|
|
- Nextcloud username
|
|
- Nextcloud password (for app token retrieval)
|
|
|
|
## Bootstrap Process
|
|
|
|
**This skill will automatically build the CLI tool with your Nextcloud app token and then immediately forget all credentials.**
|
|
|
|
**Step 1: The skill will ask for:**
|
|
- Nextcloud server URL (e.g., https://teamworkapps.com)
|
|
- Nextcloud username (e.g., wltbagent@shortcutsolutions.net)
|
|
- Nextcloud password (your normal login credentials, not the app token)
|
|
|
|
**Step 2: The skill will:**
|
|
1. **Authenticate to Nextcloud** using your username and password
|
|
2. **Retrieve or generate an app token** from Nextcloud settings
|
|
3. **Build** all three CLI tools (files, contacts, calendar) with the app token
|
|
4. **Verify** that the nextcloud-client binary was created
|
|
5. **Immediately forget all credentials** (username, password, and app token are never stored)
|
|
|
|
**Step 3: You're ready!**
|
|
- Use the tool without passing any credentials
|
|
- The app token is embedded at compile time
|
|
- Example: `nextcloud-list` (no --url, --user, --token needed)
|
|
|
|
**Security Note:**
|
|
- **All credentials** (username, password, and app token) are only used during the bootstrap process
|
|
- **App token is retrieved automatically** using your normal login credentials
|
|
- **Credentials are never stored permanently** in any file or environment
|
|
- **The app token is embedded** in the compiled binary, which stays on your local system only
|
|
- **Do not distribute** the built binary outside your trusted environment
|
|
|
|
## Configuration
|
|
|
|
All credentials are embedded at compile time via Go ldflags. No runtime configuration needed.
|
|
|
|
### Build-Time Configuration (Recommended)
|
|
|
|
The skill will handle this automatically during bootstrap:
|
|
```bash
|
|
cd projects/nextcloud-integration/tools/go/nextcloud-client
|
|
|
|
go build -ldflags="-X 'main.BuildServerURL=https://teamworkapps.com' \
|
|
-X 'main.BuildUsername=wltbagent@shortcutsolutions.net' \
|
|
-X 'main.BuildToken=YOUR_APP_TOKEN'" \
|
|
-o ~/bin/nextcloud-client .
|
|
```
|
|
|
|
### Runtime Configuration (Fallback)
|
|
|
|
If not set at build time, the tool will check these environment variables:
|
|
|
|
```bash
|
|
export NEXTCLOUD_URL="https://cloud.example.com"
|
|
export NEXTCLOUD_USER="your-username"
|
|
export NEXTCLOUD_TOKEN="your-app-token"
|
|
```
|
|
|
|
### Command-Line Flags (Fallback)
|
|
|
|
Override credentials for specific commands using:
|
|
- `--url`
|
|
- `--user`
|
|
- `--token`
|
|
|
|
**Priority:** Build-time ldflags > Environment variables > Command-line flags
|
|
|
|
## Tool Reference
|
|
|
|
All tools can be used without passing credentials (they're embedded at compile time).
|
|
|
|
### `nextcloud-list` - List folder contents
|
|
|
|
```bash
|
|
# List root folder
|
|
nextcloud-list
|
|
|
|
# List specific folder
|
|
nextcloud-list /Documents
|
|
|
|
# List recursively
|
|
nextcloud-list /Documents --recursive
|
|
```
|
|
|
|
### `nextcloud-upload` - Upload files
|
|
|
|
```bash
|
|
# Upload file to root
|
|
nextcloud-upload localfile.txt /remote/path.txt
|
|
|
|
# Upload multiple files
|
|
nextcloud-upload *.pdf /Documents/
|
|
|
|
# Upload to specific folder
|
|
nextcloud-upload report.pdf /Documents/Reports/
|
|
```
|
|
|
|
### `nextcloud-download` - Download files
|
|
|
|
```bash
|
|
# Download file
|
|
nextcloud-download /remote/path.txt localfile.txt
|
|
|
|
# Download folder (requires manual implementation)
|
|
```
|
|
|
|
### `nextcloud-mkdir` - Create folder
|
|
|
|
```bash
|
|
# Create single folder
|
|
nextcloud-mkdir /NewFolder
|
|
|
|
# Create nested folders (auto-parents)
|
|
nextcloud-mkdir /Documents/2026/Projects
|
|
```
|
|
|
|
### `nextcloud-delete` - Delete files/folders
|
|
|
|
```bash
|
|
# Delete file
|
|
nextcloud-delete /file.txt
|
|
|
|
# Delete folder (recursive)
|
|
nextcloud-delete /OldFolder
|
|
```
|
|
|
|
### `nextcloud-move` - Move/rename files
|
|
|
|
```bash
|
|
# Move file
|
|
nextcloud-move /old/path.txt /new/path.txt
|
|
|
|
# Rename file
|
|
nextcloud-move /oldname.txt /newname.txt
|
|
|
|
# Move folder
|
|
nextcloud-move /OldFolder /NewFolder
|
|
```
|
|
|
|
### `nextcloud-copy` - Copy files
|
|
|
|
```bash
|
|
# Copy file
|
|
nextcloud-copy /source.txt /destination.txt
|
|
|
|
# Copy folder
|
|
nextcloud-copy /SourceFolder /DestinationFolder
|
|
```
|
|
|
|
### `nextcloud-info` - Get file metadata
|
|
|
|
```bash
|
|
# Get file info
|
|
nextcloud-info /Documents/report.pdf
|
|
```
|
|
|
|
## Use Cases
|
|
|
|
### 1. File Management Workflow
|
|
|
|
```bash
|
|
# Backup local files to Nextcloud
|
|
nextcloud-upload local-file.txt /Backups/file.txt
|
|
|
|
# Organize with folders
|
|
nextcloud-mkdir /Documents/2026
|
|
nextcloud-move /Downloads/report.pdf /Documents/2026/report.pdf
|
|
```
|
|
|
|
### 2. Folder Organization
|
|
|
|
```bash
|
|
# Create project structure
|
|
nextcloud-mkdir /Projects/WebsiteRedesign
|
|
nextcloud-mkdir /Projects/WebsiteRedesign/Assets
|
|
nextcloud-mkdir /Projects/WebsiteRedesign/Code
|
|
|
|
# Move files into folders
|
|
nextcloud-move /homepage.html /Projects/WebsiteRedesign/
|
|
nextcloud-move /style.css /Projects/WebsiteRedesign/Assets/
|
|
```
|
|
|
|
### 3. Backup & Restore
|
|
|
|
```bash
|
|
# Download folder for backup
|
|
nextcloud-download /Documents documents-backup.zip
|
|
|
|
# Restore from backup
|
|
# (Implementation needed for folder download as ZIP)
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
The nextcloud-client binary provides clear error messages:
|
|
|
|
| Error | Meaning | Action |
|
|
|-------|---------|--------|
|
|
| Error: URL, user, and token are required | Missing credentials | Re-run bootstrap process |
|
|
| unexpected status: 401 | Unauthorized | App token expired, re-bootstrap |
|
|
| unexpected status: 403 | Forbidden | Check app token permissions |
|
|
| unexpected status: 404 | Not Found | File doesn't exist |
|
|
| unexpected status: 409 | Conflict | Resource already exists |
|
|
| unexpected status: 207 (expected 207 Multi-Status) | PROPFIND error | Check path and permissions |
|
|
| upload failed with status: xxx | Upload error | Check file size and permissions |
|
|
|
|
## Best Practices
|
|
|
|
1. No runtime configuration needed (credentials embedded)
|
|
2. Always include trailing slash in directory paths
|
|
3. Check file sizes before large uploads
|
|
4. Handle ETags - Check for concurrent updates (not yet implemented)
|
|
5. Set Content-Type correctly - Binary handles this automatically
|
|
6. Handle errors gracefully - CLI provides clear error messages
|
|
|
|
## Dependencies
|
|
|
|
- `~/bin/nextcloud-client` - Go binary for WebDAV operations
|
|
- `curl` - Used by Go binary internally
|
|
- No XML parsing libraries needed (handled by Go)
|
|
|
|
## Related Skills
|
|
|
|
- **nextcloud-contacts** - For storing contact photos as files
|
|
- **nextcloud-calendar** - For attaching calendar events to files
|
|
|
|
---
|
|
|
|
*OpenClaw skill wrapper for nextcloud-client Go binary with automatic app token retrieval*
|