Esempio n. 1
0
            public async Task <Response> Handle(Request request, CancellationToken cancellationToken)
            {
                var user = await _context.Users
                           .Include(x => x.Roles)
                           .SingleOrDefaultAsync(x => x.Username == request.Username);

                if (user == null)
                {
                    throw new Exception();
                }

                if (!ValidateUser(user, _passwordHasher.HashPassword(user.Salt, request.Password)))
                {
                    throw new Exception();
                }

                _tokenBuilder
                .AddUsername(user.Username)
                .AddOrUpdateClaim(new System.Security.Claims.Claim(Constants.ClaimTypes.UserId, $"{user.UserId}"));

                foreach (var role in user.Roles)
                {
                    _tokenBuilder.AddOrUpdateClaim(new System.Security.Claims.Claim(Constants.ClaimTypes.Role, role.Name));
                }

                return(new(_tokenBuilder.Build(), user.UserId));
            }
Esempio n. 2
0
            public async Task <Response> Handle(Request request, CancellationToken cancellationToken)
            {
                var userAccountRoles = await(from u in _context.Users
                                             join a in _context.Accounts on u.UserId equals a.UserId
                                             join rr in _context.Users.SelectMany(x => x.Roles) on true equals true
                                             join r in _context.Roles on rr.RoleId equals r.RoleId
                                             where u.Username == request.Username
                                             select new
                {
                    User    = u,
                    Role    = r,
                    Account = a
                }).ToListAsync();

                var user = userAccountRoles.FirstOrDefault().User;

                var account = userAccountRoles.First().Account;

                if (user == null)
                {
                    throw new Exception();
                }

                if (!ValidateUser(user, _passwordHasher.HashPassword(user.Salt, request.Password)))
                {
                    throw new Exception();
                }


                foreach (var role in userAccountRoles.Select(x => x.Role))
                {
                    _tokenBuilder.AddOrUpdateClaim(new Claim(Constants.ClaimTypes.Role, role.Name));
                }

                _tokenBuilder
                .AddUsername(user.Username)
                .AddOrUpdateClaim(new Claim(Constants.ClaimTypes.AccountId, $"{account.AccountId}"))
                .AddOrUpdateClaim(new Claim(Constants.ClaimTypes.UserId, $"{account.UserId}"));

                return(new(_tokenBuilder.Build(), user.UserId));
            }