public async Task <Response> CreateResponseAsync()
        {
            List <UserVm> users = await loadUsersService.GetUsersAsync(request.User, 100, request.NavigationUserId.GetValueOrDefault()).ConfigureAwait(false);

            users = await privacyService.ApplyPrivacySettingsAsync(users).ConfigureAwait(false);

            return(new FoundUsersResponse(request.RequestId, request.User, users));
        }
Example #2
0
        public async Task HandleAsync()
        {
            NodeResponse response;

            try
            {
                switch (request.RequestType)
                {
                case Enums.NodeRequestType.GetChats:
                {
                    IEnumerable <ChatVm> chats = await loadChatsService.GetChatsByIdAsync(request.ObjectsId, request.RequestorUserId).ConfigureAwait(false);

                    response = new ChatsNodeResponse(request.RequestId, chats);
                }
                break;

                case Enums.NodeRequestType.GetUsers:
                {
                    IEnumerable <UserVm> users = await loadUsersService.GetUsersByIdAsync(request.ObjectsId, request.RequestorUserId).ConfigureAwait(false);

                    users = await privacyService.ApplyPrivacySettingsAsync(users, request.RequestorUserId).ConfigureAwait(false);

                    response = new UsersNodeResponse(request.RequestId, users);
                }
                break;

                case Enums.NodeRequestType.GetChannels:
                {
                    IEnumerable <ChannelDto> channels = await loadChannelsService.GetChannelsWithSubscribersAsync(request.ObjectsId).ConfigureAwait(false);

                    response = new ChannelsNodeResponse(request.RequestId, channels);
                }
                break;

                case Enums.NodeRequestType.GetFiles:
                {
                    IEnumerable <FileInfoVm> files = await filesService.GetFilesInfoAsync(request.FilesIds).ConfigureAwait(false);

                    response = new FilesInformationResponse(request.RequestId, files);
                }
                break;

                default:
                    response = new ResultNodeResponse(request.RequestId, ObjectsLibrary.Enums.ErrorCode.InvalidRequestData, "Unsupported request type.");
                    break;
                }
            }
            catch
            {
                response = new ResultNodeResponse(request.RequestId, ObjectsLibrary.Enums.ErrorCode.UnknownError, "An error occurred while processing the request.");
            }
            NodeWebSocketCommunicationManager.SendResponse(response, nodeConnection);
        }
        public async Task <Response> CreateResponseAsync()
        {
            List <UserVm> users = await loadUsersService.GetUsersByIdAsync(request.UsersId, request.IncludeContact?clientConnection.UserId : null).ConfigureAwait(false);

            List <UserVm> resultUsers = new List <UserVm>();
            var           groups      = users.GroupBy(opt => opt.NodeId.GetValueOrDefault());

            foreach (var group in groups)
            {
                if (group.Key == NodeSettings.Configs.Node.Id)
                {
                    resultUsers.AddRange(await privacyService.ApplyPrivacySettingsAsync(group, clientConnection.UserId.GetValueOrDefault()).ConfigureAwait(false));
                }
                else
                {
                    var nodeConnection = connectionsService.GetNodeConnection(group.Key);
                    if (nodeConnection != null)
                    {
                        await MetricsHelper.Instance.SetCrossNodeApiInvolvedAsync(request.RequestId).ConfigureAwait(false);

                        IEnumerable <UserVm> responseUsers = await nodeRequestSender.GetUsersInfoAsync(
                            group.Select(opt => opt.Id.GetValueOrDefault()).ToList(),
                            clientConnection.UserId,
                            nodeConnection).ConfigureAwait(false);

                        if (!responseUsers.IsNullOrEmpty())
                        {
                            resultUsers.AddRange(responseUsers);
                        }
                    }
                }
            }
            var otherNodesUsers = resultUsers.Where(opt => opt.NodeId != NodeSettings.Configs.Node.Id);

            if (otherNodesUsers != null)
            {
                foreach (var user in otherNodesUsers)
                {
                    var localUser = users.FirstOrDefault(opt => opt.Id == user.Id);
                    user.Contact = localUser?.Contact;
                    user.Groups  = localUser?.Groups;
                }
            }
            return(new UsersResponse(request.RequestId, resultUsers));
        }
Example #4
0
        public async Task ApplyPrivacySettingsGroupsAndContacts()
        {
            var user       = fillTestDbHelper.Users.FirstOrDefault();
            var firstUser  = UserConverter.GetUserVm(fillTestDbHelper.Users.FirstOrDefault());
            var secondUser = UserConverter.GetUserVm(fillTestDbHelper.Users.Skip(1).FirstOrDefault());
            var thirdUser  = UserConverter.GetUserVm(fillTestDbHelper.Users.Skip(2).FirstOrDefault());
            var fourthUser = UserConverter.GetUserVm(fillTestDbHelper.Users.Skip(3).FirstOrDefault());
            await contactsService.RemoveContactsAsync(user.Contacts.Select(opt => opt.ContactId).ToList(), user.Id);

            var secondContact = await contactsService.CreateOrEditContactAsync(new ContactDto
            {
                ContactUserId = secondUser.Id.Value,
                UserId        = firstUser.Id.Value
            });

            var thirdContact = await contactsService.CreateOrEditContactAsync(new ContactDto
            {
                ContactUserId = thirdUser.Id.Value,
                UserId        = firstUser.Id.Value
            });

            var group = await gropsService.CreateOrEditGroupAsync(new GroupDto
            {
                UserId  = firstUser.Id.Value,
                UsersId = new List <long> {
                    thirdContact.ContactUserId
                },
                PrivacySettings = int.MaxValue
            });

            firstUser.ContactsPrivacy[1] = true;
            var filteredBySecondUser = (await privacyService.ApplyPrivacySettingsAsync(new List <UserVm> {
                firstUser
            }, secondUser.Id)).FirstOrDefault();

            Assert.True(filteredBySecondUser.NameFirst != null &&
                        filteredBySecondUser.NameSecond != null &&
                        filteredBySecondUser.Tag != null &&
                        filteredBySecondUser.About == null &&
                        filteredBySecondUser.Photo == null &&
                        filteredBySecondUser.Phones == null &&
                        filteredBySecondUser.Emails == null);
            var filteredByThirdUser = (await privacyService.ApplyPrivacySettingsAsync(new List <UserVm> {
                firstUser
            }, thirdUser.Id)).FirstOrDefault();

            Assert.True(filteredByThirdUser.NameFirst != null &&
                        filteredByThirdUser.NameSecond != null &&
                        filteredByThirdUser.Tag != null &&
                        filteredByThirdUser.About != null &&
                        filteredByThirdUser.Photo != null &&
                        filteredByThirdUser.Phones != null &&
                        filteredByThirdUser.Emails != null);
            var filteredByFourthUser = (await privacyService.ApplyPrivacySettingsAsync(new List <UserVm> {
                firstUser
            }, fourthUser.Id)).FirstOrDefault();

            Assert.True(filteredByFourthUser.NameFirst == null &&
                        filteredByFourthUser.NameSecond == null &&
                        filteredByFourthUser.Tag == null &&
                        filteredByFourthUser.About == null &&
                        filteredByFourthUser.Photo == null &&
                        filteredByFourthUser.Phones == null &&
                        filteredByFourthUser.Emails == null);
        }