Files
unionflow-server-api/unionflow-mobile-apps/lib/core/models/evenement_model.g.dart
DahoudG f89f6167cc feat(mobile): Implement Keycloak WebView authentication with HTTP callback
- Replace flutter_appauth with custom WebView implementation to resolve deep link issues
- Add KeycloakWebViewAuthService with integrated WebView for seamless authentication
- Configure Android manifest for HTTP cleartext traffic support
- Add network security config for development environment (192.168.1.11)
- Update Keycloak client to use HTTP callback endpoint (http://192.168.1.11:8080/auth/callback)
- Remove obsolete keycloak_auth_service.dart and temporary scripts
- Clean up dependencies and regenerate injection configuration
- Tested successfully on multiple Android devices (Xiaomi 2201116TG, SM A725F)

BREAKING CHANGE: Authentication flow now uses WebView instead of external browser
- Users will see Keycloak login page within the app instead of browser redirect
- Resolves ERR_CLEARTEXT_NOT_PERMITTED and deep link state management issues
- Maintains full OIDC compliance with PKCE flow and secure token storage

Technical improvements:
- WebView with custom navigation delegate for callback handling
- Automatic token extraction and user info parsing from JWT
- Proper error handling and user feedback
- Consistent authentication state management across app lifecycle
2025-09-15 01:44:16 +00:00

95 lines
3.9 KiB
Dart

// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'evenement_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
EvenementModel _$EvenementModelFromJson(Map<String, dynamic> json) =>
EvenementModel(
id: json['id'] as String?,
titre: json['titre'] as String,
description: json['description'] as String?,
dateDebut: DateTime.parse(json['dateDebut'] as String),
dateFin: json['dateFin'] == null
? null
: DateTime.parse(json['dateFin'] as String),
lieu: json['lieu'] as String?,
adresse: json['adresse'] as String?,
typeEvenement: $enumDecode(_$TypeEvenementEnumMap, json['typeEvenement']),
statut: $enumDecode(_$StatutEvenementEnumMap, json['statut']),
capaciteMax: (json['capaciteMax'] as num?)?.toInt(),
prix: (json['prix'] as num?)?.toDouble(),
inscriptionRequise: json['inscriptionRequise'] as bool,
dateLimiteInscription: json['dateLimiteInscription'] == null
? null
: DateTime.parse(json['dateLimiteInscription'] as String),
instructionsParticulieres: json['instructionsParticulieres'] as String?,
contactOrganisateur: json['contactOrganisateur'] as String?,
materielRequis: json['materielRequis'] as String?,
visiblePublic: json['visiblePublic'] as bool,
actif: json['actif'] as bool,
creePar: json['creePar'] as String?,
dateCreation: json['dateCreation'] == null
? null
: DateTime.parse(json['dateCreation'] as String),
modifiePar: json['modifiePar'] as String?,
dateModification: json['dateModification'] == null
? null
: DateTime.parse(json['dateModification'] as String),
organisationId: json['organisationId'] as String?,
organisateurId: json['organisateurId'] as String?,
);
Map<String, dynamic> _$EvenementModelToJson(EvenementModel instance) =>
<String, dynamic>{
'id': instance.id,
'titre': instance.titre,
'description': instance.description,
'dateDebut': instance.dateDebut.toIso8601String(),
'dateFin': instance.dateFin?.toIso8601String(),
'lieu': instance.lieu,
'adresse': instance.adresse,
'typeEvenement': _$TypeEvenementEnumMap[instance.typeEvenement]!,
'statut': _$StatutEvenementEnumMap[instance.statut]!,
'capaciteMax': instance.capaciteMax,
'prix': instance.prix,
'inscriptionRequise': instance.inscriptionRequise,
'dateLimiteInscription':
instance.dateLimiteInscription?.toIso8601String(),
'instructionsParticulieres': instance.instructionsParticulieres,
'contactOrganisateur': instance.contactOrganisateur,
'materielRequis': instance.materielRequis,
'visiblePublic': instance.visiblePublic,
'actif': instance.actif,
'creePar': instance.creePar,
'dateCreation': instance.dateCreation?.toIso8601String(),
'modifiePar': instance.modifiePar,
'dateModification': instance.dateModification?.toIso8601String(),
'organisationId': instance.organisationId,
'organisateurId': instance.organisateurId,
};
const _$TypeEvenementEnumMap = {
TypeEvenement.assembleeGenerale: 'ASSEMBLEE_GENERALE',
TypeEvenement.reunion: 'REUNION',
TypeEvenement.formation: 'FORMATION',
TypeEvenement.conference: 'CONFERENCE',
TypeEvenement.atelier: 'ATELIER',
TypeEvenement.seminaire: 'SEMINAIRE',
TypeEvenement.evenementSocial: 'EVENEMENT_SOCIAL',
TypeEvenement.manifestation: 'MANIFESTATION',
TypeEvenement.celebration: 'CELEBRATION',
TypeEvenement.autre: 'AUTRE',
};
const _$StatutEvenementEnumMap = {
StatutEvenement.planifie: 'PLANIFIE',
StatutEvenement.confirme: 'CONFIRME',
StatutEvenement.enCours: 'EN_COURS',
StatutEvenement.termine: 'TERMINE',
StatutEvenement.annule: 'ANNULE',
StatutEvenement.reporte: 'REPORTE',
};