5
5
using System . Collections . Generic ;
6
6
using System . Diagnostics . CodeAnalysis ;
7
7
using System . Linq ;
8
+ using System . Threading . Tasks ;
8
9
using Duende . AccessTokenManagement ;
10
+ using Duende . Bff . Logging ;
9
11
using Microsoft . Extensions . Logging ;
10
12
using Microsoft . Extensions . Options ;
11
13
using Yarp . ReverseProxy . Transforms ;
@@ -19,18 +21,21 @@ namespace Duende.Bff.Yarp;
19
21
public class AccessTokenTransformProvider : ITransformProvider
20
22
{
21
23
private readonly BffOptions _options ;
24
+ private readonly ILogger < AccessTokenTransformProvider > _logger ;
22
25
private readonly ILoggerFactory _loggerFactory ;
23
26
private readonly IDPoPProofService _dPoPProofService ;
24
27
25
28
/// <summary>
26
29
/// ctor
27
30
/// </summary>
28
31
/// <param name="options"></param>
32
+ /// <param name="logger"></param>
29
33
/// <param name="loggerFactory"></param>
30
34
/// <param name="dPoPProofService"></param>
31
- public AccessTokenTransformProvider ( IOptions < BffOptions > options , ILoggerFactory loggerFactory , IDPoPProofService dPoPProofService )
35
+ public AccessTokenTransformProvider ( IOptions < BffOptions > options , ILogger < AccessTokenTransformProvider > logger , ILoggerFactory loggerFactory , IDPoPProofService dPoPProofService )
32
36
{
33
37
_options = options . Value ;
38
+ _logger = logger ;
34
39
_loggerFactory = loggerFactory ;
35
40
_dPoPProofService = dPoPProofService ;
36
41
}
@@ -78,10 +83,19 @@ public void Apply(TransformBuilderContext transformBuildContext)
78
83
bool optional ;
79
84
if ( GetMetadataValue ( transformBuildContext , Constants . Yarp . OptionalUserTokenMetadata , out var optionalTokenMetadata ) )
80
85
{
86
+ if ( GetMetadataValue ( transformBuildContext , Constants . Yarp . TokenTypeMetadata , out var tokenTypeMetadata ) )
87
+ {
88
+ transformBuildContext . AddRequestTransform ( ctx =>
89
+ {
90
+ ctx . HttpContext . Response . StatusCode = 500 ;
91
+ _logger . InvalidRouteConfiguration ( transformBuildContext . Route . ClusterId , transformBuildContext . Route . RouteId ) ;
92
+
93
+ return ValueTask . CompletedTask ;
94
+ } ) ;
95
+ return ;
96
+ }
81
97
optional = true ;
82
98
tokenType = TokenType . User ;
83
- // TODO - is it an error to set both OptionalUserToken and a token type? I think yes, because setting a token type means
84
- // setting a *required* token type.
85
99
}
86
100
else if ( GetMetadataValue ( transformBuildContext , Constants . Yarp . TokenTypeMetadata , out var tokenTypeMetadata ) )
87
101
{
0 commit comments