private async Task <IActionResult> HandleIdentifiedConnectionAsync() { string protocol = Request.Headers["Auth-Protocol"]; ProxyDestination dest = _proxyDests.FirstOrDefault(d => d.Protocol == protocol && d.Authenticated); if (dest == null) { _log.LogWarning("Protocol {protocol} not supported for identified connections", protocol); return(AuthStatus()); } string username = Request.Headers["Auth-User"]; string password = Request.Headers["Auth-Pass"]; if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) { _log.LogInformation("Missing credentials", username); return(AuthStatus()); } string emailAddress = $"{username}{_aliasSuffix}"; Alias alias = await _identityWs.GetAliasAsync(emailAddress); if (alias == null) { _log.LogInformation("Alias {emailAddress} not found", emailAddress); return(AuthStatus()); } Client client = await alias.GetClientAsync(_clientName); if (client == null) { _log.LogInformation("Client {CLIENT_NAME} not found in Alias {emailAddress}", _clientName, emailAddress); return(AuthStatus()); } try { await client.LogInAsync(password); } catch (IdentityException ex) { _log.LogInformation(ex, "Status code {StatusCode} during login", ex.StatusCode); return(AuthStatus()); } Response.Headers["Auth-Server"] = await DnsLookupAsync(dest.Host); Response.Headers["Auth-Port"] = dest.Port.ToString(); return(AuthStatus("OK")); }
private async Task <IActionResult> HandleAnonymousConnectionAsync() { string protocol = Request.Headers["Auth-Protocol"]; ProxyDestination dest = _proxyDests.FirstOrDefault(d => d.Protocol == protocol && !d.Authenticated); if (dest == null) { _log.LogWarning("Protocol {protocol} not supported for anonymous connections", protocol); return(AuthStatus()); } Response.Headers["Auth-Server"] = await DnsLookupAsync(dest.Host); Response.Headers["Auth-Port"] = dest.Port.ToString(); return(AuthStatus("OK")); }