Backend:
- SMB config parser/writer (_parse_smb_conf, _write_smb_conf) for
safe whole-file rewrites instead of append-only
- NFS exports parser/writer (_parse_exports, _write_exports) with
support for disabled (commented-out) exports
- DELETE/PATCH/toggle endpoints for SMB and NFS shares
- parse_smb() now returns enabled field (reads available = no)
- get_nfs_shares() uses the new parser and returns enabled field
- Replace HTTP Basic Auth with Flask session auth (secret key derived
from MICRONAS_PASS so sessions survive restarts)
- /login GET/POST, /logout routes
Frontend:
- Login page (templates/login.html) with same dark theme
- Sign out button in header
- Edit modal pre-filled with current share values
- Delete buttons wired up (with confirm dialog)
- Enable/Disable toggle per share (green/grey dot status indicator)
- Disabled shares shown at reduced opacity
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Full UI redesign: GitHub-dark palette, custom CSS vars, better
contrast, card layout, cleaner tables and typography
- Dashboard auto-refresh every 30s (was 60s)
- Remove Quotas tab; each share row now has a Quota button that opens
a modal pre-filled with the share's valid users (SMB) or path (NFS)
- Replace all alert() with Bootstrap toast notifications
- Add Users tab: list system users (uid >= 1000) with SMB status,
create user (useradd + smbpasswd), delete user, change SMB password
- Backend: /api/users GET/POST, /api/users/<name> DELETE,
/api/users/<name>/password POST
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>