示例#1
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var site = await _context.Sites.SingleOrDefaultAsync(x => x.SiteType == SiteTypeEnum.Blog);

                var user = await _userManager.FindByNameAsync(request.UserName);

                if (user == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, new { User = "******" });
                }

                await _userManager.SetLockoutEnabledAsync(user, true);

                var result = await _userManager.SetLockoutEndDateAsync(user, DateTimeOffset.UtcNow.AddYears(100));

                var refreshTokens = user.Tokens.Where(t => t.IsActive);

                if (refreshTokens.Count() > 0)
                {
                    foreach (var rt in refreshTokens)
                    {
                        _jwtGenerator.RevokeToken(user, rt.RefreshToken);
                    }
                }

                if (result.Succeeded)
                {
                    await _logger.LogActivity(
                        site.Id,
                        ActivityCodeEnum.UserLockout,
                        ActivitySeverityEnum.High,
                        ActivityObjectEnum.User,
                        $"The user {user.UserName} has been locked by Admin.");

                    return(Unit.Value);
                }

                throw new Exception("Problem saving changes!");
            }