Пример #1
0
        private async Task ApplyBlockListAndLog(ApplicationUser rostamBotUser, List <SuspiciousAccountDto> suspiciousAccounts, bool shouldBlock, CancellationToken cancellationToken)
        {
            //ToDo:remove magic strings
            var userAccessToken = await _userManager.GetAuthenticationTokenAsync(rostamBotUser, "Twitter", "UserAccessToken");

            var userAccessSecret = await _userManager.GetAuthenticationTokenAsync(rostamBotUser, "Twitter", "UserAccessSecret");

            if (string.IsNullOrEmpty(userAccessToken) || string.IsNullOrEmpty(userAccessSecret))
            {
                return;
            }

            var blockListApplyResult = _twitterBotService.BlockUsers(userAccessToken, userAccessSecret, suspiciousAccounts, shouldBlock: true);

            foreach (var blockResult in blockListApplyResult)
            {
                SuspiciousAccountDto suspiciousAccount = blockResult.Key;

                var blockHistory = new SuspicousAccountBlockHistory()
                {
                    ActionDate          = DateTime.Now,
                    IsBlocked           = true,
                    SuspiciousAccountId = suspiciousAccount.Id,
                    UserId = rostamBotUser.Id
                };

                await _db.SuspicousAccountBlockHistories.AddAsync(blockHistory);
            }

            await _db.SaveChangesAsync(cancellationToken);
        }
Пример #2
0
            public async Task <Unit> Handle(ChangeBlockStatus request, CancellationToken cancellationToken)
            {
                var suspiciousAccount = await _db.SuspiciousAccounts
                                        .SingleOrDefaultAsync(c => c.Id == request.SuspiciousAccountId, cancellationToken);

                if (suspiciousAccount == null)
                {
                    throw new NotFoundException(nameof(SuspiciousAccount), request.SuspiciousAccountId);
                }

                suspiciousAccount.ShouldBlock = request.BlockStatus;

                await _db.SaveChangesAsync(cancellationToken);

                //ToDo: use AutoMapper
                var suspiciousAccountDto = new SuspiciousAccountDto()
                {
                    Id                = suspiciousAccount.Id,
                    TwitterUserId     = suspiciousAccount.TwitterUserId,
                    TwitterScreenName = suspiciousAccount.TwitterScreenName,
                    TwitterJoinDate   = suspiciousAccount.TwitterJoinDate
                };

                await _mediator.Publish(
                    new ChangeBlockStatusSaved
                {
                    SuspiciousAccountDto = suspiciousAccountDto,
                    BlockStatus          = request.BlockStatus
                },
                    cancellationToken);

                return(Unit.Value);
            }
Пример #3
0
        public async Task UpdateBlockList(SuspiciousAccountDto suspiciousAccount, bool shouldBlock, CancellationToken cancellationToken)
        {
            var rostamBotUsers = _userManager.Users.ToList();

            foreach (var rostamBotUser in rostamBotUsers)
            {
                await ApplyBlockListAndLog(rostamBotUser, new List <SuspiciousAccountDto> {
                    suspiciousAccount
                }, shouldBlock, cancellationToken);
            }
        }
Пример #4
0
            public async Task <Unit> Handle(AddSuspiciousAccount request, CancellationToken cancellationToken)
            {
                var twitterUserInfo = _rostamBotManagerService.GetSuspiciousAccountInfo(request.TwitterScreenName);


                if (await _db.SuspiciousAccounts.AnyAsync(x => x.TwitterUserId == twitterUserInfo.TwitterUserId))
                {
                    throw new AppException($"{request.TwitterScreenName} is already in block list");
                }

                var newSuspiciousAccount = new SuspiciousAccount()
                {
                    ShouldBlock       = true,
                    TwitterJoinDate   = twitterUserInfo.TwitterJoinDate,
                    TwitterScreenName = twitterUserInfo.TwitterScreenName,
                    TwitterUserId     = twitterUserInfo.TwitterUserId
                };

                await _db.SuspiciousAccounts.AddAsync(newSuspiciousAccount);

                await _db.SaveChangesAsync(cancellationToken);

                var suspiciousAccountDto = new SuspiciousAccountDto()
                {
                    Id                = newSuspiciousAccount.Id,
                    TwitterUserId     = newSuspiciousAccount.TwitterUserId,
                    TwitterScreenName = newSuspiciousAccount.TwitterScreenName,
                    TwitterJoinDate   = newSuspiciousAccount.TwitterJoinDate
                };

                await _mediator.Publish(
                    new ChangeBlockStatusSaved
                {
                    SuspiciousAccountDto = twitterUserInfo,
                    BlockStatus          = true
                },
                    cancellationToken);

                return(Unit.Value);
            }
Пример #5
0
        public Task UpdateBlockList(SuspiciousAccountDto suspiciousAccount, bool shouldBlock)
        {
            BackgroundJob.Schedule <ISyncBlockListJob>(job => job.UpdateBlockList(suspiciousAccount, shouldBlock, new CancellationToken()), new DateTimeOffset(DateTime.Now.AddMinutes(15)));

            return(Task.CompletedTask);
        }