mirror of
https://github.com/RoastSlav/quickdrop.git
synced 2026-01-06 14:40:13 -06:00
v1.5.0
CI/CD: Jenkins pipeline updates (specify JDK/Maven tools, version-based pipeline fixes, adjust for new Jenkins setup) Java/Spring upgrades & rollback (try Java 25 + Spring Boot 3.5.6 + GC/ObjectHeader experiments, then revert back to Java 21) Add/refresh Copilot instructions Controller logging + rename (add logging to FileViewController, rename PasswordController → PasswordViewController) UI refactors + formatting pass (general reformatting and readability improvements across templates/scripts) Tailwind migration cleanup (remove Bootstrap script references, Tailwind updates, dark theme fixes) Template layout/styling improvements (dashboard, settings, file history, file view pages—consistent layout and styling with Tailwind) Keep Indefinitely + Hide From List rules & option (add option to disable “Keep Indefinitely”, refine/adjust session + status checks, align UI layout) Unified file history logging (migrate download/renewal logs into one system; refactor repository/service; update downloads section to log uploads/renewals/downloads) Share token overhaul (better validation + uniqueness; download endpoint uses token directly; delete tokens when deleting a file; refine ShareViewController mappings) Security/static resources (permit static resources through filter chain) Notifications system (Discord + email settings, NotificationService, testing UI + endpoint, batching with configurable minutes, richer formatting + detailed results, improve deletion notifications) CSRF adjustments for notification testing (CSRF token handling, add allowed header X-XSRF-TOKEN, ignore CSRF for the test endpoint where needed) Folder upload support (SQL migration rename, directory picker + manifest improvements, better folder tree rendering with fallbacks, improved upload cleanup) Upload/file view UX refresh (new drop zone/buttons design, theme toggler improvements, responsive/accessibility navigation improvements incl. close-on-outside-click) File preview feature (enable/disable previews + max size settings; support images/text + PDF/JSON/CSV + more extensions; preview UI styling; normalize language extensions; add Highlight.js syntax highlighting + dark theme styles; remove integrity/crossorigin attrs) Navigation reorg + styling (reorganize nav links; ensure light/dark contrast; consistent hover/padding/spacing) Pagination + caching + search (pagination for dashboard/file list, caching config, search with pagination) Settings validation + cron UX (validate settings inputs; cron validation; show next run time; layout fixes for cron section) Service/util refactors & cleanup (dead code cleanup; DataValidator null handling; improve ScheduleService cron handling + deletion logic; improve NotificationService RestTemplate + flushing; refactor FileUtils file type/previewability; move static helpers; improve preview handling path) Dependencies/versioning/docs (update pom.xml parent/deps, bump version to 1.5.0 in pom.xml + application.properties, update README)
QuickDrop
QuickDrop is a self-hosted file sharing app for fast, anonymous uploads with chunked transfer, optional encryption, per-file passwords, share tokens with expiry/download limits, and an admin console to govern storage limits, lifetime policies, cleanup schedules, notifications, and privacy settings.
Features
Uploads & storage
- Anonymous uploads with chunked upload support for reliability on large files.
- Configurable max file size, storage paths (files/logs), and max lifetime (default 30d) with “keep indefinitely” (admin-only toggleable) and renewals.
- Optional encryption at rest for stored files; per-file passwords hash + encrypt uploads when enabled.
Sharing & access
- Direct links plus token-based share links with expirations and max-download limits; QR code generation for quick sharing.
- Hidden files (link-only) and option to disable the public file list entirely; switchable default home page (upload vs. file list).
- On-the-fly decryption for downloads; streaming responses to avoid holding files in memory.
Security
- Whole-app password mode and separate admin password gate for the admin area.
- Per-file passwords; server-side session tokens for admin and file access.
- CSRF cookie enabled.
Admin & settings
- Single-page settings UI; adjustments apply without app restart.
- Admin dashboard with file list, history, toggle hidden/visibility, delete, extend life, keep indefinitely switches, and admin dashboard button toggle.
- Configurable session timeout, file deletion cron expression, and feature flags (file list enabled, admin button enabled, encryption enabled).
Notifications & logging
- Unified file history log for uploads, renewals, and downloads (IP + user agent).
- Email and Discord webhook notifications with optional batching (interval minutes configurable).
Cleanup & maintenance
- Scheduled cleanup for expired files, missing-file DB rows, and expired share tokens.
Technologies Used
- Java 21
- Spring Boot 3.5.x (Spring Web/MVC, Actuator)
- Spring Security (app/admin/password flows, CSRF cookie)
- Spring Data JPA with Hibernate ORM 6.6 (community dialects)
- Spring Cloud Context (refresh scope)
- Flyway for DB migrations
- SQLite with SQLite JDBC driver
- HikariCP connection pooling
- Thymeleaf with Spring Security extras
- Tailwind CSS + custom JS/CSS assets
- Spring Mail (SMTP notifications)
- Maven build tooling
- Docker image for deployment
Getting Started
Installation
Installation with Docker
- Pull the Docker image:
docker pull roastslav/quickdrop:latest
- Run the Docker container:
docker run -d -p 8080:8080 roastslav/quickdrop:latest
Optional: Use volumes to persist the uploaded files when you update the container:
docker run -d -p 8080:8080 \
-v /path/to/db:/app/db \
-v /path/to/log:/app/log \
-v /path/to/files:/app/files \
roastslav/quickdrop
Installation without Docker
Prerequisites
- Java 21 or higher
- Maven
- SQLite
- Clone the repository:
git clone https://github.com/RoastSlav/quickdrop.git
cd quickdrop
- Build the application:
mvn clean package
- Run the application:
java -jar target/quickdrop.jar
Updates
To update the app, you need to:
- Stop and remove the old container.
- Pull the new image.
- Start the updated container.
If you want to ensure file and database persistence between updates, you can use Docker volumes. (Check docker installation above)
License
This project is licensed under the MIT License. See the LICENSE file for details.
Languages
Java
46.6%
HTML
32.9%
JavaScript
17.9%
CSS
2.4%
Dockerfile
0.2%