Ejemplo n.º 1
0
 public static NetworkName TryParse(string name)
 {
     return(name.IsNullOrWhiteSpace()
         ? null
         : (NetworkName)DnsName.TryParse(name) ?? NetbiosName.TryParse(name));
 }
Ejemplo n.º 2
0
        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()));
                    }
                }
            }
        }