feat: Add auto upload configuration and update environment settings

- Introduce AUTO_UPLOAD environment variable to enable automatic file uploads
- Update .env.example with new configuration options
- Modify docker-compose.yml to use new image and comment out default settings
- Update README.md to document AUTO_UPLOAD feature
- Implement client-side auto upload logic in index.html
- Add server-side logging for auto upload status
chore: Refactor notification message template and size unit handling
This commit is contained in:
Greirson Lee-Thorp
2025-02-03 22:11:21 -08:00
parent 38fc5994dd
commit 1a5bc93e01
5 changed files with 26 additions and 15 deletions

View File

@@ -1,14 +1,15 @@
# Server Configuration
PORT=3000 # The port the server will listen on
DUMBDROP_TITLE=DumbDrop # Site title displayed in header (default: DumbDrop)
# Upload Limits
MAX_FILE_SIZE=1024 # Maximum file size in MB (default: 1024 MB / 1 GB)
# Upload Settings
MAX_FILE_SIZE=1024 # Maximum file size in MB
AUTO_UPLOAD=false # Enable automatic upload on file selection
# Security
DUMBDROP_PIN= # Optional PIN protection (4-10 digits, leave empty to disable)
DUMBDROP_PIN= # Optional PIN protection (4-10 digits)
DUMBDROP_TITLE=DumbDrop # Site title displayed in header
# Notifications
APPRISE_URL= # Apprise URL for notifications (leave empty to disable)
APPRISE_MESSAGE= # Custom message for notifications (default: "New file uploaded: {filename} ({size}), Storage used: {storage}")
APPRISE_SIZE_UNIT= # Size unit for notifications (B, KB, MB, GB, TB). Leave empty for auto
# Notifications (Optional)
APPRISE_URL= # Apprise URL for notifications (e.g., tgram://bottoken/ChatID)
APPRISE_MESSAGE=New file uploaded - {filename} ({size}), Storage used {storage}
APPRISE_SIZE_UNIT=auto # Size unit for notifications (auto, B, KB, MB, GB, TB)

View File

@@ -32,6 +32,7 @@ No auth (unless you want it now!), no storage, no nothing. Just a simple file up
| APPRISE_URL | Apprise URL for notifications | None | No |
| APPRISE_MESSAGE | Notification message template | New file uploaded {filename} ({size}), Storage used {storage} | No |
| APPRISE_SIZE_UNIT| Size unit for notifications | Auto | No |
| AUTO_UPLOAD | Enable automatic upload on file selection | false | No |
## Notification Templates
The notification message supports the following placeholders:

View File

@@ -1,4 +1,3 @@
name: Dumb Drop
services:
dumbdrop:
ports:
@@ -10,7 +9,7 @@ services:
MAX_FILE_SIZE: 1024
DUMBDROP_PIN: 123456
# APPRISE_URL: ntfys://
APPRISE_MESSAGE: New file uploaded - {filename} ({size}), Storage used {storage}
APPRISE_SIZE_UNIT: auto
image: abite3/dumbdrop:latest
# APPRISE_MESSAGE: New file uploaded - {filename} ({size}), Storage used {storage}
# AUTO_UPLOAD: false
image: dumbwareio/dumbdrop:latest
# build: .

View File

@@ -60,6 +60,7 @@
const CHUNK_SIZE = 1024 * 1024; // 1MB chunks
const MAX_RETRIES = 3;
const RETRY_DELAY = 1000;
const AUTO_UPLOAD = '{{AUTO_UPLOAD}}' === 'true';
// Utility function to generate a unique batch ID
function generateBatchId() {
@@ -315,6 +316,7 @@
getAllFileEntries(items).then(newFiles => {
files = newFiles;
updateFileList();
if (AUTO_UPLOAD) startUploads();
});
} else {
// Handle single file drop
@@ -325,6 +327,7 @@
file.batchId = batchId;
});
updateFileList();
if (AUTO_UPLOAD) startUploads();
}
}
@@ -336,6 +339,7 @@
file.batchId = batchId;
});
updateFileList();
if (AUTO_UPLOAD) startUploads();
}
function handleFolders(e) {
@@ -348,6 +352,7 @@
file.batchId = batchId;
});
updateFileList();
if (AUTO_UPLOAD) startUploads();
}
function updateFileList() {
@@ -367,7 +372,7 @@
fileList.appendChild(fileItem);
});
uploadButton.style.display = files.length > 0 ? 'block' : 'none';
uploadButton.style.display = (!AUTO_UPLOAD && files.length > 0) ? 'block' : 'none';
}
function formatFileSize(bytes) {

View File

@@ -15,9 +15,10 @@ const port = process.env.PORT || 3000;
const uploadDir = './uploads'; // Local development
const maxFileSize = parseInt(process.env.MAX_FILE_SIZE || '1024') * 1024 * 1024; // Convert MB to bytes
const APPRISE_URL = process.env.APPRISE_URL;
const APPRISE_MESSAGE = process.env.APPRISE_MESSAGE || 'New file uploaded - {filename} ({size}), Storage used: {storage}';
const APPRISE_MESSAGE = process.env.APPRISE_MESSAGE || 'New file uploaded - {filename} ({size}), Storage used {storage}';
const siteTitle = process.env.DUMBDROP_TITLE || 'DumbDrop';
const APPRISE_SIZE_UNIT = process.env.APPRISE_SIZE_UNIT;
const AUTO_UPLOAD = process.env.AUTO_UPLOAD === 'true';
// Brute force protection setup
const loginAttempts = new Map(); // Stores IP addresses and their attempt counts
@@ -200,7 +201,8 @@ app.get('/', (req, res) => {
}
// Read the file and replace the title
let html = fs.readFileSync(path.join(__dirname, 'public', 'index.html'), 'utf8');
html = html.replace(/{{SITE_TITLE}}/g, siteTitle); // Use global replace
html = html.replace(/{{SITE_TITLE}}/g, siteTitle);
html = html.replace('{{AUTO_UPLOAD}}', AUTO_UPLOAD.toString());
res.send(html);
});
@@ -479,6 +481,9 @@ app.listen(port, () => {
log.info(`Custom title set to: ${siteTitle}`);
}
// Add auto upload status logging
log.info(`Auto upload is ${AUTO_UPLOAD ? 'enabled' : 'disabled'}`);
// Add Apprise configuration logging
if (APPRISE_URL) {
log.info('Apprise notifications enabled');