8
8
namespace CheckDrive . Web . Helpers ;
9
9
10
10
// Initializes CookieHandler & AuthStore via ServiceProvider due to circular dependency
11
- // AuthorizationHandler -> AuthStore -> CheckDriveApi -> HttpClient -> AuthorizationHandler,
11
+ // AuthorizationHandler -> AuthStore -> ApiClient -> HttpClient -> AuthorizationHandler,
12
12
// which means before initialization of AuthorizationHandler we cannot resolve AuthStore.
13
- // Resolving CookieHandler via ServiceProvider as well to keep it consistent and easier to follow.
13
+ // Resolving CookieHandler via ServiceProvider as well, to keep it consistent and easier to follow.
14
14
internal sealed class AuthorizationHandler ( IServiceProvider serviceProvider ) : DelegatingHandler
15
15
{
16
16
protected override async Task < HttpResponseMessage > SendAsync ( HttpRequestMessage request , CancellationToken cancellationToken )
@@ -20,33 +20,31 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
20
20
return await base . SendAsync ( request , cancellationToken ) ;
21
21
}
22
22
23
- await AddAuthorizationHeaders ( request ) ;
23
+ await TryAddAuthorizationHeadersAsync ( request ) ;
24
24
25
25
return await base . SendAsync ( request , cancellationToken ) ;
26
26
}
27
27
28
- private async Task AddAuthorizationHeaders ( HttpRequestMessage request )
29
- {
30
- var accessToken = await GetAccessToken ( ) ;
31
-
32
- request . Headers . Authorization = new AuthenticationHeaderValue ( HeaderConstants . AuthenticationSchema , accessToken ) ;
33
- }
34
-
35
- private async Task < string > GetAccessToken ( )
28
+ private async Task TryAddAuthorizationHeadersAsync ( HttpRequestMessage request )
36
29
{
37
30
using var scope = serviceProvider . CreateScope ( ) ;
38
31
var cookieHandler = scope . ServiceProvider . GetRequiredService < ICookieHandler > ( ) ;
39
32
var authStore = scope . ServiceProvider . GetRequiredService < IAuthStore > ( ) ;
40
33
41
34
var ( accessToken , refreshToken ) = cookieHandler . GetTokens ( ) ;
42
35
43
- if ( ! JwtHelper . IsTokenValid ( accessToken ) && ! string . IsNullOrWhiteSpace ( refreshToken ) )
36
+ if ( JwtHelper . IsValid ( accessToken ) )
44
37
{
45
- var response = await authStore . RefreshTokenAsync ( new RefreshTokenRequest ( refreshToken ) ) ;
38
+ request . Headers . Authorization = new AuthenticationHeaderValue ( HeaderConstants . AuthenticationSchema , accessToken ) ;
46
39
47
- return response . AccessToken ;
40
+ return ;
48
41
}
49
42
50
- return accessToken ?? string . Empty ;
43
+ if ( ! string . IsNullOrWhiteSpace ( refreshToken ) )
44
+ {
45
+ var response = await authStore . RefreshTokenAsync ( new RefreshTokenRequest ( refreshToken ) ) ;
46
+
47
+ request . Headers . Authorization = new AuthenticationHeaderValue ( HeaderConstants . AuthenticationSchema , response . AccessToken ) ;
48
+ }
51
49
}
52
50
}
0 commit comments