Files
sharey/docs/CONFIG_SYSTEM.md
2025-09-27 17:45:52 +01:00

148 lines
3.5 KiB
Markdown

# Sharey Configuration System
## Overview
Sharey now features a comprehensive JSON-based configuration system that replaces environment variables with a more structured and feature-rich approach.
## Configuration Files
### Primary Configuration: `config.json`
```json
{
"b2": {
"application_key_id": "your_key_id_here",
"application_key": "your_application_key_here",
"bucket_name": "your_bucket_name_here"
},
"flask": {
"host": "127.0.0.1",
"port": 8866,
"debug": true
},
"upload": {
"max_file_size_mb": 100,
"allowed_extensions": [".jpg", ".jpeg", ".png", ".gif", ".pdf", ".txt", ".doc", ".docx", ".zip", ".mp4", ".mp3"]
},
"paste": {
"max_length": 1000000
},
"security": {
"rate_limit_enabled": false,
"max_uploads_per_hour": 50
}
}
```
### Fallback: Environment Variables
For backwards compatibility, Sharey still supports `.env` files and environment variables.
## Configuration Management Tools
### Setup Script: `setup.py`
- Creates `config.json` from template
- Sets up virtual environment
- Installs dependencies
- Validates configuration
### Configuration Utility: `config_util.py`
```bash
python config_util.py show # Display current config
python config_util.py validate # Validate configuration
python config_util.py set # Interactive setup
python config_util.py reset # Reset to defaults
```
### Test Utility: `test_b2.py`
- Tests B2 connection
- Validates credentials
- Shows configuration summary
## New Features
### File Upload Controls
- **File size limits**: Configurable max file size in MB
- **File type restrictions**: Whitelist of allowed extensions
- **Validation**: Automatic file type checking
### Paste Controls
- **Length limits**: Configurable maximum paste length
- **Validation**: Automatic length checking
### Flask Configuration
- **Host/Port**: Configurable server settings
- **Debug mode**: Environment-specific settings
### Security Features (Future)
- **Rate limiting**: Configurable upload limits
- **Extensible**: Ready for additional security features
## Configuration Loading Priority
1. **config.json** (if exists)
2. **Environment variables** (fallback)
3. **Built-in defaults** (last resort)
## Benefits of JSON Configuration
### ✅ **Structured Data**
- Hierarchical organization
- Type safety (strings, numbers, booleans, arrays)
- Better validation
### ✅ **Feature Rich**
- Upload restrictions
- File type filtering
- Paste length limits
- Server configuration
### ✅ **User Friendly**
- Interactive setup utility
- Configuration validation
- Clear error messages
- Comprehensive documentation
### ✅ **Developer Friendly**
- Easy to extend
- Version controllable (with secrets excluded)
- IDE support with syntax highlighting
- Better tooling support
### ✅ **Backwards Compatible**
- Still supports .env files
- Smooth migration path
- No breaking changes
## Migration from .env
Old `.env` approach:
```env
B2_APPLICATION_KEY_ID=key123
B2_APPLICATION_KEY=secret456
B2_BUCKET_NAME=mybucket
```
New `config.json` approach:
```json
{
"b2": {
"application_key_id": "key123",
"application_key": "secret456",
"bucket_name": "mybucket"
}
}
```
## Quick Start
1. **Run setup**: `python setup.py`
2. **Configure**: `python config_util.py set`
3. **Test**: `python test_b2.py`
4. **Run**: `python app.py`
## Security Considerations
- `config.json` is excluded from git by default
- Sensitive data can be hidden in display utilities
- Environment variable fallback for production deployments
- Configuration validation prevents common mistakes