import 'package:dio/dio.dart'; import 'auth_token_provider.dart'; /// Dio-Interceptor, der pro Request den aktuellen Access-Token vom /// `AuthTokenProvider` zieht und als `Authorization: Bearer …`-Header /// anhängt. Provider-Fehler werden geloggt, der Request läuft trotzdem /// weiter — das Backend antwortet dann mit 401, was der reguläre /// Error-Handling-Pfad behandelt. class HolzleitnerAuthInterceptor extends Interceptor { HolzleitnerAuthInterceptor(this._tokenProvider); final AuthTokenProvider _tokenProvider; @override Future onRequest( RequestOptions options, RequestInterceptorHandler handler, ) async { try { final token = await _tokenProvider.currentAccessToken(); if (token != null) { options.headers['Authorization'] = 'Bearer $token'; } } on AuthTemporarilyUnavailableException catch (e) { // Token ließ sich wegen eines Netz-/VPN-Problems nicht erneuern. NICHT // tokenlos weiterschicken — das Backend würde mit 401 antworten und die // UI fälschlich „Sitzung abgelaufen" zeigen. Stattdessen sauber als // Verbindungsfehler abbrechen; der nächste Request versucht es erneut. return handler.reject( DioException( requestOptions: options, type: DioExceptionType.connectionError, error: e, message: 'Anmeldung konnte nicht erneuert werden (keine Verbindung zum Login-Server)', ), ); } catch (e, stack) { // TODO Phase B: hier ein strukturiertes Logging-Framework // einhängen statt print. // ignore: avoid_print print('[HolzleitnerAuthInterceptor] Token-Provider hat geworfen: $e\n$stack'); } handler.next(options); } }