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