public void Initialize(
            ConfiguredEndpointCollection endpoints,
            LocalDiscoveryServerMethods lds,
            GlobalDiscoveryServerMethods gds,
            QueryServersFilter filters)
        {
            m_lds     = lds;
            m_gds     = gds;
            m_filters = filters;

            DiscoveryTreeView.Nodes.Clear();

            TreeNode node = new TreeNode("Local Machine");

            node.SelectedImageIndex = node.ImageIndex = ImageIndex.Computer;
            node.Tag = RootFolders.LocalMachine;
            node.Nodes.Add(new TreeNode());
            DiscoveryTreeView.Nodes.Add(node);

            node = new TreeNode("Local Network");
            node.SelectedImageIndex = node.ImageIndex = ImageIndex.LocalNetwork;
            node.Tag = RootFolders.LocalNetwork;
            node.Nodes.Add(new TreeNode());
            DiscoveryTreeView.Nodes.Add(node);

            node = new TreeNode("Global Discovery");
            node.SelectedImageIndex = node.ImageIndex = ImageIndex.GlobalNetwork;
            node.Tag = RootFolders.GlobalDiscovery;
            node.Nodes.Add(new TreeNode());
            DiscoveryTreeView.Nodes.Add(node);

            if (endpoints != null)
            {
                m_endpoints = endpoints;

                node = new TreeNode("Custom Discovery");
                node.SelectedImageIndex = node.ImageIndex = ImageIndex.ClosedFolder;
                node.Tag = RootFolders.CustomDiscovery;

                TreeNode child = new TreeNode("<double click to add server>");
                child.SelectedImageIndex = child.ImageIndex = ImageIndex.Add;
                child.Tag = RootFolders.Add;
                node.Nodes.Add(child);

                DiscoveryTreeView.Nodes.Add(node);

                foreach (ConfiguredEndpoint ce in m_endpoints.Endpoints)
                {
                    child = new TreeNode(Utils.Format("{0}", ce.ToString()));
                    child.SelectedImageIndex = child.ImageIndex = (ce.Description.SecurityMode == MessageSecurityMode.None && ce.EndpointUrl.Scheme != Utils.UriSchemeHttps) ? ImageIndex.InSecure : ImageIndex.Secure;
                    child.Tag = ce;
                    node.Nodes.Add(child);
                }
            }
        }
Пример #2
0
        public EndpointDescription ShowDialog(
            IWin32Window owner,
            ConfiguredEndpointCollection endpoints,
            LocalDiscoveryServerMethods lds,
            GlobalDiscoveryServerMethods gds,
            QueryServersFilter filters)
        {
            this.DiscoveryControl.Initialize(endpoints, lds, gds, filters);

            if (base.ShowDialog(owner) != System.Windows.Forms.DialogResult.OK)
            {
                return(null);
            }

            return(DiscoveryControl.SelectedEndpoint);
        }
Пример #3
0
        public MainForm(ApplicationInstance application)
        {
            InitializeComponent();
            Icon = ClientUtils.GetAppIcon();

            m_application = application;

            // get the configuration.
            m_configuration = m_application.ApplicationConfiguration.ParseExtension <GlobalDiscoveryClientConfiguration>();

            // use suitable defaults if no configuration exists.
            if (m_configuration == null)
            {
                m_configuration = new GlobalDiscoveryClientConfiguration()
                {
                    GlobalDiscoveryServerUrl = "opc.tcp://localhost:58810/GlobalDiscoveryServer",
                    ExternalEditor           = "notepad.exe"
                };
            }

            m_filters                         = new QueryServersFilter();
            m_identity                        = new UserIdentity();
            m_gds                             = new GlobalDiscoveryServerMethods(m_application, m_configuration);
            m_gds.KeepAlive                  += GdsServer_KeepAlive;
            m_gds.ServerStatusChanged        += GdsServer_StatusNotification;
            m_lds                             = new LocalDiscoveryServerMethods(m_application.ApplicationConfiguration);
            m_server                          = new ServerPushConfigurationMethods(m_application);
            m_server.KeepAlive               += Server_KeepAlive;
            m_server.ServerStatusChanged     += Server_StatusNotification;
            m_server.ConnectionStatusChanged += Server_ConnectionStatusChanged;

            RegistrationPanel.Initialize(m_gds, null, m_configuration);

            m_application.ApplicationConfiguration.CertificateValidator.CertificateValidation += CertificateValidator_CertificateValidation;
            UpdateStatus(true, DateTime.MinValue, "---");
            UpdateGdsStatus(true, DateTime.MinValue, "---");

            ShowPanel(Panel.None);

            SelectServerButton.Enabled     = false;
            ServerStatusButton.Enabled     = false;
            CertificateButton.Enabled      = false;
            HttpsCertificateButton.Visible = false;
            TrustListButton.Enabled        = false;
            HttpsTrustListButton.Visible   = false;
        }
