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

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

@ -1,4 +1,5 @@
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Volo.Abp.MultiTenancy;
@ -10,14 +11,15 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
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 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.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
@ -13,9 +14,9 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
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;
}
@ -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(", ")}");
}
return tenantIdHeader.First();
return Task.FromResult(tenantIdHeader.First());
}
protected virtual void Log(ITenantResolveContext context, string text)
@ -44,4 +45,4 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
.LogWarning(text);
}
}
}
}

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

@ -1,4 +1,5 @@
using System;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
@ -9,7 +10,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
{
public abstract class HttpTenantResolveContributorBase : TenantResolveContributorBase
{
public override void Resolve(ITenantResolveContext context)
public async override Task ResolveAsync(ITenantResolveContext context)
{
var httpContext = context.GetHttpContext();
if (httpContext == null)
@ -19,7 +20,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
try
{
ResolveFromHttpContext(context, httpContext);
await ResolveFromHttpContextAsync(context, httpContext);
}
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())
{
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;
namespace Volo.Abp.AspNetCore.MultiTenancy
@ -9,14 +10,20 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
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 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.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Volo.Abp.MultiTenancy;
@ -11,15 +12,10 @@ namespace Volo.Abp.AspNetCore.MultiTenancy
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);
if (tenantId == null)
{
return null;
}
return Convert.ToString(tenantId);
return tenantId == null ? null : Task.FromResult(Convert.ToString(tenantId));
}
}
}
}

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

@ -1,4 +1,5 @@
using System;
using System.Threading.Tasks;
using JetBrains.Annotations;
namespace Volo.Abp.MultiTenancy
@ -18,9 +19,10 @@ namespace Volo.Abp.MultiTenancy
_resolveAction = resolveAction;
}
public override void Resolve(ITenantResolveContext context)
public override Task ResolveAsync(ITenantResolveContext 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 Volo.Abp.Users;
@ -9,16 +10,16 @@ namespace Volo.Abp.MultiTenancy
public override string Name => ContributorName;
public override void Resolve(ITenantResolveContext context)
public override Task ResolveAsync(ITenantResolveContext context)
{
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;
context.TenantIdOrName = currentUser.TenantId?.ToString();
return Task.CompletedTask;
}
}
}
}

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

@ -1,9 +1,11 @@
using System.Threading.Tasks;
namespace Volo.Abp.MultiTenancy
{
public interface ITenantResolveContributor
{
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;
namespace Volo.Abp.MultiTenancy
@ -11,6 +12,6 @@ namespace Volo.Abp.MultiTenancy
/// Tenant id, unique name or null (if could not resolve).
/// </returns>
[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)
{
var resolveResult = TenantResolver.ResolveTenantIdOrName();
var resolveResult = await TenantResolver.ResolveTenantIdOrNameAsync();
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
{
public abstract class TenantResolveContributorBase : ITenantResolveContributor
{
public abstract string Name { get; }
//TODO: We can make this async
public abstract void Resolve(ITenantResolveContext context);
public abstract Task ResolveAsync(ITenantResolveContext context);
}
}
}

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

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

Loading…
Cancel
Save