public IHubProxy CreateHubProxy(Connection connection) { var serverUser = Common.Utilities.OrginalExecutingUser; var principle = serverUser; var identity = principle.Identity as WindowsIdentity; WindowsImpersonationContext context = null; try { if (identity != null && connection.AuthenticationType == AuthenticationType.Windows) { context = identity.Impersonate(); } using (var client = new WebClient()) { if (connection.AuthenticationType == AuthenticationType.Windows) { client.UseDefaultCredentials = true; } else { client.UseDefaultCredentials = false; //// we to default to the hidden public user name of \, silly know but that is how to get around ntlm auth ;) if (connection.AuthenticationType == AuthenticationType.Public) { connection.UserName = GlobalConstants.PublicUsername; connection.Password = string.Empty; } client.Credentials = new NetworkCredential(connection.UserName, connection.Password); } var connectionAddress = connection.FetchTestConnectionAddress(); var hub = new HubConnection(connectionAddress) { Credentials = client.Credentials }; hub.Error += exception => { }; ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true; var proxy = hub.CreateHubProxy("esb"); if (!hub.Start().Wait(GlobalConstants.NetworkTimeOut)) { throw new HttpClientException(new HttpResponseMessage(HttpStatusCode.GatewayTimeout)); } return(proxy); } } finally { if (context != null && connection.AuthenticationType == AuthenticationType.Windows) { context.Undo(); } } }
protected virtual string ConnectToServer(Dev2.Data.ServiceModel.Connection connection) { // we need to grab the principle and impersonate to properly execute in context of the requesting user ;) var principle = System.Threading.Thread.CurrentPrincipal; var identity = principle.Identity as WindowsIdentity; WindowsImpersonationContext context = null; try { if (identity != null && connection.AuthenticationType == AuthenticationType.Windows) { context = identity.Impersonate(); } using (var client = new WebClient()) { if (connection.AuthenticationType == AuthenticationType.Windows) { client.UseDefaultCredentials = true; } else { client.UseDefaultCredentials = false; //// we to default to the hidden public user name of \, silly know but that is how to get around ntlm auth ;) if (connection.AuthenticationType == AuthenticationType.Public) { connection.UserName = GlobalConstants.PublicUsername; connection.Password = string.Empty; } client.Credentials = new NetworkCredential(connection.UserName, connection.Password); } // Need to do hub connect here to get true permissions ;) HubConnection hub = null; try { // Credentials = client.Credentials hub = new HubConnection(connection.FetchTestConnectionAddress()) { Credentials = client.Credentials }; ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate; #pragma warning disable 168 var proxy = hub.CreateHubProxy("esb"); // this is the magic line that causes proper validation #pragma warning restore 168 hub.Start().Wait(); Dev2Logger.Log.Debug("Hub State : " + hub.State); return("Success"); } finally { if (hub != null) { hub.Stop(); hub.Dispose(); } } } } finally { if (context != null && connection.AuthenticationType == AuthenticationType.Windows) { context.Undo(); } } }