public async Task <List <Claim> > Execute(UserClaimsRequest request) { List <Claim> claims = new List <Claim>(); try { //Retrieve account and check existence Account account = await _accountRepo.Find(x => x.AccountId == request.AccountId).SingleOrDefaultAsync(); if (account == null) { throw new Exception("Account with provided account id was not found"); } claims.Add(new Claim("Username", account.Username)); claims.Add(new Claim("MainEmail", account.Email)); Claim accountStatusClaim = AccountStatusClaim(account); claims.Add(accountStatusClaim); if (accountStatusClaim.Value != "Ok") { return(claims); } //Get user User user = await _userRepo.Find(x => x.AccountId == request.AccountId).SingleOrDefaultAsync(); if (account == null) { throw new Exception("User with provided account id was not found"); } //Filter definition for user roles var rolesFilter = Builders <Role> .Filter.And(Builders <Role> .Filter.Eq(r => r.Status, RoleStatus.Active), Builders <Role> .Filter.In(r => r.Consumer, request.ClaimsConsumers), Builders <Role> .Filter.In(r => r.Id, user.RoleIds)); List <Role> userRoles = await _roleRepo.Find(rolesFilter).ToListAsync(); List <Claim> userClaims = UserClaims(user, userRoles); claims.AddRange(userClaims); return(claims); } catch (Exception ex) { //Log error await _logger.LogErrorAsync("GetUserClaimsCommand.Execute", "Exception was thrown", new { UserClaimsRequest = request, Exception = ex }); throw; } }
public async Task Consume(ConsumeContext <UserClaimsMQRequest> context) { try { UserClaimsMQResponse response = new UserClaimsMQResponse(); try { UserClaimsRequest request = new UserClaimsRequest() { CorrelationId = context.Message.CorrelationId, AccountId = context.Message.AccountId, ClaimsConsumers = context.Message.ClaimsConsumers }; response.SetClaims(await _getUserClaimsCommand.Execute(request)); response.OpSuccess = true; await _logger.LogEventAsync("UserClaimsConsumer.Consume", $"User claims request fulfilled. AccountId: {context.Message.AccountId}"); } catch (Exception ex) { //Log error await _logger.LogErrorAsync("UserClaimsConsumer.Consume.InnerCatch", "Exception was thrown", new { Context = context, Exception = ex }); response.OpSuccess = false; } await context.RespondAsync <UserClaimsMQResponse>(response); } catch (Exception ex) { //Log error await _logger.LogErrorAsync("UserClaimsConsumer.Consume.OuterCatch", "Exception was thrown", new { Context = context, Exception = ex }); } }