- Added /users/auth-mode public endpoint to detect LDAP status
- Updated frontend to call getAuthMode() instead of hardcoded false
- Login page now automatically switches to enterprise mode when LDAP is enabled
- Fixes missing LDAP user login UI that was previously disabled with TODO comment
This restores the functionality that was commented out earlier where the login
page would auto-detect whether to show local user list or enterprise username input.
- Fix password encoding: Convert password to UTF-8 bytes for LDAP protocol compatibility
- Add 'user' field to TokenResponse schema for frontend compatibility
- Update login endpoint to populate user object in response
- Resolves 'Invalid Protocol Password' error on LDAP login attempts
The issue was that frontend expected response.user but backend only returned
individual fields (user_id, username, role), causing localStorage assignment to fail.
- Create frontend/colors.mjs as SSOT for all design colors
- Create scripts/generate-css-vars.mjs to auto-generate CSS variables
- Update tailwind.config.ts to import colors from colors.mjs
- Update frontend/package.json: add 'generate-css-vars' script to build pipeline
- Update start_servers.py: include CSS variable generation before npm build
- All color changes now require only one edit in colors.mjs
- Build process auto-syncs CSS variables and Tailwind colors
Eliminates DRY violation where colors were duplicated in:
- tailwind.config.ts (Tailwind utility classes)
- globals.css (CSS custom properties)
Single source of truth approach ensures:
✓ No inconsistency between Tailwind and CSS variables
✓ One place to update colors for all contexts
✓ Automated CSS variable generation on every build
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>