Browse Source

Use sync to resolve the tenant.

Resolve #5414
pull/5849/head
maliming 6 years ago
parent
commit
4d69ddbc92
  1. 9
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/CookieTenantResolveContributor.cs
  2. 19
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/DomainTenantResolveContributor.cs
  3. 8
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/FormTenantResolveContributor.cs
  4. 9
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HeaderTenantResolveContributor.cs
  5. 13
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolveContributerBase.cs
  6. 15
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolveContributor.cs
  7. 12
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/RouteTenantResolveContributor.cs
  8. 6
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ActionTenantResolveContributor.cs
  9. 13
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentUserTenantResolveContributor.cs
  10. 6
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantResolveContributor.cs
  11. 5
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantResolver.cs
  12. 2
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs
  13. 7
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolveContributorBase.cs
  14. 9
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolver.cs

9
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/CookieTenantResolveContributor.cs

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Http; using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
namespace Volo.Abp.AspNetCore.MultiTenancy namespace Volo.Abp.AspNetCore.MultiTenancy
@ -9,9 +10,9 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
public override string Name => ContributorName; public override string Name => ContributorName;
protected override string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context, HttpContext httpContext) protected override Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
{ {
return httpContext.Request?.Cookies[context.GetAbpAspNetCoreMultiTenancyOptions().TenantKey]; return Task.FromResult(httpContext.Request?.Cookies[context.GetAbpAspNetCoreMultiTenancyOptions().TenantKey]);
} }
} }
} }

19
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/DomainTenantResolveContributor.cs

@ -1,4 +1,5 @@
using System; using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
using Volo.Abp.Text.Formatting; using Volo.Abp.Text.Formatting;
@ -22,26 +23,14 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
_domainFormat = domainFormat.RemovePreFix(ProtocolPrefixes); _domainFormat = domainFormat.RemovePreFix(ProtocolPrefixes);
} }
protected override string GetTenantIdOrNameFromHttpContextOrNull( protected override Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
ITenantResolveContext context,
HttpContext httpContext)
{ {
if (httpContext.Request?.Host == null)
{
return null;
}
var hostName = httpContext.Request.Host.Host.RemovePreFix(ProtocolPrefixes); var hostName = httpContext.Request.Host.Host.RemovePreFix(ProtocolPrefixes);
var extractResult = FormattedStringValueExtracter.Extract(hostName, _domainFormat, ignoreCase: true); var extractResult = FormattedStringValueExtracter.Extract(hostName, _domainFormat, ignoreCase: true);
context.Handled = true; context.Handled = true;
if (!extractResult.IsMatch) return extractResult.IsMatch ? Task.FromResult(extractResult.Matches[0].Value) : null;
{
return null;
}
return extractResult.Matches[0].Value;
} }
} }
} }

8
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/FormTenantResolveContributor.cs

@ -1,4 +1,5 @@
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
@ -10,14 +11,15 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
public override string Name => ContributorName; public override string Name => ContributorName;
protected override string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context, HttpContext httpContext) protected async override Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
{ {
if (httpContext.Request == null || !httpContext.Request.HasFormContentType || !httpContext.Request.Form.Any()) if (!httpContext.Request.HasFormContentType)
{ {
return null; return null;
} }
return httpContext.Request.Form[context.GetAbpAspNetCoreMultiTenancyOptions().TenantKey]; var form = await httpContext.Request.ReadFormAsync();
return form[context.GetAbpAspNetCoreMultiTenancyOptions().TenantKey];
} }
} }
} }

9
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HeaderTenantResolveContributor.cs

@ -1,5 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -13,9 +14,9 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
public override string Name => ContributorName; public override string Name => ContributorName;
protected override string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context, HttpContext httpContext) protected override Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
{ {
if (httpContext.Request == null || httpContext.Request.Headers.IsNullOrEmpty()) if (httpContext.Request.Headers.IsNullOrEmpty())
{ {
return null; return null;
} }
@ -33,7 +34,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
Log(context, $"HTTP request includes more than one {tenantIdKey} header value. First one will be used. All of them: {tenantIdHeader.JoinAsString(", ")}"); Log(context, $"HTTP request includes more than one {tenantIdKey} header value. First one will be used. All of them: {tenantIdHeader.JoinAsString(", ")}");
} }
return tenantIdHeader.First(); return Task.FromResult(tenantIdHeader.First());
} }
protected virtual void Log(ITenantResolveContext context, string text) protected virtual void Log(ITenantResolveContext context, string text)
@ -44,4 +45,4 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
.LogWarning(text); .LogWarning(text);
} }
} }
} }

