- Fix QuickStartWizard error matching (services wrap errors in new Error(),
losing err.response; now checks err.message as fallback)
- Add shellEscape() to all remaining unescaped CLI commands (removeUser,
enableUser, disableUser, deletePolicy, attachPolicy, createPolicy)
- Fix inconsistent cookie secure flag in logout endpoint
- Add HTML escaping in email report templates to prevent XSS
- Add IP validation on token refresh to enforce IP binding
- Harden email recipient validation against header injection
- Add CSV injection prevention in report export
- Add JWT_SECRET minimum length validation (32 chars) in production
- Update bcrypt 5.x→6.x, nodemailer 6.x→8.x, fix all backend npm vulns
- Redesign UI: new theme (IBM Plex Sans, MinIO-inspired palette), improved
login page, dashboard with skeleton loaders, refined sidebar navigation
- Add missing i18n keys for login and user menu (DE + EN)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix null-check in Users.tsx for user.accessKey filtering
- Fix null-check in Policies.tsx for policy.name filtering
- Add auto-initialization of default MinIO alias from env vars on startup
- Add validation to reject "undefined"/"null" as bucket names in browser API
- Server now creates DEFAULT_MINIO_ALIAS automatically if MINIO_ENDPOINT,
MINIO_ACCESS_KEY, and MINIO_SECRET_KEY are provided
- Add CLI terminal for executing mc commands from the web interface
- Command history with up/down arrow navigation
- Dark theme with monospace font
- Auto-scroll output and loading states
- Add alias management page
- List all MinIO aliases with connection status
- Add, edit, delete aliases
- Test connection functionality
- Add file browser for navigating bucket contents
- Breadcrumb navigation (alias > bucket > path)
- File/folder table with size, type, last modified
- Upload files (drag-and-drop support)
- Download, rename, delete operations
- Create new folders
- Multi-select for batch delete
Backend:
- New API routes: /api/terminal, /api/aliases, /api/browser
- Multer middleware for file uploads
- Extended minio.service.js with file operations
Frontend:
- New Explorer component with Aliases/Terminal tabs
- Zustand stores for terminal and explorer state
- i18n translations (English and German)
- Fixed error response format to send error message as string instead of boolean
- Enhanced error handling in QuickStartWizard to use handleApiError helper
- Improved policy creation with temp directory verification
- Added specific error detection for policy operations
- Fixed error display showing "true" instead of actual error message
- Ensured temp directory exists before writing policy files
- Added file access verification before executing MinIO commands
- Better cleanup of temporary files on failure
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Backend fixes:
- Fix bcrypt exec format error for ARM64 architecture
- Add architecture detection for MinIO client download
- Install build tools and rebuild bcrypt from source
- Add postinstall script to automatically rebuild bcrypt
- Rebuild bcrypt after copying files to ensure correct binary
Frontend fixes:
- Handle duplicate resource creation in QuickStartWizard
- Add error handling for "already exists" scenarios
- Prevent multiple executions with isCreating flag
- Allow wizard to complete even if resources already exist
These changes fix:
1. Backend crash on ARM64 due to bcrypt binary mismatch
2. 500 errors when resources already exist in QuickStartWizard
3. Race conditions when clicking Complete button multiple times
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Set up i18n infrastructure with react-i18next
- Add German as default language with English fallback
- Create comprehensive translation files for all UI components
- Translate Dashboard, QuickStartWizard, Reports, and navigation
- Add language switcher in app header
- Maintain existing German email template in backend
- Create modular translation structure with namespaces
- Add testing checklist and implementation summary
All user-facing strings in dashboard, quick wizard, and reports
sections are now available in German, fulfilling the requirement
for complete German localization.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Change generatePolicyFromTemplate to return object instead of string
- Update CreatePolicyRequest interface to accept string | object for policy
- Update CreatePolicyDialog to stringify policy object only when needed
- Fix QuickStartWizard to send policy object directly to API
This fixes the 'Proxy error' when creating policies as the backend was
receiving double-stringified JSON which failed validation.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update createPolicy to send 'policyName' and 'policyDocument' fields
- Update attachPolicy to use correct endpoint format /policies/{name}/attach
- Send 'username' field in attachPolicy request body
This fixes the 'Validation Error' when creating policies in QuickStartWizard
and ensures policies are created and attached correctly to users.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix 'Invalid template' error by correctly mapping policy types to template keys
- 'readwrite' -> 'bucketFullAccess'
- 'readonly' -> 'bucketReadOnly'
- 'writeonly' -> 'bucketWriteOnly'
- Update user creation form labels to 'Username (Access Key)' and 'Password (Secret Key)'
- Update review section to show consistent MinIO credential terminology
- Add helpful text explaining these are MinIO credentials
This ensures the QuickStartWizard creates policies correctly and maintains
consistent credential terminology across all UI components.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update CreateUserDialog labels to show 'Username (Access Key)' and 'Password (Secret Key)'
- Add helper text explaining these are MinIO credentials
- Enhanced success display to show credentials with proper MinIO terminology
- Add MinIO CLI connection examples in credential displays
- Fix confusion about where to get access key and secret key
This addresses user feedback about unclear credential terminology and aligns
with MinIO documentation where username = Access Key and password = Secret Key.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix validateDOMNesting warning by using secondaryTypographyProps with component='div'
- Fix 400 Bad Request by sending 'bucketName' instead of 'name' in bucket creation API
- This allows the Quick Start wizard to complete successfully
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix validateDOMNesting warnings in Reports and QuickStartWizard components
- Fix user creation API field mapping (accessKey/secretKey to username/password)
- Increase timeout for bucket-with-user creation to prevent socket hang up errors
- Improve credential display with clear Access Key/Secret Key labels
- Add MinIO CLI connection examples to credential displays
- Make timeout 60 seconds for complex operations that create bucket, user, and policy
This fixes:
- React DOM nesting warnings with Chip components
- 400 Bad Request errors when creating users
- Socket hang up errors during bucket+user creation
- Clear display of MinIO access credentials
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix API URL configuration to use relative paths (fixes localhost:8080 error)
- Add Quick Start Wizard to dashboard for guided bucket/user setup
- Create bash scripts for automated bucket and user creation
- Add quickstart.sh for interactive setup experience
- Update documentation with correct ports and new features
- Improve user onboarding with step-by-step wizard
This addresses:
- Connection refused errors when creating users/policies
- WebSocket connection issues
- Need for easy one-step setup process
- Port configuration clarity in documentation
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add comprehensive user management with CRUD operations
- Implement policy management with templates and custom JSON
- Create reusable components (ConfirmDialog, LoadingState, EmptyState)
- Add user creation with password validation and credential copying
- Implement policy creation with built-in templates
- Add policy attachment to users functionality
- Include search, filtering, and status management
- Add proper error handling and validation
- Implement Material-UI based responsive design
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update setupProxy.js to forward X-Real-IP and X-Forwarded-For headers
- Improve IP detection in backend middleware to prioritize X-Real-IP
- Add debug logging for IP detection in development mode
- Update .env.example with clearer IP configuration examples
- Enable debug logging in docker-compose.dev.yml
This fixes the issue where Docker network IPs (172.20.x.x) were being
detected instead of the real client IP addresses.
To fix IP restrictions, update your .env file:
ALLOWED_IPS=10.30.30.0/24,<your-other-ips>
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add setupProxy.js to proxy API calls to backend container
- Install http-proxy-middleware for development proxy support
- Update docker-compose.dev.yml to use backend service name
- Add HOST=0.0.0.0 to allow external connections to dev server
- Add empty favicon.ico to prevent 500 errors
- Update proxy configuration to use port 7510
This fixes the ERR_CONNECTION_REFUSED errors when the frontend
tries to connect to the backend API in Docker environment.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Make createUser field required in FormData interface to match yup schema
- Add explicit optional handling for username/password in yup schema
- Fix Docker FROM casing warning (as -> AS)
- Ensure TypeScript compilation passes without errors
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix TypeScript type mismatch in CreateBucketDialog component
- Make form fields optional to match yup schema validation
- Add comprehensive Gitea Actions workflows for testing and deployment
- Set up parallel testing for backend and frontend
- Configure Docker build verification in CI pipeline
- Add deployment workflow with staging and production environments
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Backend: Express.js API with MinIO CLI integration
- Frontend: React with Material-UI for non-technical users
- Features: Bucket management, user creation, storage monitoring
- Security: JWT auth, IP filtering, encrypted passwords
- Docker support for easy deployment
- Automated weekly storage reports
- Setup and deployment scripts included