/// <inheritdoc/> public async Task <Credential> ValidateCredentials(TargetUri targetUri, string username, Credential credentials) { BaseSecureStore.ValidateTargetUri(targetUri); BaseSecureStore.ValidateCredential(credentials); TargetUri userSpecificTargetUri; if (targetUri.TargetUriContainsUsername) { userSpecificTargetUri = targetUri; } else { userSpecificTargetUri = targetUri.GetPerUserTargetUri(username); } if (await BitbucketAuthority.ValidateCredentials(userSpecificTargetUri, username, credentials)) { return(credentials); } var userSpecificRefreshCredentials = GetCredentials(GetRefreshTokenTargetUri(userSpecificTargetUri), username); // if there are refresh credentials it suggests it might be OAuth so we can try and // refresh the access_token and try again. if (userSpecificRefreshCredentials == null) { return(null); } Credential refreshedCredentials; if ((refreshedCredentials = await RefreshCredentials(userSpecificTargetUri, userSpecificRefreshCredentials.Password, username ?? credentials.Username)) != null) { return(refreshedCredentials); } return(null); }
public async Task <bool> ValidateCredentials(TargetUri targetUri, Credential credentials) { const string ValidationUrl = "https://api.github.com/user/subscriptions"; BaseSecureStore.ValidateTargetUri(targetUri); BaseSecureStore.ValidateCredential(credentials); string authString = String.Format("{0}:{1}", credentials.Username, credentials.Password); byte[] authBytes = Encoding.UTF8.GetBytes(authString); string authEncode = Convert.ToBase64String(authBytes); // craft the request header for the GitHub v3 API w/ credentials using (HttpClientHandler handler = targetUri.HttpClientHandler) using (HttpClient httpClient = new HttpClient(handler) { Timeout = TimeSpan.FromMilliseconds(RequestTimeout) }) { httpClient.DefaultRequestHeaders.Add("User-Agent", Global.UserAgent); httpClient.DefaultRequestHeaders.Add("Accept", GitHubApiAcceptsHeaderValue); httpClient.DefaultRequestHeaders.Add("Authorization", "Basic " + authEncode); using (HttpResponseMessage response = await httpClient.GetAsync(ValidationUrl)) { if (response.IsSuccessStatusCode) { Git.Trace.WriteLine($"credential validation for '{targetUri}' succeeded."); return(true); } else { Git.Trace.WriteLine($"credential validation for '{targetUri}' failed."); return(false); } } } }
/// <inheritdoc/> public async Task <bool> ValidateCredentials(TargetUri targetUri, string username, Credential credentials) { BaseSecureStore.ValidateTargetUri(targetUri); BaseSecureStore.ValidateCredential(credentials); // We don't know when the credentials arrive here if they are using OAuth or Basic Auth, // so we try both. // Try the simplest Basic Auth first var authEncode = GetEncodedCredentials(username, credentials); if (await ValidateCredentials(targetUri, GetBasicAuthHeader(authEncode))) { return(true); } // if the Basic Auth test failed then try again as OAuth if (await ValidateCredentials(targetUri, GetBearerHeaderAuthHeader(credentials.Password))) { return(true); } return(false); }
/// <inheritdoc/> public async Task <bool> ValidateCredentials(TargetUri targetUri, string username, Credential credentials) { BaseSecureStore.ValidateTargetUri(targetUri); BaseSecureStore.ValidateCredential(credentials); // We don't know when the credentials arrive here if they are using OAuth or Basic Auth, // so we try both. // Try the simplest basic authentication first var authEncode = GetEncodedCredentials(username, credentials); if (await ValidateCredentials(targetUri, credentials)) { return(true); } // If the basic authentication test failed then try again as OAuth if (await ValidateCredentials(targetUri, new Token(credentials.Password, TokenType.BitbucketPassword))) { return(true); } return(false); }