Notify: fix culture
This commit is contained in:
parent
12f4e8d180
commit
9cf550e1f0
@ -52,12 +52,12 @@ public class LdapNotifySource : INotifySource
|
||||
await _ldapNotifyHelper.AutoSyncAsync(_tenant);
|
||||
}
|
||||
|
||||
public IActionProvider GetActionProvider()
|
||||
public Task<IActionProvider> GetActionProvider(NotifyRequest r)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public IPatternProvider GetPatternProvider()
|
||||
public Task<IPatternProvider> GetPatternProvider(NotifyRequest r)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
@ -180,7 +180,7 @@ public class UserManager
|
||||
|
||||
return await users.ToArrayAsync();
|
||||
}
|
||||
|
||||
|
||||
public Task<int> GetUsersCountAsync(
|
||||
bool isDocSpaceAdmin,
|
||||
EmployeeStatus? employeeStatus,
|
||||
@ -318,6 +318,39 @@ public class UserManager
|
||||
return u != null && !u.Removed ? u : Constants.LostUser;
|
||||
}
|
||||
|
||||
public async Task<UserInfo> SearchUserAsync(string id)
|
||||
{
|
||||
var result = Constants.LostUser;
|
||||
|
||||
if (32 <= id.Length)
|
||||
{
|
||||
var guid = default(Guid);
|
||||
try
|
||||
{
|
||||
guid = new Guid(id);
|
||||
}
|
||||
catch (FormatException) { }
|
||||
catch (OverflowException) { }
|
||||
|
||||
if (guid != default)
|
||||
{
|
||||
result = await GetUsersAsync(guid);
|
||||
}
|
||||
}
|
||||
|
||||
if (Constants.LostUser.Equals(result))
|
||||
{
|
||||
result = await GetUserByEmailAsync(id);
|
||||
}
|
||||
|
||||
if (Constants.LostUser.Equals(result))
|
||||
{
|
||||
result = await GetUserByUserNameAsync(id);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<UserInfo[]> SearchAsync(string text, EmployeeStatus status)
|
||||
{
|
||||
return await SearchAsync(text, status, Guid.Empty);
|
||||
@ -559,8 +592,8 @@ public class UserManager
|
||||
new Uri(_cache.Get<string>("REWRITE_URL" + tenant.Id)).ToString() : tenant.GetTenantDomain(_coreSettings);
|
||||
var davUsersEmails = await GetDavUserEmailsAsync();
|
||||
var requestUrlBook = _cardDavAddressbook.GetRadicaleUrl(myUri, delUser.Email.ToLower(), true, true);
|
||||
|
||||
if(rootAuthorization != null)
|
||||
|
||||
if (rootAuthorization != null)
|
||||
{
|
||||
var addBookCollection = await _cardDavAddressbook.GetCollection(requestUrlBook, userAuthorization, myUri.ToString());
|
||||
if (addBookCollection.Completed && addBookCollection.StatusCode != 404)
|
||||
|
@ -34,9 +34,7 @@ public sealed class Context : INotifyRegistry
|
||||
internal const string SysRecipientName = "SYS_RECIPIENT_NAME";
|
||||
internal const string SysRecipientAddress = "SYS_RECIPIENT_ADDRESS";
|
||||
|
||||
private readonly Dictionary<string, ISenderChannel> _channels = new Dictionary<string, ISenderChannel>(2);
|
||||
|
||||
public event Action<Context, INotifyClient> NotifyClientRegistration;
|
||||
private readonly Dictionary<string, ISenderChannel> _channels = new Dictionary<string, ISenderChannel>(2);
|
||||
|
||||
public void RegisterSender(DispatchEngine dispatchEngine, string senderName, ISink senderSink)
|
||||
{
|
||||
|
@ -207,8 +207,8 @@ public class NotifyEngine
|
||||
try
|
||||
{
|
||||
await PrepareRequestFillSendersAsync(request, serviceScope);
|
||||
PrepareRequestFillPatterns(request, serviceScope);
|
||||
PrepareRequestFillTags(request, serviceScope);
|
||||
await PrepareRequestFillPatterns(request, serviceScope);
|
||||
await PrepareRequestFillTags(request, serviceScope);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -310,7 +310,7 @@ public class NotifyEngine
|
||||
noticeMessage.Pattern = pattern;
|
||||
noticeMessage.ContentType = pattern.ContentType;
|
||||
noticeMessage.AddArgument(request.Arguments.ToArray());
|
||||
var patternProvider = request.GetPatternProvider(serviceScope);
|
||||
var patternProvider = await request.GetPatternProvider(serviceScope);
|
||||
|
||||
var formatter = patternProvider.GetFormatter(pattern);
|
||||
try
|
||||
@ -375,7 +375,7 @@ public class NotifyEngine
|
||||
}
|
||||
}
|
||||
|
||||
private void PrepareRequestFillPatterns(NotifyRequest request, IServiceScope serviceScope)
|
||||
private async Task PrepareRequestFillPatterns(NotifyRequest request, IServiceScope serviceScope)
|
||||
{
|
||||
if (request._patterns == null)
|
||||
{
|
||||
@ -385,7 +385,7 @@ public class NotifyEngine
|
||||
return;
|
||||
}
|
||||
|
||||
var apProvider = request.GetPatternProvider(serviceScope);
|
||||
var apProvider = await request.GetPatternProvider(serviceScope);
|
||||
for (var i = 0; i < request._senderNames.Length; i++)
|
||||
{
|
||||
var senderName = request._senderNames[i];
|
||||
@ -404,9 +404,9 @@ public class NotifyEngine
|
||||
}
|
||||
}
|
||||
|
||||
private void PrepareRequestFillTags(NotifyRequest request, IServiceScope serviceScope)
|
||||
private async Task PrepareRequestFillTags(NotifyRequest request, IServiceScope serviceScope)
|
||||
{
|
||||
var patternProvider = request.GetPatternProvider(serviceScope);
|
||||
var patternProvider = await request.GetPatternProvider(serviceScope);
|
||||
foreach (var pattern in request._patterns)
|
||||
{
|
||||
IPatternFormatter formatter;
|
||||
|
@ -125,14 +125,9 @@ public class NotifyRequest
|
||||
return new NoticeMessage(recipient, NotifyAction, ObjectID);
|
||||
}
|
||||
|
||||
public IActionProvider GetActionProvider(IServiceScope scope)
|
||||
public async Task<IPatternProvider> GetPatternProvider(IServiceScope scope)
|
||||
{
|
||||
return ((INotifySource)scope.ServiceProvider.GetService(_notifySource.GetType())).GetActionProvider();
|
||||
}
|
||||
|
||||
public IPatternProvider GetPatternProvider(IServiceScope scope)
|
||||
{
|
||||
return ((INotifySource)scope.ServiceProvider.GetService(_notifySource.GetType())).GetPatternProvider();
|
||||
return await ((INotifySource)scope.ServiceProvider.GetService(_notifySource.GetType())).GetPatternProvider(this);
|
||||
}
|
||||
|
||||
public IRecipientProvider GetRecipientsProvider(IServiceScope scope)
|
||||
|
@ -29,8 +29,8 @@ namespace ASC.Notify.Model;
|
||||
public interface INotifySource
|
||||
{
|
||||
string Id { get; }
|
||||
IActionProvider GetActionProvider();
|
||||
IPatternProvider GetPatternProvider();
|
||||
Task<IActionProvider> GetActionProvider(NotifyRequest r);
|
||||
Task<IPatternProvider> GetPatternProvider(NotifyRequest r);
|
||||
IRecipientProvider GetRecipientsProvider();
|
||||
ISubscriptionProvider GetSubscriptionProvider();
|
||||
}
|
||||
|
@ -33,14 +33,13 @@ public abstract class NotifySource : INotifySource
|
||||
|
||||
protected ISubscriptionProvider _subscriprionProvider;
|
||||
protected IRecipientProvider _recipientsProvider;
|
||||
protected IActionProvider ActionProvider => GetActionProvider();
|
||||
protected IPatternProvider PatternProvider => GetPatternProvider();
|
||||
public string Id { get; private set; }
|
||||
|
||||
private readonly UserManager _userManager;
|
||||
private readonly SubscriptionManager _subscriptionManager;
|
||||
private readonly TenantManager _tenantManager;
|
||||
|
||||
protected NotifySource(string id, UserManager userManager, IRecipientProvider recipientsProvider, SubscriptionManager subscriptionManager)
|
||||
protected NotifySource(string id, UserManager userManager, IRecipientProvider recipientsProvider, SubscriptionManager subscriptionManager, TenantManager tenantManager)
|
||||
{
|
||||
ArgumentNullOrEmptyException.ThrowIfNullOrEmpty(id);
|
||||
|
||||
@ -48,18 +47,22 @@ public abstract class NotifySource : INotifySource
|
||||
_userManager = userManager;
|
||||
_recipientsProvider = recipientsProvider;
|
||||
_subscriptionManager = subscriptionManager;
|
||||
_tenantManager = tenantManager;
|
||||
}
|
||||
|
||||
protected NotifySource(Guid id, UserManager userManager, IRecipientProvider recipientsProvider, SubscriptionManager subscriptionManager)
|
||||
: this(id.ToString(), userManager, recipientsProvider, subscriptionManager)
|
||||
protected NotifySource(Guid id, UserManager userManager, IRecipientProvider recipientsProvider, SubscriptionManager subscriptionManager, TenantManager tenantManager)
|
||||
: this(id.ToString(), userManager, recipientsProvider, subscriptionManager, tenantManager)
|
||||
{
|
||||
}
|
||||
|
||||
public IActionProvider GetActionProvider()
|
||||
public async Task<IActionProvider> GetActionProvider(NotifyRequest r)
|
||||
{
|
||||
var culture = await GetCulture(r);
|
||||
CultureInfo.CurrentCulture = culture;
|
||||
CultureInfo.CurrentUICulture = culture;
|
||||
|
||||
lock (_actions)
|
||||
{
|
||||
var culture = CultureInfo.CurrentCulture;
|
||||
if (!_actions.ContainsKey(culture))
|
||||
{
|
||||
_actions[culture] = CreateActionProvider();
|
||||
@ -69,15 +72,14 @@ public abstract class NotifySource : INotifySource
|
||||
}
|
||||
}
|
||||
|
||||
public IPatternProvider GetPatternProvider()
|
||||
public async Task<IPatternProvider> GetPatternProvider(NotifyRequest r)
|
||||
{
|
||||
var culture = await GetCulture(r);
|
||||
CultureInfo.CurrentCulture = culture;
|
||||
CultureInfo.CurrentUICulture = culture;
|
||||
|
||||
lock (_patterns)
|
||||
{
|
||||
var culture = CultureInfo.CurrentCulture;
|
||||
if (CultureInfo.CurrentUICulture != culture)
|
||||
{
|
||||
CultureInfo.CurrentUICulture = culture;
|
||||
}
|
||||
if (!_patterns.ContainsKey(culture))
|
||||
{
|
||||
_patterns[culture] = CreatePatternsProvider();
|
||||
@ -115,4 +117,31 @@ public abstract class NotifySource : INotifySource
|
||||
return new RecipientProviderImpl(_userManager)
|
||||
?? throw new NotifyException("Provider IRecipientsProvider not instanced.");
|
||||
}
|
||||
|
||||
private async Task<CultureInfo> GetCulture(NotifyRequest r)
|
||||
{
|
||||
var tagCulture = r.Arguments.FirstOrDefault(a => a.Tag == "Culture");
|
||||
if (tagCulture != null)
|
||||
{
|
||||
return CultureInfo.GetCultureInfo((string)tagCulture.Value);
|
||||
}
|
||||
|
||||
CultureInfo culture = null;
|
||||
|
||||
var tenant = await _tenantManager.GetCurrentTenantAsync(false);
|
||||
|
||||
if (tenant != null)
|
||||
{
|
||||
culture = tenant.GetCulture();
|
||||
}
|
||||
|
||||
var user = await _userManager.SearchUserAsync(r.Recipient.ID);
|
||||
|
||||
if (!Users.Constants.LostUser.Equals(user) && !string.IsNullOrEmpty(user.CultureName))
|
||||
{
|
||||
culture = user.GetCulture();
|
||||
}
|
||||
|
||||
return culture;
|
||||
}
|
||||
}
|
||||
|
@ -32,8 +32,8 @@ namespace ASC.Files.Core.Services.NotifyService;
|
||||
[Scope]
|
||||
public class NotifySource : NotifySourceBase
|
||||
{
|
||||
public NotifySource(UserManager userManager, IRecipientProvider recipientsProvider, SubscriptionManager subscriptionManager)
|
||||
: base(new Guid("6FE286A4-479E-4c25-A8D9-0156E332B0C0"), userManager, recipientsProvider, subscriptionManager)
|
||||
public NotifySource(UserManager userManager, IRecipientProvider recipientsProvider, SubscriptionManager subscriptionManager, TenantManager tenantManager)
|
||||
: base(new Guid("6FE286A4-479E-4c25-A8D9-0156E332B0C0"), userManager, recipientsProvider, subscriptionManager, tenantManager)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -182,38 +182,10 @@ public class ProductSecurityInterceptor
|
||||
{
|
||||
var tenant = _tenantManager.GetCurrentTenant();
|
||||
|
||||
if (32 <= r.Recipient.ID.Length)
|
||||
{
|
||||
var guid = default(Guid);
|
||||
try
|
||||
{
|
||||
guid = new Guid(r.Recipient.ID);
|
||||
}
|
||||
catch (FormatException) { }
|
||||
catch (OverflowException) { }
|
||||
|
||||
if (guid != default)
|
||||
{
|
||||
u = await _userManager.GetUsersAsync(guid);
|
||||
}
|
||||
}
|
||||
|
||||
if (Constants.LostUser.Equals(u))
|
||||
{
|
||||
u = await _userManager.GetUserByEmailAsync(r.Recipient.ID);
|
||||
}
|
||||
|
||||
if (Constants.LostUser.Equals(u))
|
||||
{
|
||||
u = await _userManager.GetUserByUserNameAsync(r.Recipient.ID);
|
||||
}
|
||||
u = await _userManager.SearchUserAsync(r.Recipient.ID);
|
||||
|
||||
if (!Constants.LostUser.Equals(u))
|
||||
{
|
||||
var culture = !string.IsNullOrEmpty(u.CultureName) ? u.GetCulture() : tenant.GetCulture();
|
||||
CultureInfo.CurrentCulture = culture;
|
||||
CultureInfo.CurrentUICulture = culture;
|
||||
|
||||
// security
|
||||
var tag = r.Arguments.Find(a => a.Tag == CommonTags.ModuleID);
|
||||
var productId = tag != null ? (Guid)tag.Value : Guid.Empty;
|
||||
@ -232,14 +204,6 @@ public class ProductSecurityInterceptor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var tagCulture = r.Arguments.FirstOrDefault(a => a.Tag == CommonTags.Culture);
|
||||
if (tagCulture != null)
|
||||
{
|
||||
var culture = CultureInfo.GetCultureInfo((string)tagCulture.Value);
|
||||
CultureInfo.CurrentCulture = culture;
|
||||
CultureInfo.CurrentUICulture = culture;
|
||||
}
|
||||
}
|
||||
catch (Exception error)
|
||||
{
|
||||
|
@ -29,8 +29,8 @@ namespace ASC.Web.Studio.Core.Notify;
|
||||
[Scope]
|
||||
public class StudioNotifySource : NotifySource
|
||||
{
|
||||
public StudioNotifySource(UserManager userManager, IRecipientProvider recipientsProvider, SubscriptionManager subscriptionManager)
|
||||
: base("asc.web.studio", userManager, recipientsProvider, subscriptionManager)
|
||||
public StudioNotifySource(UserManager userManager, IRecipientProvider recipientsProvider, SubscriptionManager subscriptionManager, TenantManager tenantManager)
|
||||
: base("asc.web.studio", userManager, recipientsProvider, subscriptionManager, tenantManager)
|
||||
{
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user