/// <summary> /// Acquires credentials via the registered callbacks. /// <para/> /// Returns `<see cref="Credential"/>` from the authentication object, authority or storage if successful; otherwise `<see langword="null"/>`. /// </summary> /// <param name="targetUri"> /// The uniform resource indicator used to uniquely identify the credentials. /// </param> public async Task <Credential> AcquireCredentials(TargetUri targetUri) { if (targetUri is null) { throw new ArgumentNullException(nameof(targetUri)); } if (_ntlmSupport != NtlmSupport.Never) { // Get the WWW-Authenticate headers (if any). if (_httpAuthenticateOptions == null) { _httpAuthenticateOptions = await WwwAuthenticateHelper.GetHeaderValues(Context, targetUri); } // If the headers contain NTLM as an option, then fall back to NTLM. if (_httpAuthenticateOptions.Any(x => WwwAuthenticateHelper.IsNtlm(x))) { Trace.WriteLine($"'{targetUri}' supports NTLM, sending NTLM credentials instead"); return(NtlmCredentials); } } Credential credentials = null; if (_ntlmSupport != NtlmSupport.Always && _acquireCredentials != null) { Trace.WriteLine($"prompting user for credentials for '{targetUri}'."); credentials = _acquireCredentials(targetUri); if (_acquireResult != null) { AcquireCredentialResult result = (credentials == null) ? AcquireCredentialResult.Failed : AcquireCredentialResult.Suceeded; _acquireResult(targetUri, result); } } // If credentials have been acquired, write them to the secret store. if (credentials != null) { await _credentialStore.WriteCredentials(targetUri, credentials); } return(credentials); }
/// <summary> /// Acquires credentials via the registered callbacks. /// </summary> /// <param name="targetUri"> /// The uniform resource indicator used to uniquely identify the credentials. /// </param> /// <returns> /// If successful a <see cref="Credential"/> object from the authentication object, authority /// or storage; otherwise <see langword="null"/>. /// </returns> public async Task <Credential> AcquireCredentials(TargetUri targetUri) { BaseSecureStore.ValidateTargetUri(targetUri); if (_ntlmSupport != NtlmSupport.Never) { // get the WWW-Authenticate headers (if any) if (_httpAuthenticateOptions == null) { _httpAuthenticateOptions = await WwwAuthenticateHelper.GetHeaderValues(targetUri); } // if the headers contain NTML as an option, then fall back to NTLM if (_httpAuthenticateOptions.Any(x => WwwAuthenticateHelper.IsNtlm(x))) { Git.Trace.WriteLine($"'{targetUri}' supports NTLM, sending NTLM credentials instead"); return(NtlmCredentials); } } Credential credentials = null; if (_ntlmSupport != NtlmSupport.Always && _acquireCredentials != null) { Git.Trace.WriteLine($"prompting user for credentials for '{targetUri}'."); credentials = _acquireCredentials(targetUri); if (_acquireResult != null) { AcquireCredentialResult result = (credentials == null) ? AcquireCredentialResult.Failed : AcquireCredentialResult.Suceeded; _acquireResult(targetUri, result); } } // If credentials have been acquired, write them to the secret store. if (credentials != null) { _credentialStore.WriteCredentials(targetUri, credentials); } return(credentials); }