コード例 #1
0
        public async Task HandleAsync()
        {
            try
            {
                var chatUsers = await updateChatsService.EditChatUsersAsync(notice.ChatUsers, notice.ChatId, notice.RequestedUserId).ConfigureAwait(false);

                var bannedUsers = chatUsers.Where(opt => opt.Banned == true);
                if (!bannedUsers.IsNullOrEmpty())
                {
                    foreach (var user in bannedUsers)
                    {
                        var systemMessageInfo = SystemMessageInfoFactory.CreateUserBannedMessageInfo(user.UserId);
                        var message           = await systemMessagesService.CreateMessageAsync(ConversationType.Chat, user.ChatId.Value, systemMessageInfo);

                        conversationsNoticeService.SendSystemMessageNoticeAsync(message);
                    }
                }
                var deletedUsers = chatUsers.Where(opt => opt.Deleted == true);
                if (!deletedUsers.IsNullOrEmpty())
                {
                    foreach (var user in deletedUsers)
                    {
                        var systemMessageInfo = SystemMessageInfoFactory.CreateUserRemovedMessageInfo(user.UserId);
                        var message           = await systemMessagesService.CreateMessageAsync(ConversationType.Chat, user.ChatId.Value, systemMessageInfo);

                        conversationsNoticeService.SendSystemMessageNoticeAsync(message);
                    }
                }
            }
            catch (UserIsNotInConversationException)
            {
                ChatVm newChat = await nodeRequestSender.GetFullChatInformationAsync(notice.ChatId, node).ConfigureAwait(false);

                await crossNodeService.NewOrEditChatAsync(newChat).ConfigureAwait(false);
            }
            catch (ConversationNotFoundException ex)
            {
                ChatVm newChat = await nodeRequestSender.GetFullChatInformationAsync(ex.ConversationId, node).ConfigureAwait(false);

                await crossNodeService.NewOrEditChatAsync(newChat).ConfigureAwait(false);
            }
            conversationsNoticeService.SendChangeChatUsersNoticeAsync(notice.ChatUsers, notice.ChatId);
            ChatVm chat = await loadChatsService.GetChatByIdAsync(notice.ChatId).ConfigureAwait(false);

            BlockSegmentVm segment = await BlockSegmentsService.Instance.CreateChangeUsersChatSegmetAsync(
                notice.ChatUsers,
                notice.ChatId,
                notice.RequestedUserId,
                node.Node.Id,
                chat.Type,
                NodeData.Instance.NodeKeys.SignPrivateKey,
                NodeData.Instance.NodeKeys.SymmetricKey,
                NodeData.Instance.NodeKeys.Password,
                NodeData.Instance.NodeKeys.KeyId).ConfigureAwait(false);

            BlockGenerationHelper.Instance.AddSegment(segment);
        }
コード例 #2
0
        public async Task EditChatUsers()
        {
            var chat           = fillTestDbHelper.Chats.LastOrDefault();
            var chatUsers      = chat.ChatUsers.ToList();
            var exptectedUsers = chatUsers.Select(opt =>
            {
                if (opt.UserRole <= UserRole.Moderator)
                {
                    return(new ChatUserVm
                    {
                        Banned = true,
                        Deleted = true,
                        UserRole = UserRole.Moderator,
                        UserId = opt.UserId,
                        ChatId = opt.ChatId,
                        IsMuted = opt.IsMuted,
                        InviterId = opt.InviterId,
                        Joined = opt.Joined
                    });
                }
                else
                {
                    return(new ChatUserVm
                    {
                        Banned = opt.Banned,
                        Deleted = opt.Deleted,
                        ChatId = opt.ChatId,
                        UserId = opt.UserId,
                        UserRole = opt.UserRole,
                        IsMuted = opt.IsMuted,
                        InviterId = opt.InviterId,
                        Joined = opt.Joined
                    });
                }
            });
            var actualUsers = await updateChatsService.EditChatUsersAsync(exptectedUsers, chat.Id, chat.ChatUsers.FirstOrDefault(opt => opt.UserRole >= UserRole.Admin).UserId);

            Assert.Equal(
                ObjectSerializer.ObjectToJson(exptectedUsers.OrderBy(opt => opt.UserId)),
                ObjectSerializer.ObjectToJson(actualUsers.OrderBy(opt => opt.UserId)));
        }
