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>
23 lines
667 B
Dart
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);
|
|
}
|