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;
            }
        }
Пример #2
0
        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
                });
            }
        }