Пример #4
0
        public void Initialize(GlobalDiscoveryServerMethods gds, ServerPushConfigurationMethods server, RegisteredApplication application, bool isHttps)
        {
            m_gds         = gds;
            m_server      = server;
            m_application = application;

            // display local trust list.
            if (application != null)
            {
                m_trustListStorePath  = (isHttps) ? m_application.HttpsTrustListStorePath : m_application.TrustListStorePath;
                m_issuerListStorePath = (isHttps) ? m_application.HttpsIssuerListStorePath : m_application.IssuerListStorePath;
                CertificateStoreControl.Initialize(m_trustListStorePath, m_issuerListStorePath, null);
                MergeWithGdsButton.Enabled = !String.IsNullOrEmpty(m_trustListStorePath);
            }

            ApplyChangesButton.Enabled = false;
        }
Пример #5
0
        public ViewServersOnNetworkDialog(GlobalDiscoveryServerMethods gds)
        {
            InitializeComponent();
            Icon = ClientUtils.GetAppIcon();
            ServersDataGridView.AutoGenerateColumns = false;

            m_gds = gds;

            m_dataset = new DataSet();
            m_dataset.Tables.Add("Servers");

            m_dataset.Tables[0].Columns.Add("RecordId", typeof(uint));
            m_dataset.Tables[0].Columns.Add("ServerName", typeof(string));
            m_dataset.Tables[0].Columns.Add("DiscoveryUrl", typeof(string));
            m_dataset.Tables[0].Columns.Add("ServerCapabilities", typeof(string));
            m_dataset.Tables[0].Columns.Add("ServerOnNetwork", typeof(ServerOnNetwork));

            ServersDataGridView.DataSource = m_dataset.Tables[0];
        }
Пример #6
0
        public ViewApplicationRecordsDialog(GlobalDiscoveryServerMethods gds)
        {
            InitializeComponent();
            Icon = ClientUtils.GetAppIcon();
            ApplicationRecordDataGridView.AutoGenerateColumns = false;

            m_gds = gds;

            m_dataset = new DataSet();
            m_dataset.Tables.Add("ApplicationRecords");

            m_dataset.Tables[0].Columns.Add("ApplicationId", typeof(NodeId));
            m_dataset.Tables[0].Columns.Add("ApplicationName", typeof(string));
            m_dataset.Tables[0].Columns.Add("ApplicationType", typeof(ApplicationType));
            m_dataset.Tables[0].Columns.Add("ProductUri", typeof(string));
            m_dataset.Tables[0].Columns.Add("DiscoveryUrls", typeof(string));
            m_dataset.Tables[0].Columns.Add("ServerCapabilities", typeof(string));
            m_dataset.Tables[0].Columns.Add("ApplicationRecord", typeof(ApplicationRecordDataType));

            ApplicationRecordDataGridView.DataSource = m_dataset.Tables[0];
        }
