360 lines
9.0 KiB
Markdown
360 lines
9.0 KiB
Markdown
# 📖 INSTALLATION GUIDE: mod_http_upload_hmac
|
|
## Ejabberd Module for HMAC File Server Integration
|
|
|
|
### 🎯 Overview
|
|
This module enables seamless file uploads in XMPP clients by integrating ejabberd with HMAC File Server 3.2.2. Users get zero-configuration file sharing with automatic authentication.
|
|
|
|
---
|
|
|
|
## 🔧 ADMINISTRATOR INSTALLATION
|
|
|
|
### Prerequisites
|
|
- **ejabberd server** (version 20.01 or later)
|
|
- **Erlang/OTP** (version 22 or later)
|
|
- **HMAC File Server 3.2.2** with Bearer token support
|
|
- **Network connectivity** between ejabberd and HMAC server
|
|
|
|
### Step 1: Install HMAC File Server 3.2.2
|
|
```bash
|
|
# Download and install HMAC File Server
|
|
wget https://github.com/your-repo/hmac-file-server/releases/v3.2.2/hmac-file-server-linux-amd64
|
|
chmod +x hmac-file-server-linux-amd64
|
|
sudo mv hmac-file-server-linux-amd64 /usr/local/bin/hmac-file-server
|
|
|
|
# Create configuration
|
|
sudo mkdir -p /etc/hmac-file-server
|
|
sudo cat > /etc/hmac-file-server/config.toml << EOF
|
|
[server]
|
|
interface = "0.0.0.0"
|
|
port = 8080
|
|
upload_path = "/var/lib/hmac-uploads"
|
|
log_file = "/var/log/hmac-file-server.log"
|
|
log_level = "info"
|
|
|
|
[auth]
|
|
shared_secret = "YOUR-SECURE-SECRET-HERE"
|
|
bearer_tokens_enabled = true
|
|
token_expiry = 3600
|
|
jwt_enabled = true
|
|
hmac_enabled = true
|
|
|
|
[upload]
|
|
max_file_size = "100MB"
|
|
max_files_per_user = 1000
|
|
allowed_mime_types = ["image/*", "video/*", "audio/*", "application/pdf"]
|
|
|
|
[storage]
|
|
cleanup_interval = "24h"
|
|
retention_days = 30
|
|
EOF
|
|
|
|
# Create upload directory
|
|
sudo mkdir -p /var/lib/hmac-uploads
|
|
sudo chown hmac:hmac /var/lib/hmac-uploads
|
|
|
|
# Create systemd service
|
|
sudo cat > /etc/systemd/system/hmac-file-server.service << EOF
|
|
[Unit]
|
|
Description=HMAC File Server 3.2.2
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=hmac
|
|
Group=hmac
|
|
ExecStart=/usr/local/bin/hmac-file-server -config /etc/hmac-file-server/config.toml
|
|
Restart=always
|
|
RestartSec=5
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
# Start service
|
|
sudo systemctl enable hmac-file-server
|
|
sudo systemctl start hmac-file-server
|
|
```
|
|
|
|
### Step 2: Install ejabberd Module
|
|
```bash
|
|
# Copy module to ejabberd
|
|
sudo cp mod_http_upload_hmac.erl /opt/ejabberd/lib/ejabberd-*/ebin/
|
|
|
|
# Compile module
|
|
cd /opt/ejabberd/lib/ejabberd-*/ebin/
|
|
sudo erlc mod_http_upload_hmac.erl
|
|
|
|
# Verify compilation
|
|
ls -la mod_http_upload_hmac.beam
|
|
```
|
|
|
|
### Step 3: Configure ejabberd
|
|
Add to `/etc/ejabberd/ejabberd.yml`:
|
|
|
|
```yaml
|
|
modules:
|
|
mod_http_upload_hmac:
|
|
hmac_server_url: "http://localhost:8080"
|
|
hmac_shared_secret: "YOUR-SECURE-SECRET-HERE" # Must match HMAC server
|
|
max_size: 104857600 # 100MB
|
|
quota_per_user: 1073741824 # 1GB per user
|
|
token_expiry: 3600 # 1 hour
|
|
iqdisc: one_queue
|
|
|
|
# Disable default mod_http_upload if enabled
|
|
# mod_http_upload: false
|
|
```
|
|
|
|
### Step 4: Restart ejabberd
|
|
```bash
|
|
sudo systemctl restart ejabberd
|
|
|
|
# Check logs
|
|
sudo tail -f /var/log/ejabberd/ejabberd.log
|
|
```
|
|
|
|
### Step 5: Configure Reverse Proxy (Optional but Recommended)
|
|
For HTTPS support with nginx:
|
|
|
|
```nginx
|
|
server {
|
|
listen 443 ssl http2;
|
|
server_name files.yourdomain.com;
|
|
|
|
ssl_certificate /path/to/cert.pem;
|
|
ssl_certificate_key /path/to/key.pem;
|
|
|
|
client_max_body_size 100M;
|
|
|
|
location / {
|
|
proxy_pass http://localhost:8080;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_read_timeout 300;
|
|
proxy_send_timeout 300;
|
|
}
|
|
}
|
|
```
|
|
|
|
Update ejabberd config:
|
|
```yaml
|
|
modules:
|
|
mod_http_upload_hmac:
|
|
hmac_server_url: "https://files.yourdomain.com"
|
|
# ... other settings
|
|
```
|
|
|
|
---
|
|
|
|
## 👤 USER GUIDE
|
|
|
|
### What This Enables
|
|
- **Automatic file uploads** in XMPP clients (Conversations, Dino, Gajim, etc.)
|
|
- **No manual configuration** required in clients
|
|
- **Secure authentication** using your XMPP credentials
|
|
- **Large file support** up to configured limits
|
|
|
|
### Supported XMPP Clients
|
|
✅ **Conversations** (Android)
|
|
✅ **Dino** (Linux/Desktop)
|
|
✅ **Gajim** (Cross-platform)
|
|
✅ **ChatSecure** (iOS)
|
|
✅ **Monal** (iOS/macOS)
|
|
✅ **Movim** (Web)
|
|
✅ **Any XEP-0363 compatible client**
|
|
|
|
### How to Use
|
|
|
|
1. **No setup required** - your XMPP client will automatically discover the upload service
|
|
2. **Send files normally** - use your client's attachment/file sharing feature
|
|
3. **Files upload automatically** - authentication handled transparently
|
|
4. **Recipients get download links** - works across different clients and servers
|
|
|
|
### File Limits (Default Configuration)
|
|
- **Maximum file size**: 100MB per file
|
|
- **Storage quota**: 1GB per user
|
|
- **File retention**: 30 days
|
|
- **Supported types**: Images, videos, audio, documents
|
|
|
|
### Troubleshooting for Users
|
|
|
|
**Problem**: File uploads fail
|
|
**Solution**: Check with your server administrator - the service may be temporarily unavailable
|
|
|
|
**Problem**: Files too large
|
|
**Solution**: Compress files or ask administrator about size limits
|
|
|
|
**Problem**: Client doesn't show upload option
|
|
**Solution**: Ensure your client supports XEP-0363 HTTP File Upload
|
|
|
|
---
|
|
|
|
## 🔍 TESTING AND VALIDATION
|
|
|
|
### Quick Health Check
|
|
```bash
|
|
# Test HMAC server
|
|
curl http://localhost:8080/health
|
|
|
|
# Test ejabberd module loading
|
|
sudo ejabberdctl modules_available | grep http_upload
|
|
|
|
# Check ejabberd logs
|
|
sudo tail /var/log/ejabberd/ejabberd.log
|
|
```
|
|
|
|
### Integration Test
|
|
```bash
|
|
# Run comprehensive test suite
|
|
cd /path/to/ejabberd-module/
|
|
./comprehensive_integration_test.sh
|
|
```
|
|
|
|
### Manual Upload Test
|
|
```bash
|
|
# Generate test token (simulate ejabberd)
|
|
USER="testuser@yourdomain.com"
|
|
FILENAME="test.txt"
|
|
SECRET="YOUR-SECURE-SECRET-HERE"
|
|
|
|
# Test upload endpoint
|
|
curl -X POST "http://localhost:8080/upload/test-uuid/test.txt" \
|
|
-H "Authorization: Bearer $(echo -n "$USER\0$FILENAME\0$(date +%s)" | openssl dgst -sha256 -hmac "$SECRET" -binary | base64)" \
|
|
-H "Content-Type: text/plain" \
|
|
-d "Test upload content"
|
|
```
|
|
|
|
---
|
|
|
|
## 🔒 SECURITY CONSIDERATIONS
|
|
|
|
### For Administrators
|
|
- **Use strong shared secrets** (minimum 32 characters)
|
|
- **Enable HTTPS** for production deployments
|
|
- **Configure appropriate file size limits**
|
|
- **Set up log monitoring** for upload activities
|
|
- **Regular security updates** for both ejabberd and HMAC server
|
|
- **Network isolation** - HMAC server doesn't need internet access
|
|
|
|
### Network Security
|
|
```bash
|
|
# Firewall configuration example
|
|
sudo ufw allow from [ejabberd-ip] to any port 8080 # HMAC server
|
|
sudo ufw allow 5222/tcp # XMPP client connections
|
|
sudo ufw allow 5269/tcp # XMPP server-to-server
|
|
sudo ufw allow 443/tcp # HTTPS file uploads (if using reverse proxy)
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 MONITORING AND MAINTENANCE
|
|
|
|
### Log Monitoring
|
|
```bash
|
|
# HMAC server logs
|
|
sudo tail -f /var/log/hmac-file-server.log
|
|
|
|
# ejabberd logs
|
|
sudo tail -f /var/log/ejabberd/ejabberd.log
|
|
|
|
# nginx logs (if using reverse proxy)
|
|
sudo tail -f /var/log/nginx/access.log
|
|
```
|
|
|
|
### Performance Monitoring
|
|
- Monitor disk usage in upload directory
|
|
- Check memory usage of HMAC server process
|
|
- Monitor ejabberd performance impact
|
|
- Track upload/download statistics
|
|
|
|
### Backup Recommendations
|
|
- **Configuration files**: `/etc/ejabberd/`, `/etc/hmac-file-server/`
|
|
- **Upload data**: `/var/lib/hmac-uploads/` (optional, based on retention policy)
|
|
- **ejabberd database**: Standard ejabberd backup procedures
|
|
|
|
---
|
|
|
|
## 🆘 TROUBLESHOOTING
|
|
|
|
### Common Issues
|
|
|
|
**Module fails to load**
|
|
```bash
|
|
# Check Erlang compilation
|
|
sudo erlc /opt/ejabberd/lib/ejabberd-*/ebin/mod_http_upload_hmac.erl
|
|
|
|
# Check ejabberd syntax
|
|
sudo ejabberdctl check_config
|
|
```
|
|
|
|
**HMAC server not responding**
|
|
```bash
|
|
# Check service status
|
|
sudo systemctl status hmac-file-server
|
|
|
|
# Check port binding
|
|
sudo netstat -tlnp | grep :8080
|
|
|
|
# Test connectivity
|
|
curl -v http://localhost:8080/health
|
|
```
|
|
|
|
**Token authentication fails**
|
|
- Verify shared secrets match between ejabberd and HMAC server
|
|
- Check system time synchronization
|
|
- Review token expiry settings
|
|
|
|
### Debug Mode
|
|
Enable debug logging in ejabberd:
|
|
```yaml
|
|
loglevel: debug
|
|
log_modules_fully: [mod_http_upload_hmac]
|
|
```
|
|
|
|
---
|
|
|
|
## 📈 SCALING AND PRODUCTION
|
|
|
|
### High Availability Setup
|
|
- Run multiple HMAC server instances behind load balancer
|
|
- Use shared storage (NFS/GlusterFS) for upload directory
|
|
- Configure ejabberd clustering if needed
|
|
|
|
### Performance Optimization
|
|
- Tune Erlang VM parameters for ejabberd
|
|
- Configure nginx caching for downloads
|
|
- Use SSD storage for upload directory
|
|
- Monitor and adjust file retention policies
|
|
|
|
---
|
|
|
|
## 🔄 UPDATES AND MAINTENANCE
|
|
|
|
### Updating the Module
|
|
1. Download new `mod_http_upload_hmac.erl`
|
|
2. Backup existing module
|
|
3. Replace and recompile
|
|
4. Restart ejabberd
|
|
|
|
### Updating HMAC File Server
|
|
1. Stop service: `sudo systemctl stop hmac-file-server`
|
|
2. Backup configuration and data
|
|
3. Replace binary
|
|
4. Start service: `sudo systemctl start hmac-file-server`
|
|
|
|
---
|
|
|
|
## 📞 SUPPORT
|
|
|
|
- **GitHub Issues**: Report bugs and feature requests
|
|
- **Documentation**: Check project wiki for updates
|
|
- **Community**: Join XMPP development discussions
|
|
- **Security Issues**: Report privately to security contact
|
|
|
|
---
|
|
|
|
*Last updated: August 25, 2025*
|
|
*Version: HMAC File Server 3.2.2 + ejabberd integration*
|