1616
1717namespace Shared . Middleware ;
1818
19- public class TenantMiddleware
20- {
21- #region Fields
19+ public class TenantMiddleware
20+ {
21+ #region Fields
2222
23- private readonly RequestDelegate Next ;
23+ private readonly RequestDelegate Next ;
2424
25- #endregion
25+ #endregion
2626
27- #region Constructors
27+ #region Constructors
2828
29- public TenantMiddleware ( RequestDelegate next ) {
30- this . Next = next ;
31- }
29+ public TenantMiddleware ( RequestDelegate next )
30+ {
31+ this . Next = next ;
32+ }
3233
33- public const String KeyNameCorrelationId = "correlationId" ;
34+ public const String KeyNameCorrelationId = "correlationId" ;
3435
35- #endregion
36+ #endregion
3637
37- public async Task InvokeAsync ( HttpContext context , TenantContext tenantContext )
38- {
39- Stopwatch watch = Stopwatch . StartNew ( ) ;
38+ public async Task InvokeAsync ( HttpContext context , TenantContext tenantContext )
39+ {
40+ Stopwatch watch = Stopwatch . StartNew ( ) ;
4041
41- // Detect the tenant from the incoming request
42- TenantIdentifiers tenantIdentifiers = await this . GetIdentifiersFromContext ( context ) ;
42+ // Detect the tenant from the incoming request
43+ TenantIdentifiers tenantIdentifiers = await this . GetIdentifiersFromContext ( context ) ;
4344
44- Boolean . TryParse ( ConfigurationReader . GetValueOrDefault ( "AppSettings" , "LogsPerTenantEnabled" , "false" ) , out Boolean logPerTenantEnabled ) ;
45+ Boolean . TryParse ( ConfigurationReader . GetValueOrDefault ( "AppSettings" , "LogsPerTenantEnabled" , "false" ) , out Boolean logPerTenantEnabled ) ;
4546
46- // Check the headers for a correlationId
47- context . Request . Headers . TryGetValue ( KeyNameCorrelationId , out StringValues correlationIdHeader ) ;
48- Guid . TryParse ( correlationIdHeader , out Guid correlationId ) ;
47+ // Check the headers for a correlationId
48+ context . Request . Headers . TryGetValue ( KeyNameCorrelationId , out StringValues correlationIdHeader ) ;
49+ Guid . TryParse ( correlationIdHeader , out Guid correlationId ) ;
4950
50- if ( correlationId != Guid . Empty )
51- {
52- tenantContext . SetCorrelationId ( correlationId ) ;
53- context . Items [ KeyNameCorrelationId ] = correlationId . ToString ( ) ; // make it accessible to HttpClient handlers
54- }
55-
56- tenantContext . Initialise ( tenantIdentifiers , logPerTenantEnabled ) ;
51+ if ( correlationId != Guid . Empty )
52+ {
53+ tenantContext . SetCorrelationId ( correlationId ) ;
54+ context . Items [ KeyNameCorrelationId ] = correlationId . ToString ( ) ; // make it accessible to HttpClient handlers
55+ }
5756
58- // Set the current tenant in the TenantContext
59- TenantContext . CurrentTenant = tenantContext ;
57+ tenantContext . Initialise ( tenantIdentifiers , logPerTenantEnabled ) ;
6058
61- String clientIp = context . Connection . RemoteIpAddress ? . ToString ( ) ;
59+ // Set the current tenant in the TenantContext
60+ TenantContext . CurrentTenant = tenantContext ;
6261
63- //Makes sense to start our correlation audit trace here
64- String logMessage = $ "Receiving from { clientIp } => { context . Request . Method } { context . Request . Host } { context . Request . Path } ";
62+ String clientIp = context . Connection . RemoteIpAddress ? . ToString ( ) ;
6563
66- Logger . Logger . LogInformation ( logMessage ) ;
64+ //Makes sense to start our correlation audit trace here
65+ String logMessage = $ "Receiving from { clientIp } => { context . Request . Method } { context . Request . Host } { context . Request . Path } ";
6766
68- // Call the next middleware
69- await this . Next ( context ) ;
67+ Logger . Logger . LogInformation ( logMessage ) ;
7068
71- watch . Stop ( ) ;
72- String afterMessage = $ "{ context . Response . StatusCode } { logMessage } Duration: { watch . ElapsedMilliseconds } ms";
73- Logger . Logger . LogInformation ( afterMessage ) ;
74- }
69+ // Call the next middleware
70+ await this . Next ( context ) ;
7571
76- private async Task < TenantIdentifiers > GetIdentifiersFromContext ( HttpContext context ) =>
77- context switch
78- {
79- _ when context . GetIdentifiersFromToken ( ) is var identifiersFromToken && identifiersFromToken != TenantIdentifiers . Default ( ) => identifiersFromToken ,
80- _ when context . GetIdentifiersFromHeaders ( ) is var identifiersFromHeaders && identifiersFromHeaders != TenantIdentifiers . Default ( ) => identifiersFromHeaders ,
81- _ when context . GetIdentifiersFromRoute ( ) is var identifiersFromHeaders && identifiersFromHeaders != TenantIdentifiers . Default ( ) => identifiersFromHeaders ,
82- //_ when await context.GetIdentifiersFromPayload() is var identifiersFromPayload && identifiersFromPayload != TenantIdentifiers.Default() =>
83- //identifiersFromPayload,
84- _ => TenantIdentifiers . Default ( ) ,
85- } ;
72+ watch . Stop ( ) ;
73+ String afterMessage = $ "{ context . Response . StatusCode } { logMessage } Duration: { watch . ElapsedMilliseconds } ms";
74+ Logger . Logger . LogInformation ( afterMessage ) ;
8675 }
8776
77+ private async Task < TenantIdentifiers > GetIdentifiersFromContext ( HttpContext context ) =>
78+ context switch
79+ {
80+ _ when context . GetIdentifiersFromToken ( ) is var identifiersFromToken && identifiersFromToken != TenantIdentifiers . Default ( ) => identifiersFromToken ,
81+ _ when context . GetIdentifiersFromHeaders ( ) is var identifiersFromHeaders && identifiersFromHeaders != TenantIdentifiers . Default ( ) => identifiersFromHeaders ,
82+ _ when context . GetIdentifiersFromRoute ( ) is var identifiersFromHeaders && identifiersFromHeaders != TenantIdentifiers . Default ( ) => identifiersFromHeaders ,
83+ //_ when await context.GetIdentifiersFromPayload() is var identifiersFromPayload && identifiersFromPayload != TenantIdentifiers.Default() =>
84+ //identifiersFromPayload,
85+ _ => TenantIdentifiers . Default ( ) ,
86+ } ;
87+ }
88+
8889
8990public static class ClaimsPrincipalExtensions
9091{
9192 public static Boolean IsAuthenticated ( this ClaimsPrincipal principal )
9293 {
93- return principal ? . Identity ? . IsAuthenticated ?? false ;
94+ return principal ? . Identity ? . IsAuthenticated == true ;
9495 }
9596}
9697
97- public static class HttpContextExtensionMethods {
98- public static TenantIdentifiers GetIdentifiersFromToken ( this HttpContext context ) {
99- if ( ! context . User . IsAuthenticated ( ) ) {
98+ public static class HttpContextExtensionMethods
99+ {
100+ public static TenantIdentifiers GetIdentifiersFromToken ( this HttpContext context )
101+ {
102+ if ( ! context . User . IsAuthenticated ( ) )
103+ {
100104 return TenantIdentifiers . Default ( ) ;
101105 }
102106
@@ -109,7 +113,8 @@ public static TenantIdentifiers GetIdentifiersFromToken(this HttpContext context
109113 return estateId == Guid . Empty ? TenantIdentifiers . Default ( ) : new TenantIdentifiers ( estateId , merchantId ) ;
110114 }
111115
112- public static TenantIdentifiers GetIdentifiersFromHeaders ( this HttpContext context ) {
116+ public static TenantIdentifiers GetIdentifiersFromHeaders ( this HttpContext context )
117+ {
113118 // Get the org Id
114119 context . Request . Headers . TryGetValue ( "estateId" , out StringValues estateIdHeader ) ;
115120 Guid . TryParse ( estateIdHeader , out Guid estateId ) ;
@@ -121,7 +126,8 @@ public static TenantIdentifiers GetIdentifiersFromHeaders(this HttpContext conte
121126 return estateId == Guid . Empty ? TenantIdentifiers . Default ( ) : new TenantIdentifiers ( estateId , merchantId ) ;
122127 }
123128
124- public static TenantIdentifiers GetIdentifiersFromRoute ( this HttpContext context ) {
129+ public static TenantIdentifiers GetIdentifiersFromRoute ( this HttpContext context )
130+ {
125131 // Get the org Id
126132
127133 context . Request . RouteValues . TryGetValue ( "estateId" , out object estateIdRouteValue ) ;
0 commit comments