13
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolveContributerBase.cs

@ -1,4 +1,5 @@
using System; using System;
using System.Threading.Tasks;
using JetBrains.Annotations; using JetBrains.Annotations;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
@ -9,7 +10,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{ {
public abstract class HttpTenantResolveContributorBase : TenantResolveContributorBase public abstract class HttpTenantResolveContributorBase : TenantResolveContributorBase
{ {
public override void Resolve(ITenantResolveContext context) public async override Task ResolveAsync(ITenantResolveContext context)
{ {
var httpContext = context.GetHttpContext(); var httpContext = context.GetHttpContext();
if (httpContext == null) if (httpContext == null)
@ -19,7 +20,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
try try
{ {
ResolveFromHttpContext(context, httpContext); await ResolveFromHttpContextAsync(context, httpContext);
} }
catch (Exception e) catch (Exception e)
{ {
@ -29,15 +30,15 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
} }
} }
protected virtual void ResolveFromHttpContext(ITenantResolveContext context, HttpContext httpContext) protected virtual async Task ResolveFromHttpContextAsync(ITenantResolveContext context, HttpContext httpContext)
{ {
var tenantIdOrName = GetTenantIdOrNameFromHttpContextOrNull(context, httpContext); var tenantIdOrName = await GetTenantIdOrNameFromHttpContextOrNullAsync(context, httpContext);
if (!tenantIdOrName.IsNullOrEmpty()) if (!tenantIdOrName.IsNullOrEmpty())
{ {
context.TenantIdOrName = tenantIdOrName; context.TenantIdOrName = tenantIdOrName;
} }
} }
protected abstract string GetTenantIdOrNameFromHttpContextOrNull([NotNull] ITenantResolveContext context, [NotNull] HttpContext httpContext); protected abstract Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync([NotNull] ITenantResolveContext context, [NotNull] HttpContext httpContext);
} }
} }

15
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolveContributor.cs

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Http; using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
namespace Volo.Abp.AspNetCore.MultiTenancy namespace Volo.Abp.AspNetCore.MultiTenancy
@ -9,14 +10,20 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
public override string Name => ContributorName; public override string Name => ContributorName;
protected override string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context, HttpContext httpContext) protected override Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
{ {
if (httpContext.Request == null || !httpContext.Request.QueryString.HasValue) var tenantKey = context.GetAbpAspNetCoreMultiTenancyOptions().TenantKey;
if (!httpContext.Request.QueryString.HasValue)
{ {
return null; return null;
} }
return httpContext.Request.Query[context.GetAbpAspNetCoreMultiTenancyOptions().TenantKey]; if (httpContext.Request.Query.TryGetValue(tenantKey, out var tenant))
{
Task.FromResult(tenant);
}
return null;
} }
} }
} }

12
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/RouteTenantResolveContributor.cs

@ -1,4 +1,5 @@
using System; using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Routing;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
@ -11,15 +12,10 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
public override string Name => ContributorName; public override string Name => ContributorName;
protected override string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context, HttpContext httpContext) protected override Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
{ {
var tenantId = httpContext.GetRouteValue(context.GetAbpAspNetCoreMultiTenancyOptions().TenantKey); var tenantId = httpContext.GetRouteValue(context.GetAbpAspNetCoreMultiTenancyOptions().TenantKey);
if (tenantId == null) return tenantId == null ? null : Task.FromResult(Convert.ToString(tenantId));
{
return null;
}
return Convert.ToString(tenantId);
} }
} }
} }

6
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ActionTenantResolveContributor.cs

@ -1,4 +1,5 @@
using System; using System;
using System.Threading.Tasks;
using JetBrains.Annotations; using JetBrains.Annotations;
namespace Volo.Abp.MultiTenancy namespace Volo.Abp.MultiTenancy
@ -18,9 +19,10 @@ namespace Volo.Abp.MultiTenancy
_resolveAction = resolveAction; _resolveAction = resolveAction;
} }
public override void Resolve(ITenantResolveContext context) public override Task ResolveAsync(ITenantResolveContext context)
{ {
_resolveAction(context); _resolveAction(context);
return Task.CompletedTask;
} }
} }
} }

