// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/http/http_auth.h" #include "net/http/http_auth_handler_ntlm.h" #include "net/base/completion_once_callback.h" #include "net/base/net_errors.h" #include "net/http/http_auth_mechanism.h" #include "url/scheme_host_port.h" namespace net { int HttpAuthHandlerNTLM::Factory::CreateAuthHandler( HttpAuthChallengeTokenizer* challenge, HttpAuth::Target target, const SSLInfo& ssl_info, const NetworkAnonymizationKey& network_anonymization_key, const url::SchemeHostPort& scheme_host_port, CreateReason reason, int digest_nonce_count, const NetLogWithSource& net_log, HostResolver* host_resolver, std::unique_ptr* handler) { if (reason == CREATE_PREEMPTIVE) return ERR_UNSUPPORTED_AUTH_SCHEME; // TODO(cbentzel): Move towards model of parsing in the factory // method and only constructing when valid. // NOTE: Default credentials are not supported for the portable implementation // of NTLM. auto tmp_handler = std::make_unique(http_auth_preferences()); if (!tmp_handler->InitFromChallenge(challenge, target, ssl_info, network_anonymization_key, scheme_host_port, net_log)) { return ERR_INVALID_RESPONSE; } *handler = std::move(tmp_handler); return OK; } HttpAuthHandlerNTLM::HttpAuthHandlerNTLM( const HttpAuthPreferences* http_auth_preferences) : mechanism_(http_auth_preferences) {} bool HttpAuthHandlerNTLM::NeedsIdentity() { return mechanism_.NeedsIdentity(); } bool HttpAuthHandlerNTLM::AllowsDefaultCredentials() { // Default credentials are not supported in the portable implementation of // NTLM, but are supported in the SSPI implementation. return false; } int HttpAuthHandlerNTLM::GenerateAuthTokenImpl( const AuthCredentials* credentials, const HttpRequestInfo* request, CompletionOnceCallback callback, std::string* auth_token) { return mechanism_.GenerateAuthToken(credentials, CreateSPN(scheme_host_port_), channel_bindings_, auth_token, net_log(), std::move(callback)); } HttpAuth::AuthorizationResult HttpAuthHandlerNTLM::ParseChallenge( HttpAuthChallengeTokenizer* tok) { return mechanism_.ParseChallenge(tok); } HttpAuthHandlerNTLM::~HttpAuthHandlerNTLM() = default; } // namespace net