Пример #7
0
        public string ShowDialog(IWin32Window owner, GlobalDiscoveryServerMethods gds, IList <string> serverUrls)
        {
            m_gds = gds;

            ServersListBox.Items.Clear();

            foreach (var serverUrl in serverUrls)
            {
                ServersListBox.Items.Add(serverUrl);
            }

            ServerUrlTextBox.Text         = gds.EndpointUrl;
            UserNameCredentialsRB.Checked = true;
            OkButton.Enabled = Uri.IsWellFormedUriString(ServerUrlTextBox.Text.Trim(), UriKind.Absolute);

            if (base.ShowDialog(owner) != DialogResult.OK)
            {
                return(null);
            }

            return(ServerUrlTextBox.Text.Trim());
        }
Пример #8
0
        public async Task Initialize(
            GlobalDiscoveryClientConfiguration configuration,
            GlobalDiscoveryServerMethods gds,
            ServerPushConfigurationMethods server,
            RegisteredApplication application,
            bool isHttps)
        {
            m_configuration       = configuration;
            m_gds                 = gds;
            m_server              = server;
            m_application         = application;
            m_certificate         = null;
            m_certificatePassword = null;

            CertificateRequestTimer.Enabled = false;
            RequestProgressLabel.Visible    = false;
            ApplyChangesButton.Enabled      = false;

            CertificateControl.ShowNothing();

            X509Certificate2 certificate = null;

            if (!isHttps)
            {
                if (server.Endpoint != null && server.Endpoint.Description.ServerCertificate != null)
                {
                    certificate = new X509Certificate2(server.Endpoint.Description.ServerCertificate);
                }
                else if (application != null)
                {
                    if (!String.IsNullOrEmpty(application.CertificatePublicKeyPath))
                    {
                        string file = Utils.GetAbsoluteFilePath(application.CertificatePublicKeyPath, true, false, false);

                        if (file != null)
                        {
                            certificate = new X509Certificate2(file);
                        }
                    }
                    else if (!String.IsNullOrEmpty(application.CertificateStorePath))
                    {
                        CertificateIdentifier id = new CertificateIdentifier
                        {
                            StorePath = application.CertificateStorePath
                        };
                        id.StoreType   = CertificateStoreIdentifier.DetermineStoreType(id.StorePath);
                        id.SubjectName = application.CertificateSubjectName.Replace("localhost", Utils.GetHostName());

                        certificate = await id.Find(true);
                    }
                }
            }
            else
            {
                if (application != null)
                {
                    if (!String.IsNullOrEmpty(application.HttpsCertificatePublicKeyPath))
                    {
                        string file = Utils.GetAbsoluteFilePath(application.HttpsCertificatePublicKeyPath, true, false, false);

                        if (file != null)
                        {
                            certificate = new X509Certificate2(file);
                        }
                    }
                    else
                    {
                        foreach (string disoveryUrl in application.DiscoveryUrl)
                        {
                            if (Uri.IsWellFormedUriString(disoveryUrl, UriKind.Absolute))
                            {
                                Uri url = new Uri(disoveryUrl);

                                CertificateIdentifier id = new CertificateIdentifier()
                                {
                                    StoreType   = CertificateStoreType.X509Store,
                                    StorePath   = "CurrentUser\\UA_MachineDefault",
                                    SubjectName = "CN=" + url.DnsSafeHost
                                };

                                certificate = await id.Find();
                            }
                        }
                    }
                }
            }

            if (certificate != null)
            {
                try
                {
                    CertificateControl.Tag = certificate.Thumbprint;
                }
                catch (Exception)
                {
                    MessageBox.Show(
                        Parent,
                        "The certificate does not appear to be valid. Please check configuration settings.",
                        Parent.Text,
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Error);

                    certificate = null;
                }
            }

            WarningLabel.Visible = certificate == null;

            if (certificate != null)
            {
                m_certificate = certificate;
                CertificateControl.ShowValue(null, "Application Certificate", new CertificateWrapper()
                {
                    Certificate = certificate
                }, true);
            }
        }