public void ConfigureRequest(RavenConnectionStringOptions options, WebRequest request) { if (RequestTimeoutInMs.HasValue) request.Timeout = RequestTimeoutInMs.Value; if (options.ApiKey == null) { request.Credentials = options.Credentials ?? CredentialCache.DefaultNetworkCredentials; return; } var webRequestEventArgs = new WebRequestEventArgs { Request = request }; AbstractAuthenticator existingAuthenticator; if (authenticators.TryGetValue(GetCacheKey(options), out existingAuthenticator)) { existingAuthenticator.ConfigureRequest(this, webRequestEventArgs); } else { var basicAuthenticator = new BasicAuthenticator(options.ApiKey, enableBasicAuthenticationOverUnsecuredHttp: false); var securedAuthenticator = new SecuredAuthenticator(options.ApiKey); basicAuthenticator.ConfigureRequest(this, webRequestEventArgs); securedAuthenticator.ConfigureRequest(this, webRequestEventArgs); } }
public void ConfigureRequest(RavenConnectionStringOptions options, HttpWebRequest request) { if (RequestTimeoutInMs.HasValue) request.Timeout = RequestTimeoutInMs.Value; if (AllowWriteStreamBuffering.HasValue) { request.AllowWriteStreamBuffering = AllowWriteStreamBuffering.Value; if(AllowWriteStreamBuffering.Value == false) request.SendChunked = true; } if (options.ApiKey == null) { request.Credentials = options.Credentials ?? CredentialCache.DefaultNetworkCredentials; return; } var webRequestEventArgs = new WebRequestEventArgs { Request = request, Credentials = new OperationCredentials(options.ApiKey, options.Credentials)}; AbstractAuthenticator existingAuthenticator; if (authenticators.TryGetValue(GetCacheKey(options), out existingAuthenticator)) { existingAuthenticator.ConfigureRequest(this, webRequestEventArgs); } else { var basicAuthenticator = new BasicAuthenticator(enableBasicAuthenticationOverUnsecuredHttp: false); var securedAuthenticator = new SecuredAuthenticator(); basicAuthenticator.ConfigureRequest(this, webRequestEventArgs); securedAuthenticator.ConfigureRequest(this, webRequestEventArgs); } }
internal static void InitializeSecurity(Convention conventions, HttpJsonRequestFactory requestFactory, string serverUrl) { if (conventions.HandleUnauthorizedResponseAsync != null) return; // already setup by the user var basicAuthenticator = new BasicAuthenticator(requestFactory.EnableBasicAuthenticationOverUnsecuredHttpEvenThoughPasswordsWouldBeSentOverTheWireInClearTextToBeStolenByHackers); var securedAuthenticator = new SecuredAuthenticator(autoRefreshToken: true); requestFactory.OnDispose += (sender, args) => securedAuthenticator.Dispose(); requestFactory.ConfigureRequest += basicAuthenticator.ConfigureRequest; requestFactory.ConfigureRequest += securedAuthenticator.ConfigureRequest; conventions.HandleForbiddenResponseAsync = (forbiddenResponse, credentials) => { if (credentials.ApiKey == null) { AssertForbiddenCredentialSupportWindowsAuth(forbiddenResponse, credentials.Credentials); return null; } return null; }; conventions.HandleUnauthorizedResponseAsync = (unauthorizedResponse, credentials) => { var oauthSource = unauthorizedResponse.Headers.GetFirstValue("OAuth-Source"); #if DEBUG && FIDDLER // Make sure to avoid a cross DNS security issue, when running with Fiddler if (string.IsNullOrEmpty(oauthSource) == false) oauthSource = oauthSource.Replace("localhost:", "localhost.fiddler:"); #endif // Legacy support if (string.IsNullOrEmpty(oauthSource) == false && oauthSource.EndsWith("/OAuth/API-Key", StringComparison.CurrentCultureIgnoreCase) == false) { return basicAuthenticator.HandleOAuthResponseAsync(oauthSource, credentials.ApiKey); } if (credentials.ApiKey == null) { AssertUnauthorizedCredentialSupportWindowsAuth(unauthorizedResponse, credentials.Credentials); return null; } if (string.IsNullOrEmpty(oauthSource)) oauthSource = serverUrl + "/OAuth/API-Key"; return securedAuthenticator.DoOAuthRequestAsync(serverUrl, oauthSource, credentials.ApiKey); }; }
public void ConfigureRequest(RavenConnectionStringOptions options, HttpWebRequest request) { if (RequestTimeoutInMs.HasValue) request.Timeout = RequestTimeoutInMs.Value; if (options.ApiKey == null) { ICredentials credentialsToUse = CredentialCache.DefaultNetworkCredentials; if (options.Credentials != null) { var networkCredentials = options.Credentials as NetworkCredential; if (networkCredentials != null && options.AuthenticationScheme != null) { var credentialCache = new CredentialCache(); var uri = new Uri(options.Url); credentialCache.Add(new Uri(string.Format("{0}://{1}:{2}/", uri.Scheme, uri.Host, uri.Port)), options.AuthenticationScheme, networkCredentials); credentialsToUse = credentialCache; } else { credentialsToUse = options.Credentials; } } request.Credentials = credentialsToUse; return; } var webRequestEventArgs = new WebRequestEventArgs { Request = request, Credentials = new OperationCredentials(options.ApiKey, options.Credentials)}; AbstractAuthenticator existingAuthenticator; if (authenticators.TryGetValue(GetCacheKey(options), out existingAuthenticator)) { existingAuthenticator.ConfigureRequest(this, webRequestEventArgs); } else { var basicAuthenticator = new BasicAuthenticator(enableBasicAuthenticationOverUnsecuredHttp: false); var securedAuthenticator = new SecuredAuthenticator(); basicAuthenticator.ConfigureRequest(this, webRequestEventArgs); securedAuthenticator.ConfigureRequest(this, webRequestEventArgs); } }