diff --git a/BUILD_GUIDE.md b/BUILD_GUIDE.md deleted file mode 100644 index bb9c406..0000000 --- a/BUILD_GUIDE.md +++ /dev/null @@ -1,298 +0,0 @@ -# Build Guide - HMAC File Server with Network Resilience - -## ✅ Quick Build (Working) - -### 1. Standard Build with Network Resilience -```bash -# Build with all features (including network resilience) -./buildgo.sh -``` - -**Output:** -``` -[BUILD] Building HMAC File Server v3.2 with Network Resilience... -[INFO] Found network resilience: upload_session.go -[INFO] Found network resilience: network_resilience.go -[INFO] Found network resilience: chunked_upload_handler.go -[INFO] Found network resilience: integration.go -[BUILD] Build successful! Binary created: ./hmac-file-server -[INFO] Binary size: 16M -``` - -### 2. Manual Build (Alternative) -```bash -# Build manually with all network resilience features -go build -o hmac-file-server \ - cmd/server/main.go \ - cmd/server/helpers.go \ - cmd/server/config_validator.go \ - cmd/server/config_test_scenarios.go \ - cmd/server/upload_session.go \ - cmd/server/network_resilience.go \ - cmd/server/chunked_upload_handler.go \ - cmd/server/integration.go -``` - -## Build Requirements - -### Prerequisites -- **Go 1.24+** (as specified in go.mod) -- **OpenSSL** (optional, for HMAC testing) -- **Redis** (optional, for session persistence) - -### Dependencies -All dependencies are handled by Go modules: -```bash -# Download dependencies -go mod download - -# Verify dependencies -go mod verify - -# View dependency tree -go mod graph -``` - -## Build Options - -### Development Build -```bash -# Build with debug information -go build -gcflags="all=-N -l" -o hmac-file-server-debug cmd/server/*.go - -# Or use the build script in debug mode -DEBUG=1 ./buildgo.sh -``` - -### Production Build -```bash -# Optimized production build -go build -ldflags="-s -w" -o hmac-file-server cmd/server/*.go - -# With version information -VERSION="3.2.1" -go build -ldflags="-s -w -X main.version=$VERSION" -o hmac-file-server cmd/server/*.go -``` - -### Cross-Platform Build -```bash -# Linux AMD64 -GOOS=linux GOARCH=amd64 go build -o hmac-file-server-linux-amd64 cmd/server/*.go - -# Linux ARM64 (for ARM servers/Raspberry Pi) -GOOS=linux GOARCH=arm64 go build -o hmac-file-server-linux-arm64 cmd/server/*.go - -# Windows -GOOS=windows GOARCH=amd64 go build -o hmac-file-server.exe cmd/server/*.go - -# macOS -GOOS=darwin GOARCH=amd64 go build -o hmac-file-server-macos cmd/server/*.go -``` - -## Configuration for Build - -### Enable Network Resilience Features -Create or update your `config.toml`: -```toml -[server] -listen_address = ":8080" -enable_dynamic_workers = true # Enable dynamic scaling -worker_scale_up_thresh = 50 # Scale up threshold -worker_scale_down_thresh = 10 # Scale down threshold -deduplication_enabled = true # Enable deduplication -max_upload_size = "10GB" # Support large files - -[uploads] -chunked_uploads_enabled = true # Enable chunked uploads -resumable_uploads_enabled = true # Enable resumable uploads -chunk_size = "10MB" # Optimal chunk size -max_resumable_age = "48h" # Session persistence - -[timeouts] -readtimeout = "4800s" # 80 minutes for large files -writetimeout = "4800s" # 80 minutes for large files -idletimeout = "4800s" # 80 minutes for large files - -[deduplication] -enabled = true -maxsize = "1GB" # Deduplicate files under 1GB - -[security] -secret = "your-super-secret-hmac-key-minimum-64-characters-recommended" -``` - -## Testing the Build - -### 1. Basic Functionality Test -```bash -# Test binary works -./hmac-file-server --help - -# Test with config file -./hmac-file-server --config config.toml -``` - -### 2. Test Network Resilience Features -```bash -# Start server with chunked uploads enabled -./hmac-file-server --config config.toml - -# In another terminal, test chunked upload endpoint -curl -X POST \ - -H "X-Filename: test.txt" \ - -H "X-Total-Size: 1024" \ - -H "X-Signature: $(echo -n '/upload/chunked' | openssl dgst -sha256 -hmac 'your-secret' | cut -d' ' -f2)" \ - http://localhost:8080/upload/chunked -``` - -### 3. Run Go Tests -```bash -# Run existing tests -go test ./test/... - -# Run with verbose output -go test -v ./test/... - -# Run specific tests -go test -run TestUpload ./test/ -``` - -## Docker Build (Alternative) - -### Using Existing Docker Setup -```bash -# Build Docker image -./builddocker.sh - -# Or manually -docker build -t hmac-file-server . -``` - -### Run with Docker -```bash -# Start with docker-compose -cd dockerenv -docker-compose up -d - -# Or run directly -docker run -d \ - -p 8080:8080 \ - -p 9090:9090 \ - -v $(pwd)/config:/etc/hmac-file-server \ - -v $(pwd)/data:/var/lib/hmac-file-server \ - hmac-file-server -``` - -## Troubleshooting - -### Build Issues - -#### Missing Dependencies -```bash -# Clean module cache and re-download -go clean -modcache -go mod download -``` - -#### Go Version Issues -```bash -# Check Go version -go version - -# Update Go if needed (Ubuntu/Debian) -sudo snap install go --classic - -# Or download from https://golang.org/dl/ -``` - -#### Network Resilience Files Missing -```bash -# Check if files exist -ls -la cmd/server/upload_session.go -ls -la cmd/server/network_resilience.go -ls -la cmd/server/chunked_upload_handler.go -ls -la cmd/server/integration.go - -# If missing, the build will work but without network resilience features -# Core functionality remains unchanged -``` - -### Runtime Issues - -#### Port Already in Use -```bash -# Check what's using port 8080 -sudo netstat -tlnp | grep :8080 - -# Kill process if needed -sudo kill $(sudo lsof -t -i:8080) -``` - -#### Permission Issues -```bash -# Make binary executable -chmod +x hmac-file-server - -# For system service installation -sudo chown root:root hmac-file-server -sudo chmod 755 hmac-file-server -``` - -#### Config File Issues -```bash -# Validate config syntax -./hmac-file-server --config config.toml --validate - -# Use example config as starting point -cp config-example-xmpp.toml config.toml -``` - -## Build Performance - -### Faster Builds -```bash -# Use build cache -export GOCACHE=$(go env GOCACHE) - -# Parallel builds -go build -p 4 cmd/server/*.go - -# Skip tests during development -go build -a cmd/server/*.go -``` - -### Smaller Binaries -```bash -# Strip debug info and symbol table -go build -ldflags="-s -w" cmd/server/*.go - -# Use UPX compression (if installed) -upx --best hmac-file-server -``` - -## Deployment - -### System Service -```bash -# Copy binary to system location -sudo cp hmac-file-server /usr/local/bin/ - -# Create systemd service -sudo cp hmac-file-server.service /etc/systemd/system/ -sudo systemctl enable hmac-file-server -sudo systemctl start hmac-file-server -``` - -### Reverse Proxy Setup -```bash -# Nginx configuration -sudo cp nginx-hmac-file-server.conf /etc/nginx/sites-available/ -sudo ln -s /etc/nginx/sites-available/hmac-file-server.conf /etc/nginx/sites-enabled/ -sudo nginx -t && sudo systemctl reload nginx -``` - -This build process ensures that: -- ✅ **Backward Compatibility**: Works with or without network resilience files -- ✅ **Feature Detection**: Automatically includes available network resilience features -- ✅ **Zero Downtime**: Existing deployments continue working unchanged -- ✅ **Mobile Optimized**: New features specifically address network switching issues diff --git a/LICENSE_NEW b/LICENSE_NEW new file mode 100644 index 0000000..de75922 --- /dev/null +++ b/LICENSE_NEW @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Alexander Renz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.