protected override async Task <AuthenticateResult> HandleAuthenticateAsync() { if (!Request.Headers.ContainsKey(AuthorizationHeaderName)) { return(AuthenticateResult.NoResult()); } if (!AuthenticationHeaderValue.TryParse(Request.Headers[AuthorizationHeaderName], out AuthenticationHeaderValue headerValue)) { return(AuthenticateResult.NoResult()); } if (!BasicSchemeName.Equals(headerValue.Scheme, StringComparison.OrdinalIgnoreCase)) { return(AuthenticateResult.NoResult()); } var headerValueBytes = Convert.FromBase64String(headerValue.Parameter); var userAndPassword = Encoding.UTF8.GetString(headerValueBytes); var parts = userAndPassword.Split(':'); if (parts.Length != 2) { return(AuthenticateResult.Fail("Invalid Basic authentication header")); } var user = parts[0]; var password = parts[1]; var users = await _httpProxy.GetCustomersAsync(CancellationToken.None); var search = users.Clients.FirstOrDefault(u => u.Name == user && u.Email == password); bool isValidUser = search != null; if (!isValidUser) { return(AuthenticateResult.Fail("Invalid username or password")); } var claims = new[] { new Claim(ClaimTypes.Name, search.Name), new Claim(ClaimTypes.Email, search.Email), new Claim(ClaimTypes.Role, search.Role) }; var identity = new ClaimsIdentity(claims, Scheme.Name); var principal = new ClaimsPrincipal(identity); var ticket = new AuthenticationTicket(principal, Scheme.Name); return(AuthenticateResult.Success(ticket)); }
public async Task <IEnumerable <Policy> > GetPoliciesLinkedToCustomerByNameAsync(CustomerRequest request, CancellationToken cancellationToken) { var client = await _httpProxy.GetCustomersAsync(cancellationToken); var policies = await _httpProxy.GetPoliciesAsync(cancellationToken); var customerSelect = client.Clients.FirstOrDefault(customer => customer.Name == request.Name); if (customerSelect != null) { return(policies.Policies.Where(policy => policy.ClientId == customerSelect.Id).ToList()); } return(null); }
public async Task <Customer> GetCustomerByIdAsync(CustomerRequest request, CancellationToken cancellationToken) { var client = await _httpProxy.GetCustomersAsync(cancellationToken); return(client.Clients.FirstOrDefault(customer => customer.Id == request.Id)); }