public static NetworkName TryParse(string name) { return(name.IsNullOrWhiteSpace() ? null : (NetworkName)DnsName.TryParse(name) ?? NetbiosName.TryParse(name)); }
public static RegisterGatewayResult RegisterGateway( string managementServerUrl, string managementCertificateThumbprint, string managementAccountName, string managementAccountPassword, NetbiosName gatewayNetbiosName, X509Certificate2 gatewayCertificate) { Contract.Requires(!managementServerUrl.IsNullOrWhiteSpace()); Contract.Requires(!managementCertificateThumbprint.IsNullOrWhiteSpace()); Contract.Requires(!managementAccountName.IsNullOrWhiteSpace()); Contract.Requires(!managementAccountPassword.IsNullOrWhiteSpace()); Contract.Requires(gatewayNetbiosName != null); Contract.Requires(gatewayCertificate != null); using (var webRequestHandler = new WebRequestHandler()) { webRequestHandler.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => { var customCertificateValidator = new CustomCertificateValidator(managementCertificateThumbprint); customCertificateValidator.Validate(new X509Certificate2(certificate)); return(true); }; using (var httpClient = new HttpClient(webRequestHandler)) { var managementUrl = $"{managementServerUrl}/Api"; try { var loginResponse = PostAsync <ManagementLoginResponse>( httpClient, $"{managementUrl}/Authentication/Login", new ManagementLoginRequest { AccountName = managementAccountName, Password = managementAccountPassword, }).Result; if (loginResponse.Status != ManagementLoginResponseStatus.Success) { return(new RegisterGatewayResult(RegisterGatewayResultStatus.FailedAuthentication)); } var gatewayConfiguration = PostAsync <GatewayConfiguration>( httpClient, $"{managementUrl}/SystemProfiles/Gateways/{gatewayNetbiosName}", new RegisterGatewayRequest { Certificate = gatewayCertificate, Version = GeneralInformation.FileVersion }).Result; return(new RegisterGatewayResult(gatewayConfiguration)); } catch (Exception exception) { if (exception.InnerException is HttpRequestException) { if (exception.InnerException.InnerException is WebException) { return(new RegisterGatewayResult( RegisterGatewayResultStatus.FailedConnectivity, exception.ToString())); } return(new RegisterGatewayResult( RegisterGatewayResultStatus.FailedInternal, exception.ToString())); } return(new RegisterGatewayResult( RegisterGatewayResultStatus.Failed, exception.ToString())); } } } }