コード例 #3
0
        public async Task <Response> CreateResponseAsync()
        {
            try
            {
                List <ChatUserVm> chatUsers = await updateChatsService.EditChatUsersAsync(
                    request.ChatUsers, request.ChatId, clientConnection.UserId.GetValueOrDefault()).ConfigureAwait(false);

                var bannedUsers = chatUsers.Where(opt => opt.Banned == true);
                if (!bannedUsers.IsNullOrEmpty())
                {
                    foreach (var user in bannedUsers)
                    {
                        var systemMessageInfo = SystemMessageInfoFactory.CreateUserBannedMessageInfo(user.UserId);
                        var message           = await systemMessagesService.CreateMessageAsync(ConversationType.Chat, user.ChatId.Value, systemMessageInfo);

                        conversationsNoticeService.SendSystemMessageNoticeAsync(message);
                    }
                }
                var deletedUsers = chatUsers.Where(opt => opt.Deleted == true);
                if (!deletedUsers.IsNullOrEmpty())
                {
                    foreach (var user in deletedUsers)
                    {
                        var systemMessageInfo = SystemMessageInfoFactory.CreateUserRemovedMessageInfo(user.UserId);
                        var message           = await systemMessagesService.CreateMessageAsync(ConversationType.Chat, user.ChatId.Value, systemMessageInfo);

                        conversationsNoticeService.SendSystemMessageNoticeAsync(message);
                    }
                }

                ChatVm chat = await loadChatsService.GetChatByIdAsync(request.ChatId).ConfigureAwait(false);

                BlockSegmentVm segment = await BlockSegmentsService.Instance.CreateChangeUsersChatSegmetAsync(
                    chatUsers,
                    request.ChatId,
                    clientConnection.UserId.GetValueOrDefault(),
                    NodeSettings.Configs.Node.Id,
                    chat.Type,
                    NodeData.Instance.NodeKeys.SignPrivateKey,
                    NodeData.Instance.NodeKeys.SymmetricKey,
                    NodeData.Instance.NodeKeys.Password,
                    NodeData.Instance.NodeKeys.KeyId)
                                         .ConfigureAwait(false);

                BlockGenerationHelper.Instance.AddSegment(segment);
                nodeNoticeService.SendBlockSegmentsNodeNoticeAsync(new List <BlockSegmentVm> {
                    segment
                });
                conversationsNoticeService.SendChangeChatUsersNoticeAsync(chatUsers, request.ChatId, clientConnection);
                nodeNoticeService.SendChangeChatUsersNodeNoticeAsync(chatUsers.ToList(), request.ChatId, clientConnection.UserId.GetValueOrDefault(), chat);
                UsersConversationsCacheService.Instance.UpdateUsersChatsAsync(chatUsers.Select(opt => opt.UserId));
                return(new ChatUsersResponse(request.RequestId, chatUsers));
            }
            catch (ChatUserBlockedException ex)
            {
                Logger.WriteLog(ex, request);
                return(new ResultResponse(request.RequestId, "User blocked in chat.", ErrorCode.UserBlocked));
            }
            catch (UserIsNotInConversationException ex)
            {
                Logger.WriteLog(ex, request);
                return(new ResultResponse(request.RequestId, "User is not in chat.", ErrorCode.UserIsNotInChat));
            }
            catch (EditConversationUsersException ex)
            {
                Logger.WriteLog(ex, request);
                return(new ResultResponse(request.RequestId, "User does not access to the chat.", ErrorCode.PermissionDenied));
            }
            catch (ConversationNotFoundException ex)
            {
                Logger.WriteLog(ex);
                return(new ResultResponse(request.RequestId, "Chat not found.", ErrorCode.ObjectDoesNotExists));
            }
        }