1
1
import 'package:dart_frog/dart_frog.dart' ;
2
2
import 'package:ht_api/src/services/auth_token_service.dart' ;
3
3
import 'package:ht_shared/ht_shared.dart' ;
4
+ import 'package:logging/logging.dart' ;
5
+
6
+ final _log = Logger ('AuthMiddleware' );
4
7
5
8
/// Middleware to handle authentication by verifying Bearer tokens.
6
9
///
@@ -17,69 +20,69 @@ import 'package:ht_shared/ht_shared.dart';
17
20
Middleware authenticationProvider () {
18
21
return (handler) {
19
22
return (context) async {
20
- print ( '[AuthMiddleware] Entered.' );
23
+ _log. finer ( ' Entered.' );
21
24
// Read the interface type
22
25
AuthTokenService tokenService;
23
26
try {
24
- print ( '[AuthMiddleware] Attempting to read AuthTokenService...' );
27
+ _log. finer ( ' Attempting to read AuthTokenService...' );
25
28
tokenService = context.read <AuthTokenService >();
26
- print ( '[AuthMiddleware] Successfully read AuthTokenService.' );
29
+ _log. finer ( ' Successfully read AuthTokenService.' );
27
30
} catch (e, s) {
28
- print ( '[AuthMiddleware] FAILED to read AuthTokenService: $ e \n $ s ' );
31
+ _log. severe ( ' FAILED to read AuthTokenService.' , e, s );
29
32
// Re-throw the error to be caught by the main error handler
30
33
rethrow ;
31
34
}
32
35
User ? user;
33
36
34
37
// Extract the Authorization header
35
- print ( '[AuthMiddleware] Attempting to read Authorization header...' );
38
+ _log. finer ( ' Attempting to read Authorization header...' );
36
39
final authHeader = context.request.headers['Authorization' ];
37
- print ( '[AuthMiddleware] Authorization header value: $authHeader ' );
40
+ _log. finer ( ' Authorization header value: $authHeader ' );
38
41
39
42
if (authHeader != null && authHeader.startsWith ('Bearer ' )) {
40
43
// Extract the token string
41
44
final token = authHeader.substring (7 ); // Length of 'Bearer '
42
- print ( '[AuthMiddleware] Extracted Bearer token.' );
45
+ _log. finer ( ' Extracted Bearer token.' );
43
46
try {
44
- print ( '[AuthMiddleware] Attempting to validate token...' );
47
+ _log. finer ( ' Attempting to validate token...' );
45
48
// Validate the token using the service
46
49
user = await tokenService.validateToken (token);
47
- print (
48
- '[AuthMiddleware] Token validation returned: ${user ?.id ?? 'null' }' ,
50
+ _log. finer (
51
+ 'Token validation returned: ${user ?.id ?? 'null' }' ,
49
52
);
50
53
if (user != null ) {
51
- print (
52
- '[AuthMiddleware] Authentication successful for user: ${user .id }' ,
53
- );
54
+ _log.info ('Authentication successful for user: ${user .id }' );
54
55
} else {
55
- print (
56
- '[AuthMiddleware] Invalid token provided (validateToken returned null).' ,
56
+ _log. warning (
57
+ 'Invalid token provided (validateToken returned null).' ,
57
58
);
58
59
// Optional: Could throw UnauthorizedException here if *all* routes
59
60
// using this middleware strictly require a valid token.
60
61
// However, providing null allows routes to handle optional auth.
61
62
}
62
63
} on HtHttpException catch (e) {
63
64
// Log token validation errors from the service
64
- print ('Token validation failed: $ e ' );
65
+ _log. warning ('Token validation failed.' , e );
65
66
// Let the error propagate if needed, or handle specific cases.
66
67
// For now, we treat validation errors as resulting in no user.
67
68
user = null ; // Keep user null if HtHttpException occurred
68
69
} catch (e, s) {
69
70
// Catch unexpected errors during validation
70
- print (
71
- '[AuthMiddleware] Unexpected error during token validation: $e \n $s ' ,
71
+ _log.severe (
72
+ 'Unexpected error during token validation.' ,
73
+ e,
74
+ s,
72
75
);
73
76
user = null ; // Keep user null if unexpected error occurred
74
77
}
75
78
} else {
76
- print ( '[AuthMiddleware] No valid Bearer token found in header.' );
79
+ _log. finer ( ' No valid Bearer token found in header.' );
77
80
}
78
81
79
82
// Provide the User object (or null) into the context
80
83
// This makes `context.read<User?>()` available downstream.
81
- print (
82
- '[AuthMiddleware] Providing User (${user ?.id ?? 'null' }) to context.' ,
84
+ _log. finer (
85
+ 'Providing User (${user ?.id ?? 'null' }) to context.' ,
83
86
);
84
87
return handler (context.provide <User ?>(() => user));
85
88
};
@@ -96,14 +99,14 @@ Middleware requireAuthentication() {
96
99
return (context) {
97
100
final user = context.read <User ?>();
98
101
if (user == null ) {
99
- print (
102
+ _log. warning (
100
103
'Authentication required but no valid user found. Denying access.' ,
101
104
);
102
105
// Throwing allows the central errorHandler to create the 401 response.
103
106
throw const UnauthorizedException ('Authentication required.' );
104
107
}
105
108
// If user exists, proceed to the handler
106
- print ('Authentication check passed for user: ${user .id }' );
109
+ _log. info ('Authentication check passed for user: ${user .id }' );
107
110
return handler (context.provide <User >(() => user));
108
111
};
109
112
};
0 commit comments