...
This commit is contained in:
172
aiprompts/instructions/instructions_webdav.md
Normal file
172
aiprompts/instructions/instructions_webdav.md
Normal file
@@ -0,0 +1,172 @@
|
||||
# WebDAV Server Implementation
|
||||
|
||||
This document describes the WebDAV server implementation for HeroLauncher.
|
||||
|
||||
## Overview
|
||||
|
||||
The WebDAV server provides a way to access and manage files through the WebDAV protocol, which allows for remote file management over HTTP/HTTPS. This implementation uses the Go standard library's WebDAV package from `golang.org/x/net/webdav`.
|
||||
|
||||
The server supports both HTTP and HTTPS connections, basic authentication, and includes comprehensive debug logging for troubleshooting.
|
||||
|
||||
## Implementation Details
|
||||
|
||||
The WebDAV server is implemented in the `pkg/webdavserver` package. The server can be configured with various options including:
|
||||
|
||||
- Host and port to listen on
|
||||
- Base path for the WebDAV endpoint
|
||||
- File system path to serve files from
|
||||
- Read and write timeouts
|
||||
- Debug mode for verbose logging
|
||||
- Basic authentication with username/password
|
||||
- HTTPS support with TLS certificate and key files
|
||||
|
||||
## Usage
|
||||
|
||||
### Starting the WebDAV Server
|
||||
|
||||
To start the WebDAV server, use the `cmd/webdavserver/main.go` command:
|
||||
|
||||
```bash
|
||||
go run cmd/webdavserver/main.go [options]
|
||||
```
|
||||
|
||||
Available options:
|
||||
|
||||
- `-host`: Host address to bind to (default: "0.0.0.0")
|
||||
- `-port`: Port to listen on (default: 9999)
|
||||
- `-base-path`: Base URL path for WebDAV (default: "/")
|
||||
- `-fs`: File system path to serve (default: system temp directory + "/heroagent")
|
||||
- `-debug`: Enable debug mode with verbose logging (default: false)
|
||||
- `-auth`: Enable basic authentication (default: false)
|
||||
- `-username`: Username for basic authentication (default: "admin")
|
||||
- `-password`: Password for basic authentication (default: "1234")
|
||||
- `-https`: Enable HTTPS (default: false)
|
||||
- `-cert`: Path to TLS certificate file (optional if auto-generation is enabled)
|
||||
- `-key`: Path to TLS key file (optional if auto-generation is enabled)
|
||||
- `-auto-gen-certs`: Auto-generate certificates if they don't exist (default: true)
|
||||
- `-cert-validity`: Validity period in days for auto-generated certificates (default: 365)
|
||||
- `-cert-org`: Organization name for auto-generated certificates (default: "HeroLauncher WebDAV Server")
|
||||
|
||||
### Connecting to WebDAV from macOS
|
||||
|
||||
A bash script is provided to easily connect to the WebDAV server from macOS:
|
||||
|
||||
```bash
|
||||
./scripts/open_webdav_osx.sh [options]
|
||||
```
|
||||
|
||||
Available options:
|
||||
|
||||
- `-h, --host`: WebDAV server hostname (default: "localhost")
|
||||
- `-p, --port`: WebDAV server port (default: 9999)
|
||||
- `-path, --path-prefix`: Path prefix for WebDAV URL (default: "")
|
||||
- `-s, --https`: Use HTTPS instead of HTTP (default: false)
|
||||
- `-u, --username`: Username for authentication
|
||||
- `-pw, --password`: Password for authentication
|
||||
- `--help`: Show help message
|
||||
|
||||
## API
|
||||
|
||||
### Server Configuration
|
||||
|
||||
```go
|
||||
// Config holds the configuration for the WebDAV server
|
||||
type Config struct {
|
||||
Host string
|
||||
Port int
|
||||
BasePath string
|
||||
FileSystem string
|
||||
ReadTimeout time.Duration
|
||||
WriteTimeout time.Duration
|
||||
DebugMode bool
|
||||
UseAuth bool
|
||||
Username string
|
||||
Password string
|
||||
UseHTTPS bool
|
||||
CertFile string
|
||||
KeyFile string
|
||||
AutoGenerateCerts bool
|
||||
CertValidityDays int
|
||||
CertOrganization string
|
||||
}
|
||||
|
||||
// DefaultConfig returns the default configuration
|
||||
func DefaultConfig() Config
|
||||
```
|
||||
|
||||
### Server Methods
|
||||
|
||||
```go
|
||||
// NewServer creates a new WebDAV server
|
||||
func NewServer(config Config) (*Server, error)
|
||||
|
||||
// Start starts the WebDAV server
|
||||
func (s *Server) Start() error
|
||||
|
||||
// Stop stops the WebDAV server
|
||||
func (s *Server) Stop() error
|
||||
```
|
||||
|
||||
## Integration with HeroLauncher
|
||||
|
||||
The WebDAV server can be integrated with the main HeroLauncher application by adding it to the server initialization in `cmd/server/main.go`.
|
||||
|
||||
## Directory Structure
|
||||
|
||||
The WebDAV server uses the following directory structure:
|
||||
|
||||
```
|
||||
<parent-of-fs>/
|
||||
├── <fs-dir>/ # WebDAV files served to clients (specified by -fs)
|
||||
└── certificates/ # TLS certificates for HTTPS
|
||||
```
|
||||
|
||||
Where certificates are stored in a `certificates` directory next to the filesystem directory specified with the `-fs` parameter.
|
||||
|
||||
## Security Considerations
|
||||
|
||||
- Basic authentication is supported but disabled by default
|
||||
- HTTPS is supported but disabled by default
|
||||
- The server can automatically generate self-signed certificates if needed
|
||||
- For production use, always enable authentication and HTTPS
|
||||
- Use strong passwords and properly signed certificates for production
|
||||
- Be careful about which directories you expose through WebDAV
|
||||
- Consider implementing IP-based access restrictions for additional security
|
||||
|
||||
## Debugging
|
||||
|
||||
When troubleshooting WebDAV connections, the debug mode can be enabled with the `-debug` flag. This will provide detailed logging of:
|
||||
|
||||
- All incoming requests
|
||||
- Request headers
|
||||
- Client information
|
||||
- Authentication attempts
|
||||
- WebDAV operations
|
||||
|
||||
Debug logs are prefixed with `[WebDAV DEBUG]` for easy filtering.
|
||||
|
||||
## Examples
|
||||
|
||||
### Starting a secure WebDAV server with auto-generated certificates
|
||||
|
||||
```bash
|
||||
go run cmd/webdavserver/main.go -auth -username myuser -password mypass -https -fs /path/to/files -debug
|
||||
```
|
||||
|
||||
### Starting a secure WebDAV server with existing certificates
|
||||
|
||||
```bash
|
||||
go run cmd/webdavserver/main.go -auth -username myuser -password mypass -https -cert /path/to/cert.pem -key /path/to/key.pem -fs /path/to/files -debug -auto-gen-certs=false
|
||||
```
|
||||
|
||||
### Connecting from macOS with authentication
|
||||
|
||||
```bash
|
||||
./scripts/open_webdav_osx.sh -s -u myuser -pw mypass
|
||||
```
|
||||
|
||||
## References
|
||||
|
||||
- [WebDAV Protocol (RFC 4918)](https://tools.ietf.org/html/rfc4918)
|
||||
- [Go WebDAV Package](https://pkg.go.dev/golang.org/x/net/webdav)
|
||||
- [TLS in Go](https://pkg.go.dev/crypto/tls)
|
||||
Reference in New Issue
Block a user