Files
tatlock-ui/lib/core/auth/user_preferences.dart
T
Jeroen SchweitzerandClaude Opus 4.5 f1b2b0430f feat(auth): implement dual-flow authentication (web + mobile)
Add complete authentication system supporting both web (NPM forward auth)
and mobile (OIDC) authentication flows.

Web flow:
- Check /auth/me on startup to detect NPM forward auth session
- Cookies handled by proxy, no Bearer tokens needed

Mobile flow:
- flutter_appauth for OIDC Authorization Code + PKCE
- POST /auth/sync to get user profile and roles
- Token storage in SharedPreferences

Shared:
- Permission system with Domain/Action enums and Role class
- PermissionGate and AdminGate widgets for UI permission checks
- Route guards redirecting unauthenticated users to login
- Login page with platform-specific messaging

Platform config:
- iOS: CFBundleURLTypes for net.schweitz.tatlock://
- Android: appAuthRedirectScheme, minSdk 23

Docs:
- Added Freezed 3.x sealed class documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 21:56:11 +01:00

23 lines
667 B
Dart

import 'package:freezed_annotation/freezed_annotation.dart';
part 'user_preferences.freezed.dart';
part 'user_preferences.g.dart';
/// User preferences synced from core-api.
@freezed
sealed class UserPreferences with _$UserPreferences {
const factory UserPreferences({
/// Theme preference: system, light, dark
@Default('system') String theme,
/// Default room for housekeeping
@Default('front-hall') String defaultRoom,
/// Extended preferences as JSON
@Default({}) Map<String, dynamic> preferencesJson,
}) = _UserPreferences;
factory UserPreferences.fromJson(Map<String, dynamic> json) =>
_$UserPreferencesFromJson(json);
}