Skip to content

Commit

Permalink
fix : Fix auth blocking caused by app push
Browse files Browse the repository at this point in the history
  • Loading branch information
wzh425 committed Jul 9, 2023
1 parent c8cde1d commit 3cf1cea
Show file tree
Hide file tree
Showing 25 changed files with 112 additions and 84 deletions.
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<Project>
<PropertyGroup>
<MasaFrameworkPackageVersion>1.0.0-rc.2.1</MasaFrameworkPackageVersion>
<MasaFrameworkPackageVersion>1.0.0-rc.3.5</MasaFrameworkPackageVersion>
</PropertyGroup>
</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the Apache License. See LICENSE.txt in the project root for license information.

namespace Masa.Mc.Contracts.Admin.Dtos.MessageTasks.Imports;

public class AppReceiverImportDto
{
[ImporterHeader(Name = "用户Id", IsAllowRepeat = false)]
[Required(ErrorMessage = "用户Id是必填的")]
public Guid UserId { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ public class WebsiteMessageReceiverImportDto
[ImporterHeader(Name = "用户Id", IsAllowRepeat = false)]
[Required(ErrorMessage = "用户Id是必填的")]
public Guid UserId { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ private async Task<ImportResult<dynamic>> GetDynamicImportDtos(ChannelTypes chan
return await _importer.DynamicImport<EmailReceiverImportDto>(stream);
case ChannelTypes.WebsiteMessage:
return await _importer.DynamicImport<WebsiteMessageReceiverImportDto>(stream);
case ChannelTypes.App:
return await _importer.DynamicImport<AppReceiverImportDto>(stream);
default:
throw new UserFriendlyException(errorCode: UserFriendlyExceptionCodes.UNKNOWN_CHANNEL_TYPE);
}
Expand All @@ -110,6 +112,14 @@ private MessageTaskReceiverDto GetMessageTaskReceiverDto(ChannelTypes channelTyp
receiver.SubjectId = subjectId;
}
break;
case ChannelTypes.App:
receiver.SubjectId = Guid.Empty;
object? userIdObj = obj.GetOrDefault(GetImporterHeaderDisplayName(typeof(AppReceiverImportDto), nameof(AppReceiverImportDto.UserId)));
if (Guid.TryParse(userIdObj?.ToString(), out var userId))
{
receiver.SubjectId = userId;
}
break;
default:
throw new UserFriendlyException(errorCode: UserFriendlyExceptionCodes.UNKNOWN_CHANNEL_TYPE);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,15 @@ protected override async Task ExecutingAsync(ResolveMessageTaskJobArgs args)
if (messageTask == null || messageTask.ReceiverType == ReceiverTypes.Broadcast)
return;

var receiverUsers = await _channelUserFinder.GetReceiverUsersAsync(messageTask.Channel, messageTask.Variables, messageTask.Receivers);
messageTask.SetReceiverUsers(receiverUsers.ToList());
var receiverUsers = (await _channelUserFinder.GetReceiverUsersAsync(messageTask.Channel, messageTask.Variables, messageTask.Receivers)).ToList();

await _messageTaskHistoryRepository.RemoveAsync(x => x.MessageTaskId == args.MessageTaskId);

var sendTime = DateTimeOffset.Now;
if (messageTask.SendRules.IsCustom)
{
var historyNum = messageTask.GetHistoryCount();
var sendingCount = messageTask.GetSendingCount();
var historyNum = messageTask.GetHistoryCount(receiverUsers);
var sendingCount = messageTask.GetSendingCount(receiverUsers);

var cronExpression = new CronExpression(messageTask.SendRules.CronExpression);
cronExpression.TimeZone = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");
Expand All @@ -58,15 +57,15 @@ protected override async Task ExecutingAsync(ResolveMessageTaskJobArgs args)
if (nextExcuteTime.HasValue)
{
sendTime = nextExcuteTime.Value;
var historyReceiverUsers = messageTask.GetHistoryReceiverUsers(i, sendingCount);
var historyReceiverUsers = messageTask.GetHistoryReceiverUsers(receiverUsers, i, sendingCount);
var history = new MessageTaskHistory(messageTask.Id, historyReceiverUsers, false, sendTime);
await _messageTaskHistoryRepository.AddAsync(history);
}
}
}
else
{
var history = new MessageTaskHistory(messageTask.Id, messageTask.ReceiverUsers, false, sendTime);
var history = new MessageTaskHistory(messageTask.Id, receiverUsers, false, sendTime);
history.ExecuteTask();
await _messageTaskRepository.UpdateAsync(messageTask);
await _messageTaskHistoryRepository.AddAsync(history);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,8 @@ private Type GetReceiverImportDtoType(ChannelTypes channelType)
return typeof(EmailReceiverImportDto);
case ChannelTypes.WebsiteMessage:
return typeof(WebsiteMessageReceiverImportDto);
case ChannelTypes.App:
return typeof(AppReceiverImportDto);
default:
throw new UserFriendlyException(errorCode: UserFriendlyExceptionCodes.UNKNOWN_CHANNEL_TYPE);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ public class MessageTask : FullAggregateRoot<Guid, Guid>

public List<MessageTaskReceiver> Receivers { get; protected set; } = new();

public List<MessageReceiverUser> ReceiverUsers { get; protected set; } = new();

public MessageTaskSendingRule SendRules { get; protected set; } = default!;

public ExtraPropertyDictionary Variables { get; protected set; } = new();
Expand Down Expand Up @@ -110,11 +108,6 @@ public virtual void SetDraft(bool isDraft)
}
}

public void SetReceiverUsers(List<MessageReceiverUser> receiverUsers)
{
ReceiverUsers = receiverUsers;
}

public virtual void UpdateVariables(ExtraPropertyDictionary variables)
{
Variables = variables;
Expand Down Expand Up @@ -156,21 +149,21 @@ public void SetSystemId(string systemId)
SystemId = systemId;
}

public int GetSendingCount()
public int GetSendingCount(List<MessageReceiverUser> receiverUsers)
{
var sendingCount = (int)SendRules.SendingCount;
if (sendingCount == 0)
{
sendingCount = ReceiverUsers.Count;
sendingCount = receiverUsers.Count;
}
return sendingCount;
}

public long GetHistoryCount()
public long GetHistoryCount(List<MessageReceiverUser> receiverUsers)
{
var totalCount = ReceiverUsers.Count;
var totalCount = receiverUsers.Count;

var sendingCount = GetSendingCount();
var sendingCount = GetSendingCount(receiverUsers);

var historyNum = (long)Math.Ceiling((double)totalCount / sendingCount);

Expand All @@ -182,9 +175,9 @@ public long GetHistoryCount()
return historyNum;
}

public List<MessageReceiverUser> GetHistoryReceiverUsers(int historyNum, int sendingCount)
public List<MessageReceiverUser> GetHistoryReceiverUsers(List<MessageReceiverUser> receiverUsers, int historyNum, int sendingCount)
{
return ReceiverUsers.Skip(historyNum * sendingCount).Take(sendingCount).ToList(); ;
return receiverUsers.Skip(historyNum * sendingCount).Take(sendingCount).ToList(); ;
}

public bool IsAppInWebsiteMessage
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,22 @@ public async Task<IEnumerable<MessageReceiverUser>> GetReceiverUsersAsync(AppCha

public async Task<IEnumerable<MessageReceiverUser>> TransformUserReceivers(AppChannel Channel, ExtraPropertyDictionary variables, IEnumerable<MessageTaskReceiver> receivers)
{
var receiverUsers = receivers
var receiverList = receivers.ToList();

if (Channel.Type == ChannelType.App)
{
var userIds = receiverList.Select(x => x.Receiver.SubjectId).ToList();
var clientIds = await GetUserClientIds(Channel, userIds);

return clientIds.Select(x =>
{
var receiver = receivers.FirstOrDefault(r => r.Receiver.SubjectId == x.Key);
var receiverUser = new MessageReceiverUser(x.Key, x.Value, receiver?.Variables == null || !receiver.Variables.Any() ? variables : receiver.Variables);
return receiverUser;
});
}

var receiverUsers = receiverList
.Select(async x =>
{
var channelUserIdentity = await GetChannelUserIdentity(Channel, x.Receiver);
Expand All @@ -53,6 +68,28 @@ public async Task<IEnumerable<MessageReceiverUser>> TransformUserReceivers(AppCh
return result;
}

private async Task<Dictionary<Guid, string>> GetUserClientIds(AppChannel channel, List<Guid> userIds)
{
var userSystemDatas = await _authClient.UserService.GetSystemListDataAsync<string>(userIds, $"{MasaStackConsts.MC_SYSTEM_ID}:{channel.Code}");
return userIds.ToDictionary(x => x, x =>
{
var userSystemValue = userSystemDatas.GetValueOrDefault(x);
if (userSystemValue == null)
return string.Empty;
var userSystemData = JsonSerializer.Deserialize<UserSystemData>(userSystemValue);
return userSystemData?.ClientId ?? string.Empty;
});
//return userSystemDatas.ToDictionary(x => x.Key, x =>
//{
// var userSystemData = JsonSerializer.Deserialize<UserSystemData>(x.Value);
// return userSystemData?.ClientId ?? string.Empty;
//});

//var userSystemDatas = await _authClient.UserService.GetSystemListDataAsync<UserSystemData>(userIds, $"{MasaStackConsts.MC_SYSTEM_ID}:{channel.Code}");
//return userSystemDatas.ToDictionary(x => x.Key, x => x.Value.ClientId);
}

private async Task<IEnumerable<MessageReceiverUser>> TransformDepartmentReceiversAsync(AppChannel channel, ExtraPropertyDictionary variables, IEnumerable<MessageTaskReceiver> receivers)
{
var orgIds = receivers.Select(x => x.Receiver.SubjectId).Distinct();
Expand Down Expand Up @@ -107,9 +144,18 @@ public async Task<IEnumerable<MessageReceiverUser>> TransformGroupReceiversAsync
private async Task<IEnumerable<MessageReceiverUser>> GetMessageReceiverUser(AppChannel channel, ReceiverGroupItemTypes type, List<Guid> subjectIds, ExtraPropertyDictionary variables)
{
var authUsers = await GetAuthUsers(type, subjectIds);

if (channel.Type == ChannelType.App)
{
var userIds = authUsers.Select(x => x.Id).ToList();
var clientIds = await GetUserClientIds(channel, userIds);

return clientIds.Select(x => new MessageReceiverUser(x.Key, x.Value, variables));
}

var receiverUsers = authUsers.Select(async x =>
{
var receiver = new Receiver(x.Id, x.DisplayName, x.Avatar, x.PhoneNumber, x.Email);
var receiver = new Receiver(x.Id, x.DisplayName, x.Avatar, x.PhoneNumber ?? string.Empty, x.Email ?? string.Empty);
var channelUserIdentity = await GetChannelUserIdentity(channel, receiver);
return new MessageReceiverUser(x.Id, channelUserIdentity, variables);
}).ToList();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@ public static void ConfigureMC(this ModelBuilder builder)
b.Property(x => x.Receivers).HasConversion(new ReceiversValueConverter()).Metadata.SetValueComparer(new ReceiversValueComparer());
b.Property(x => x.SendRules).HasConversion(new JsonValueConverter<MessageTaskSendingRule>());
b.Property(x => x.Variables).HasConversion(new ExtraPropertiesValueConverter()).Metadata.SetValueComparer(new ExtraPropertyDictionaryValueComparer());
b.Property(x => x.ReceiverUsers).HasConversion(new JsonValueConverter<List<MessageReceiverUser>>());
b.Property(x => x.ChannelType).HasConversion(x => x.Id, x => Enumeration.FromValue<ChannelType>(x));
b.Property(x => x.SystemId).HasMaxLength(128);
b.Property(x => x.ExtraProperties).HasConversion(new ExtraPropertiesValueConverter()).Metadata.SetValueComparer(new ExtraPropertyDictionaryValueComparer());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public async Task<Guid> RegisterJobAsync(Guid jobId, Guid messageTaskId, string
var mcUrl = _masaStackConfig.GetMcServiceDomain();
var request = new UpsertSchedulerJobRequest
{
ProjectIdentity = MasaStackConstant.MC,
ProjectIdentity = MasaStackProject.MC.Name,
Name = jobName,
JobType = JobTypes.JobApp,
CronExpression = cronExpression,
Expand Down
2 changes: 1 addition & 1 deletion src/Services/Masa.Mc.Service/Jobs/MessageTaskExecuteJob.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public class MessageTaskExecuteJob : SchedulerJob
//{
// configurationBuilder.UseDcc();
//});
await builder.Services.AddMasaStackConfigAsync();
await builder.Services.AddMasaStackConfigAsync(MasaStackProject.MC, MasaStackApp.Service);
var masaStackConfig = builder.Services.GetMasaStackConfig();
var configuration = builder.Services.GetMasaConfiguration().ConfigurationApi.GetDefault();
var redisOptions = new RedisConfigurationOptions
Expand Down
8 changes: 4 additions & 4 deletions src/Services/Masa.Mc.Service/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
ValidatorOptions.Global.LanguageManager = new MasaLanguageManager();
GlobalValidationOptions.SetDefaultCulture("zh-CN");

await builder.Services.AddMasaStackConfigAsync();
await builder.Services.AddMasaStackConfigAsync(MasaStackProject.MC, MasaStackApp.Service);
var masaStackConfig = builder.Services.GetMasaStackConfig();

var publicConfiguration = builder.Services.GetMasaConfiguration().ConfigurationApi.GetPublic();
Expand Down Expand Up @@ -39,7 +39,7 @@
{
ServiceNameSpace = builder.Environment.EnvironmentName,
ServiceVersion = masaStackConfig.Version,
ServiceName = masaStackConfig.GetServiceId(MasaStackConstant.MC),
ServiceName = masaStackConfig.GetServiceId(MasaStackProject.MC),
Layer = masaStackConfig.Namespace,
ServiceInstanceId = builder.Configuration.GetValue<string>("HOSTNAME")
};
Expand Down Expand Up @@ -154,12 +154,12 @@
})
.AddMasaDbContext<McDbContext>(builder =>
{
builder.UseSqlServer(masaStackConfig.GetConnectionString(MasaStackConstant.MC));
builder.UseSqlServer(masaStackConfig.GetConnectionString(MasaStackProject.MC.Name));
builder.UseFilter(options => options.EnableSoftDelete = true);
})
.AddMasaDbContext<McQueryContext>(builder =>
{
builder.UseSqlServer(masaStackConfig.GetConnectionString(MasaStackConstant.MC));
builder.UseSqlServer(masaStackConfig.GetConnectionString(MasaStackProject.MC.Name));
builder.UseFilter(options => options.EnableSoftDelete = true);
})
.AddScoped<IMcQueryContext, McQueryContext>()
Expand Down
4 changes: 2 additions & 2 deletions src/Services/Masa.Mc.Service/Properties/launchSettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
"OTLP_URL": "http://otel-collector.masastack:9013",
"ELASTIC": "{\"ESNode\": \"http://10.10.90.189\",\"Index\": \"user_dev\",\"ESPort\":30200}",
"REDIS": "{\"RedisHost\": \"10.130.0.235\", \"RedisPort\": 24615, \"RedisDb\": 0,\"RedisPassword\": \"Hzss@123\"}",
"CONNECTIONSTRING": "{\"Server\": \"10.175.171.201\", \"Port\": 32679,\"Database\":\"pm-dev\",\"UserId\": \"ss\",\"Password\":\"Hzss@123\"}",
"MASA_STACK": "[{\"id\":\"pm\",\"name\":\"PM\",\"service\":{\"name\":\"PM.Service\",\"id\":\"pm-service\",\"domain\":\"http://pm-service-develop.masastack.com\"},\"web\":{\"name\":\"PM.Web\",\"id\":\"pm-develop\",\"domain\":\"\"}},{\"id\":\"dcc\",\"name\":\"DCC\",\"service\":{\"name\":\"Dcc.Service\",\"id\":\"dcc-service\",\"domain\":\"http://dcc-service-develop.masastack.com\"},\"web\":{\"name\":\"DCC.Web\",\"id\":\"dcc-develop\",\"domain\":\"\"}},{\"id\":\"tsc\",\"name\":\"TSC\",\"service\":{\"name\":\"TSC.Service\",\"id\":\"tsc-service\",\"domain\":\"http://tsc-service-develop.masastack.com\"},\"web\":{\"name\":\"TSC.Web\",\"id\":\"tsc-develop\",\"domain\":\"\"}},{\"id\":\"alert\",\"name\":\"Alert\",\"service\":{\"name\":\"Alert.Service\",\"id\":\"alert-service\",\"domain\":\"http://alert-service-develop.masastack.com\"},\"web\":{\"name\":\"Alert.Web\",\"id\":\"alert-develop\",\"domain\":\"\"}},{\"id\":\"scheduler\",\"name\":\"Scheduler\",\"service\":{\"name\":\"Scheduler.Service\",\"id\":\"scheduler-service\",\"domain\":\"http://scheduler-service-develop.masastack.com\"},\"worker\":{\"name\":\"Scheduler.Worker\",\"id\":\"scheduler-worker\",\"domain\":\"\"},\"web\":{\"name\":\"Scheduler.Web\",\"id\":\"scheduler-develop\",\"domain\":\"\"}},{\"id\":\"mc\",\"name\":\"MC\",\"service\":{\"name\":\"MC.Service\",\"id\":\"mc-service\",\"domain\":\"http://mc-service-develop.masastack.com\"},\"web\":{\"name\":\"MC.Web\",\"id\":\"mc-develop\",\"domain\":\"\"}},{\"id\":\"auth\",\"name\":\"Auth\",\"service\":{\"name\":\"Auth.Service\",\"id\":\"auth-service-develop \",\"domain\":\"http://auth-service-develop.masastack.com\"},\"web\":{\"name\":\"Auth.Web\",\"id\":\"auth-develop\",\"domain\":\"\"},\"sso\":{\"name\":\"Auth.SSO\",\"id\":\"auth-sso\",\"domain\":\"https://sso-develop.masastack.com\"}}]",
"CONNECTIONSTRING": "{\"Server\": \"10.130.0.235\", \"Port\": 24878,\"Database\":\"pm-dev\",\"UserId\": \"ss\",\"Password\":\"Hzss@123\"}",
"MASA_STACK": "[{\"id\":\"pm\",\"service\":{\"id\":\"pm-service-dev\",\"domain\":\"http://pm-service-dev.masastack.com\"},\"web\":{\"id\":\"pm-web-dev\",\"domain\":\"https://pm-dev.masastack.com\"}},{\"id\":\"dcc\",\"service\":{\"id\":\"dcc-service-dev\",\"domain\":\"http://dcc-service-dev.masastack.com\"},\"web\":{\"id\":\"dcc-web-dev\",\"domain\":\"https://dcc-dev.masastack.com\"}},{\"id\":\"tsc\",\"service\":{\"id\":\"tsc-service-dev\",\"domain\":\"http://tsc-service-dev.masastack.com\"},\"web\":{\"id\":\"tsc-web-dev\",\"domain\":\"https://tsc-dev.masastack.com\"}},{\"id\":\"alert\",\"service\":{\"id\":\"alert-service-dev\",\"domain\":\"http://alert-service-dev.masastack.com\"},\"web\":{\"id\":\"alert-web-dev\",\"domain\":\"https://alert-dev.masastack.com\"}},{\"id\":\"scheduler\",\"service\":{\"id\":\"scheduler-service-dev\",\"domain\":\"http://scheduler-service-dev.masastack.com\"},\"worker\":{\"id\":\"scheduler-worker-dev\",\"domain\":\"http://scheduler-worker-dev.masastack.com\"},\"web\":{\"id\":\"scheduler-web-dev\",\"domain\":\"https://scheduler-dev.masastack.com\"}},{\"id\":\"mc\",\"service\":{\"id\":\"mc-service-dev\",\"domain\":\"http://mc-service-dev.masastack.com\"},\"web\":{\"id\":\"mc-web-dev\",\"domain\":\"https://mc-dev.masastack.com\"}},{\"id\":\"auth\",\"service\":{\"id\":\"auth-service-dev\",\"domain\":\"http://auth-service-dev.masastack.com\"},\"web\":{\"id\":\"auth-web-dev\",\"domain\":\"https://auth-dev.masastack.com\"},\"sso\":{\"id\":\"auth-sso-dev\",\"domain\":\"https://auth-sso-dev.masastack.com\"}}]",
"ADMIN_PWD": "admin_pwd",
"DCC_SECRET": "masastack.com",
"SUFFIX_IDENTITY": "dev"
Expand Down
2 changes: 1 addition & 1 deletion src/Services/Masa.Mc.Service/_Imports.cs
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@
global using Masa.Mc.Service.Admin.Application.QueryContext;
global using Masa.BuildingBlocks.Ddd.Domain.Values;
global using Masa.Mc.Service.Admin.Infrastructure.ChannelUserFinder.Provider.Auth;
global using Masa.BuildingBlocks.Ddd.Domain.SeedWork;
global using Masa.BuildingBlocks.Data.Contracts;
global using Masa.Mc.Service.Admin.Infrastructure.MessageTaskJobService;
global using Masa.Mc.Infrastructure.AppNotification;
global using Masa.Mc.Infrastructure.AppNotification.Infrastructure.OptionsResolve;
Expand Down
Loading

0 comments on commit 3cf1cea

Please sign in to comment.