Files
tatlock-ui/CHANGELOG.md
T
Jeroen SchweitzerandClaude Opus 4.5 f0b32ff68b
Build and Push / release (push) Successful in 4s
Build and Push / build (push) Successful in 3m9s
fix(auth): skip Flutter OIDC on web, rely on NPM forward auth
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>
2026-01-04 15:01:33 +01:00

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 clean before 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:html with package:web in iframe_view_web.dart
    • Uses web.HTMLIFrameElement instead of html.IFrameElement
    • Fixes deprecation warnings for Flutter 3.x web builds

[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 addPostFrameCallback to avoid modifying state during widget build

[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 OidcServiceWeb for browser redirect-based Authorization Code flow with PKCE
    • Added /callback route 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 web utility functions (web_utils.dart) with conditional imports for non-web platforms
  • Added crypto and web packages 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.json generated at build time with app version info
  • health.html now 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-define flags for CORE_API_URL and TATLOCK_API_URL
    • This enables requiresAuth=true so authentication is actually triggered
  • 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

[1.0.0] - 2026-01-03

Added

  • Authentication System - Dual-flow auth supporting web (NPM forward auth) and mobile (OIDC)
    • AuthState model with roles, permissions, and user preferences
    • AuthProvider with automatic web session detection via /auth/me
    • Permission system with Domain/Action enums and hierarchical access levels
    • PermissionGate and AdminGate widgets for UI permission checks
    • Role model 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)
  • ContainerHealth enum 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
  • ContainerState type 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.dart auto-generated from pubspec.yaml during 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 configuration
    • core/theme/app_theme.dart - Material 3 theming with FlexColorScheme
    • core/theme/theme_provider.dart - Theme state with persistence
    • core/error/app_exception.dart - Typed exception hierarchy
    • core/api/api_client.dart - Dio HTTP clients for Core API and Tatlock API
    • core/api/api_interceptors.dart - Auth, logging, error interceptors
    • core/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