# WebDrop Bridge Configuration Guide

## Configuration File Location

WebDrop Bridge supports two configuration methods:

1. **JSON Configuration File** (Recommended for Azure URL mapping)
   - Windows: `%APPDATA%\webdrop_bridge\config.json`
   - macOS/Linux: `~/.config/webdrop_bridge/config.json`

2. **Environment Variables** (`.env` file in project root)
   - Used as fallback if JSON config doesn't exist

## JSON Configuration Format

Create a `config.json` file with the following structure:

```json
{
  "app_name": "WebDrop Bridge",
  "webapp_url": "https://dev.agravity.io/",
  "url_mappings": [
    {
      "url_prefix": "https://devagravitystg.file.core.windows.net/devagravitysync/",
      "local_path": "Z:"
    }
  ],
  "allowed_roots": [
    "Z:\\"
  ],
  "allowed_urls": [],
  "check_file_exists": true,
  "auto_check_updates": true,
  "update_check_interval_hours": 24,
  "log_level": "INFO",
  "log_file": "logs/webdrop_bridge.log",
  "window_width": 1024,
  "window_height": 768,
  "enable_logging": true
}
```

## Configuration Options

### Core Settings

- **`webapp_url`** (string): URL of the web application to load
  - Example: `"https://dev.agravity.io/"`
  - Supports `http://`, `https://`, or `file:///` URLs

- **`url_mappings`** (array): Azure Blob Storage URL to local path mappings
  - Each mapping has:
    - `url_prefix`: Azure URL prefix (must end with `/`)
    - `local_path`: Local drive letter or path
  - Example:
    ```json
    {
      "url_prefix": "https://dev.file.core.windows.net/devagravitysync/",
      "local_path": "Z:"
    }
    ```

- **`allowed_roots`** (array): Whitelisted root directories for file access
  - Security feature: Only files within these directories can be dragged
  - Example: `["Z:\\", "C:\\Users\\Public"]`

### Azure URL Mapping Example

When the web application provides a drag URL like:
```
https://devagravitystg.file.core.windows.net/devagravitysync/aN5PysnXIuRECzcRbvHkjL7g0/Hintergrund_Agravity.png
```

It will be converted to:
```
Z:\aN5PysnXIuRECzcRbvHkjL7g0\Hintergrund_Agravity.png
```

### Security Settings

- **`check_file_exists`** (boolean): Validate files exist before allowing drag
  - Default: `true`
  - Set to `false` only for testing

- **`allowed_urls`** (array): Allowed URL patterns for web content
  - Empty array = no restriction
  - Example: `["dev.agravity.io", "*.example.com"]`

### Update Settings

- **`auto_check_updates`** (boolean): Automatically check for updates on startup
  - Default: `true`

- **`update_check_interval_hours`** (number): Hours between update checks
  - Default: `24`

### UI Settings

- **`window_width`**, **`window_height`** (number): Initial window size in pixels
  - Default: `1024` x `768`

- **`log_level`** (string): Logging verbosity
  - Options: `"DEBUG"`, `"INFO"`, `"WARNING"`, `"ERROR"`, `"CRITICAL"`
  - Default: `"INFO"`

- **`log_file`** (string, optional): Path to log file
  - If `null` or not specified: Logs to `%APPDATA%\webdrop_bridge\logs\webdrop_bridge.log` (Windows) or `~/.local/share/webdrop_bridge/logs/webdrop_bridge.log` (macOS/Linux)
  - If relative path: Resolved relative to the app data directory (same as above location)
  - If absolute path: Used as-is
  - Default: `null` (uses AppData directory for permissions compatibility)
  - ℹ️ **Important**: Logs are always stored in the user's AppData directory to ensure the app can write logs in both development and installed scenarios

- **`enable_logging`** (boolean): Whether to write logs to file
  - Default: `true`

## Quick Start

1. Copy `config.example.json` to your config directory:
   ```powershell
   # Windows
   mkdir "$env:APPDATA\webdrop_bridge"
   copy config.example.json "$env:APPDATA\webdrop_bridge\config.json"
   ```

2. Edit the configuration file with your Azure URL mappings and local paths

3. Restart WebDrop Bridge

## Multiple URL Mappings

You can configure multiple Azure storage accounts:

```json
{
  "url_mappings": [
    {
      "url_prefix": "https://storage1.file.core.windows.net/container1/",
      "local_path": "Z:"
    },
    {
      "url_prefix": "https://storage2.file.core.windows.net/container2/",
      "local_path": "Y:"
    }
  ],
  "allowed_roots": [
    "Z:\\",
    "Y:\\"
  ]
}
```

## Environment Variable Fallback

If no JSON config exists, WebDrop Bridge will load from `.env`:

```env
APP_NAME=WebDrop Bridge
WEBAPP_URL=https://dev.agravity.io/
ALLOWED_ROOTS=Z:/
LOG_LEVEL=INFO
WINDOW_WIDTH=1024
WINDOW_HEIGHT=768
```

**Note:** Environment variables don't support `url_mappings`. Use JSON config for Azure URL mapping.

## Troubleshooting

### "No mapping found for URL"
- Check that `url_prefix` matches the Azure URL exactly (including trailing `/`)
- Verify `url_mappings` is configured in your JSON config file
- Check logs in `logs/webdrop_bridge.log`

### "Path is not within allowed roots"
- Ensure the mapped local path (e.g., `Z:`) is listed in `allowed_roots`
- Make sure the drive is mounted and accessible

### "File does not exist"
- Verify the Azure sync is working and files are available locally
- Set `check_file_exists: false` temporarily for testing
- Check that the path mapping is correct

## Example Configurations

### Production (Agravity DEV)

```json
{
  "webapp_url": "https://dev.agravity.io/",
  "url_mappings": [
    {
      "url_prefix": "https://devagravitystg.file.core.windows.net/devagravitysync/",
      "local_path": "Z:"
    }
  ],
  "allowed_roots": ["Z:\\"],
  "log_level": "INFO"
}
```

### Development (Local Testing)

```json
{
  "webapp_url": "file:///./webapp/index.html",
  "url_mappings": [
    {
      "url_prefix": "https://test.blob.core.windows.net/test/",
      "local_path": "C:\\temp\\test"
    }
  ],
  "allowed_roots": ["C:\\temp\\test"],
  "check_file_exists": false,
  "log_level": "DEBUG"
}
```