13
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentUserTenantResolveContributor.cs

@ -1,3 +1,4 @@
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Users; using Volo.Abp.Users;
@ -9,16 +10,16 @@ namespace Volo.Abp.MultiTenancy
public override string Name => ContributorName; public override string Name => ContributorName;
public override void Resolve(ITenantResolveContext context) public override Task ResolveAsync(ITenantResolveContext context)
{ {
var currentUser = context.ServiceProvider.GetRequiredService<ICurrentUser>(); var currentUser = context.ServiceProvider.GetRequiredService<ICurrentUser>();
if (currentUser.IsAuthenticated != true) if (currentUser.IsAuthenticated)
{ {
return; context.Handled = true;
context.TenantIdOrName = currentUser.TenantId?.ToString();
} }
context.Handled = true; return Task.CompletedTask;
context.TenantIdOrName = currentUser.TenantId?.ToString();
} }
} }
} }

6
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantResolveContributor.cs

@ -1,9 +1,11 @@
using System.Threading.Tasks;
namespace Volo.Abp.MultiTenancy namespace Volo.Abp.MultiTenancy
{ {
public interface ITenantResolveContributor public interface ITenantResolveContributor
{ {
string Name { get; } string Name { get; }
void Resolve(ITenantResolveContext context); Task ResolveAsync(ITenantResolveContext context);
} }
} }

5
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantResolver.cs

@ -1,3 +1,4 @@
using System.Threading.Tasks;
using JetBrains.Annotations; using JetBrains.Annotations;
namespace Volo.Abp.MultiTenancy namespace Volo.Abp.MultiTenancy
@ -11,6 +12,6 @@ namespace Volo.Abp.MultiTenancy
/// Tenant id, unique name or null (if could not resolve). /// Tenant id, unique name or null (if could not resolve).
/// </returns> /// </returns>
[NotNull] [NotNull]
TenantResolveResult ResolveTenantIdOrName(); Task<TenantResolveResult> ResolveTenantIdOrNameAsync();
} }
} }

2
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs

@ -22,7 +22,7 @@ namespace Volo.Abp.MultiTenancy
public virtual async Task<TenantConfiguration> GetAsync(bool saveResolveResult = false) public virtual async Task<TenantConfiguration> GetAsync(bool saveResolveResult = false)
{ {
var resolveResult = TenantResolver.ResolveTenantIdOrName(); var resolveResult = await TenantResolver.ResolveTenantIdOrNameAsync();
if (saveResolveResult) if (saveResolveResult)
{ {

7
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolveContributorBase.cs

@ -1,10 +1,11 @@
using System.Threading.Tasks;
namespace Volo.Abp.MultiTenancy namespace Volo.Abp.MultiTenancy
{ {
public abstract class TenantResolveContributorBase : ITenantResolveContributor public abstract class TenantResolveContributorBase : ITenantResolveContributor
{ {
public abstract string Name { get; } public abstract string Name { get; }
//TODO: We can make this async public abstract Task ResolveAsync(ITenantResolveContext context);
public abstract void Resolve(ITenantResolveContext context);
} }
} }

9
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolver.cs

@ -1,6 +1,5 @@
using System; using System;
using System.Linq; using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -18,7 +17,7 @@ namespace Volo.Abp.MultiTenancy
_options = options.Value; _options = options.Value;
} }
public TenantResolveResult ResolveTenantIdOrName() public virtual async Task<TenantResolveResult> ResolveTenantIdOrNameAsync()
{ {
var result = new TenantResolveResult(); var result = new TenantResolveResult();
@ -28,7 +27,7 @@ namespace Volo.Abp.MultiTenancy
foreach (var tenantResolver in _options.TenantResolvers) foreach (var tenantResolver in _options.TenantResolvers)
{ {
tenantResolver.Resolve(context); await tenantResolver.ResolveAsync(context);
result.AppliedResolvers.Add(tenantResolver.Name); result.AppliedResolvers.Add(tenantResolver.Name);
@ -43,4 +42,4 @@ namespace Volo.Abp.MultiTenancy
return result; return result;
} }
} }
} }

Loading…
Cancel
Save