* feat: ratelimit pin not working with baseUrl fix
* Remove white space changes
* Refactor PIN verification error handling and input state management
- Improve error handling in login page JavaScript
- Standardize API response structure with explicit success and error fields
- Enhance user feedback for PIN authentication failures
- Implement more robust input state management during login attempts
* Fix PIN verification logic in root route
- Improve PIN verification check to handle missing cookie scenario
- Add explicit check for cookie existence before comparing PIN
- Enhance root route authentication logic for more robust access control
- Modify fetch URLs to use '/api/auth/' prefix for PIN verification endpoints
- Update '/api/pin-required' and '/api/verify-pin' to '/api/auth/pin-required' and '/api/auth/verify-pin'
- Ensure consistent routing for authentication-related API calls
Closes#31
- Introduce BASE_URL environment variable for flexible application URL configuration
- Update .env.example, docker-compose, and README with new configuration option
- Implement BASE_URL validation in config module
- Modify server logging to use configurable base URL
- Provide default base URL generation when not explicitly set
Chores & Configuration
• Enhanced development setup: optimized Dockerfile, refined scripts, and improved .gitignore.
• Updated docker-compose for better dev/prod separation.
• Improved documentation in README and source files.
Features & Enhancements
• Refactored project structure with modular architecture.
• Improved testing infrastructure and integration tests.
• Enhanced file upload logic, client-side handling, and API routes.
• Implemented robust server shutdown, rate limiting, and cleanup mechanisms.
• Improved upload progress tracking with UI enhancements.
• Strengthened security in PIN authentication and cookie handling.
Refactors & Fixes
• Cleaned up test infrastructure, logging, and error handling.
• Simplified API route paths and improved middleware.
• Fixed incorrect total storage size reporting.
• Optimized logging verbosity based on environment.
Documentation
• Expanded project documentation and comments for clarity.
* feat: Add development environment configuration
- Create dev/dev.sh script for simplified development workflow
- Add docker-compose.dev.yml for local development setup
- Update .gitignore to exclude dev directory except specific files
- Add development section to README.md with guide reference
* docs: Update README and docker-compose with comprehensive setup instructions and configuration options
- Add detailed upload progress tracking with speed and time remaining
- Implement dynamic waiting messages during upload initialization
- Create utility functions for file size and speed formatting
- Improve progress bar UI with more informative status details
- Add interval-based speed and progress updates for smoother UI
- 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
- Update server-side upload initialization to always refresh batch activity timestamp
- Enhance client-side file grouping to consistently track batch IDs for files and folders
- Modify drop and file selection handlers to generate batch IDs for all upload scenarios
- Ensure batch ID is preserved and used consistently across file upload groups
- Add automatic batch ID generation for single file uploads
- Generate unique batch ID using timestamp and random string
- Enhance batch ID validation to handle single file and multi-file upload scenarios
- Improve error handling for batch ID format validation
- Refactor getUniqueFilePath and getUniqueFolderPath to use async/await and atomic file operations
- Enhance upload initialization to handle file and folder naming conflicts more robustly
- Implement file handle management to prevent resource leaks
- Add error handling for file and folder creation scenarios
- Ensure parent directories are created recursively when needed
- Add batch ID validation function with specific format requirements
- Generate more secure and unique batch IDs using timestamp and random string
- Update client-side batch ID generation to create consistent, unique identifiers
- Enhance upload initialization route to validate batch ID before processing
- Modify FileUploader to use generated batch ID during uploads
- Add support for batch uploads with unique folder and file naming
- Implement getUniqueFilePath and getUniqueFolderPath to prevent file/folder overwrites
- Add batch ID tracking for folder uploads
- Enhance client-side file handling to support batch uploads
- Improve file path generation and logging for uploads
- Add jsdelivr.net to allowed script and style sources
- Include data: and blob: for image sources
- Enhance security by explicitly defining allowed external resources
- Add express-rate-limit for API and upload routes
- Implement optional file extension filtering via ALLOWED_EXTENSIONS
- Add security headers middleware
- Update docker-compose image to official repository
- Update README with new environment variable and filtering documentation
- Sanitize filename to escape special characters
- Use array syntax for execAsync to prevent shell injection
- Disable shell execution for safer command handling
- Improve logging with sanitized filename
- Add file size formatting to notifications with auto-scaling units (B, KB, MB, GB, TB)
- Add APPRISE_SIZE_UNIT environment variable for fixed size units
- Update default notification message to include file size: "New file uploaded: {filename} ({size})"
- Fix filename reference in notifications to use safeFilename
- Fix async/await handling in upload chunk handler
- Add size formatting documentation to README
- Update environment variable documentation
Example notification: "New file uploaded: example.pdf (2.54MB)"