On web, NPM forward auth handles authentication at the proxy level. By the time the Flutter app loads, the user is already authenticated. Skip the redundant Flutter OIDC flow that was causing Riverpod "Ref disposed" errors from conflicting auth state updates. Mobile still uses Flutter's OIDC flow as before. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
8.9 KiB
8.9 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
[1.1.2] - 2026-01-04
Changed
- Web auth simplified: Skip Flutter OIDC on web - NPM forward auth handles it
- NPM authenticates at proxy level before app loads
- No more redundant OIDC redirect after NPM auth completes
- Fixes "Cannot use Ref after disposed" error from conflicting auth flows
- Mobile still uses Flutter OIDC flow
Added
- Logout now redirects to Authentik to end SSO session
- Clears local tokens AND invalidates Authentik session
- Uses OIDC end_session_endpoint from discovery document
- Redirects back to app after Authentik logout completes
[1.1.0] - 2026-01-04
Changed
- Dockerfile rebuild fix: Added
flutter cleanbefore build to prevent stale cached artifacts- VERSION build arg added for explicit cache busting
- Reordered build steps: clean → pub get → build_runner → health.json → flutter build
- Ensures deployed app always matches the version in health.json
Fixed
- Replaced deprecated
dart:htmlwithpackage:webin iframe_view_web.dart- Uses
web.HTMLIFrameElementinstead ofhtml.IFrameElement - Fixes deprecation warnings for Flutter 3.x web builds
- Uses
[1.0.12] - 2026-01-04
Changed
- Removed login page - auth now auto-initiates from AppScaffold
- No more redirect to /login, just auto-start OIDC if not authenticated
- Shows loading screen during auth, error screen on failure with retry
- Seamless experience when Authentik session exists
Removed
- Removed /login route and _LoginPage widget
[1.0.11] - 2026-01-04
Changed
- Web auth now extracts user info directly from JWT instead of syncing with core-api
- Eliminates CORS preflight issues with /auth/sync endpoint
- Decodes JWT claims (name, email, groups) client-side
- Bearer token will be used for API authentication
[1.0.10] - 2026-01-04
Fixed
- Fixed OIDC callback route being redirected to login before processing
- Moved callback route exception check BEFORE the auth redirect check in router
- This was preventing token exchange from ever happening
- Added favicon.ico to web root for proper browser tab icon display
[1.0.9] - 2026-01-04
Fixed
- Fixed OIDC callback Riverpod state modification error
- Deferred callback processing to
addPostFrameCallbackto avoid modifying state during widget build
- Deferred callback processing to
[1.0.8] - 2026-01-04
Changed
- Switched from hash-based URLs (
/#/login) to path-based URLs (/login)- Required for OIDC callback to work correctly
- Uses conditional import to avoid breaking mobile/desktop builds
[1.0.7] - 2026-01-04
Fixed
- Fixed OIDC PKCE state loss across browser redirect
- Code verifier and state now persist in sessionStorage instead of memory
- Prevents "No code verifier" error after Authentik redirect
[1.0.6] - 2026-01-04
Fixed
- Fixed version generation in CI/CD builds
- Removed generated files (version.g.dart, health.json) from git tracking
- These files are now regenerated from pubspec.yaml during Docker build
[1.0.5] - 2026-01-04
Changed
- Web authentication now uses OIDC instead of NPM forward auth
- Added
OidcServiceWebfor browser redirect-based Authorization Code flow with PKCE - Added
/callbackroute to handle Authentik redirect after login - Login page now shows "Sign in with Authentik" button for both web and mobile
- Tokens stored in SharedPreferences and synced with core-api via
/auth/sync
- Added
- Added web utility functions (
web_utils.dart) with conditional imports for non-web platforms - Added
cryptoandwebpackages for PKCE SHA-256 and browser API access
Fixed
- Removed cross-origin cookie dependency that caused authentication failures on web
[1.0.4] - 2026-01-03
Added
health.jsongenerated at build time with app version infohealth.htmlnow displays version, title, and status from health.json
[1.0.3] - 2026-01-03
Fixed
- Fixed auth endpoint path:
/auth/me→/auth/users/me
[1.0.2] - 2026-01-03
Fixed
- Production Docker build now uses correct API URLs
- Added
--dart-defineflags forCORE_API_URLandTATLOCK_API_URL - This enables
requiresAuth=trueso authentication is actually triggered
- Added
- Updated AGENTS.md with clear service port reference table
[1.0.1] - 2026-01-03
Fixed
- Web authentication now works correctly with NPM forward auth
- Dio client sends cookies with requests via
withCredentials: true - Added platform-specific adapters (native vs web) for proper cookie handling
- Dio client sends cookies with requests via
[1.0.0] - 2026-01-03
Added
- Authentication System - Dual-flow auth supporting web (NPM forward auth) and mobile (OIDC)
AuthStatemodel with roles, permissions, and user preferencesAuthProviderwith automatic web session detection via/auth/me- Permission system with Domain/Action enums and hierarchical access levels
PermissionGateandAdminGatewidgets for UI permission checksRolemodel with{domain}.{category}:{action}format parsing- Route guards redirect unauthenticated users to login page
- Login page with Authentik OAuth redirect
- Mobile auth platform configuration (iOS URL schemes, Android AppAuth)
- Comprehensive auth test suite (60 unit tests)
Changed
- API interceptor skips Bearer tokens on web (uses cookies via NPM forward auth)
- Router integrates auth state for protected route access
- First stable release - Core functionality complete for home lab dashboard
[0.3.3] - 2026-01-03
Added
- Health check endpoint (
/health.html) for Portainer container monitoring - Local search filtering in DataGrid (filters cached data client-side)
- Container status badges now reflect health status (green=healthy, orange=unhealthy)
ContainerHealthenum for parsing Docker health status from status string
Changed
- Standardized header bar heights to 56px across all panels
- Container grid now correctly parses Docker API JSON format (capitalized keys)
- Status column displays clean uptime (stripped health indicators)
- Status badges have consistent minimum width (90px)
- Search bar styling improved (36px height, visible border, proper background)
- Quick links now properly persist link type (iframe vs new tab)
- Iframe switching now closes existing content before loading new link
Fixed
- Quick links form properly saves changes and refreshes panel
ContainerStatetype conflict resolved (removed duplicate enum)- Container data parsing handles null values safely
Branding
- Updated favicon and icons with Tatlock bucket logo
- Updated manifest.json with Tatlock branding
[0.3.2] - 2025-01-02
Changed
- API defaults now use LAN IPs for local development (no auth required)
- Auth interceptor skips authentication when using LAN endpoints
[0.3.0] - 2025-12-30
Added
- docs/UI_LAYOUT.md - Responsive layout specification with "Rooms of the Estate" navigation
Changed
- Directory structure now mirrors room navigation (front_hall/, control_room/, parlor/, library/, study/)
- Chat moved to top-level
lib/chat/(omnipresent, not a room) - Updated ARCHITECTURE.md and PLAN.md to reflect room-based structure
- Version generation now automated via build_runner (replaces manual script)
lib/version.g.dartauto-generated frompubspec.yamlduring build
[0.2.0] - 2024-12-30
Added
- Phase 1: Foundation complete
- Clean Architecture folder structure (
core/,features/,shared/,routing/) - Full dependency stack: Riverpod, Dio, go_router, freezed, flex_color_scheme
- Core infrastructure:
core/config/app_config.dart- Environment configurationcore/theme/app_theme.dart- Material 3 theming with FlexColorSchemecore/theme/theme_provider.dart- Theme state with persistencecore/error/app_exception.dart- Typed exception hierarchycore/api/api_client.dart- Dio HTTP clients for Core API and Tatlock APIcore/api/api_interceptors.dart- Auth, logging, error interceptorscore/auth/auth_provider.dart- Authentication state management
- Routing with go_router and shell route for navigation
- Adaptive scaffold with responsive navigation (rail/bottom nav)
- Dashboard page placeholder with welcome card and stat cards
[0.1.0] - 2024-12-30
Added
- Initial Flutter project setup with all platforms (web, android, ios, macos, linux, windows)
- Build-time version generation from pubspec.yaml (
dart run tool/generate_version.dart) - Version logging on app startup
- Project documentation (PHILOSOPHY.md, README.md, AGENTS.md, PLAN.md)
- Phase 0 technical documentation:
- docs/ARCHITECTURE.md - Clean Architecture patterns
- docs/API_INTEGRATION.md - Backend API reference
- docs/DEPLOYMENT.md - Docker and infrastructure setup
- docs/DATAGRID.md - DataGrid component specification
- docs/THEMING.md - Material 3 theming guide