protected virtual void UpdateAppConfigWithInstallConfig(ApplicationConfiguration configuration)
{
// override the application name.
if (InstallConfig.ApplicationName != null)
{
if (configuration.SecurityConfiguration != null && configuration.SecurityConfiguration.ApplicationCertificate != null)
{
if (configuration.SecurityConfiguration.ApplicationCertificate.SubjectName == configuration.ApplicationName)
{
configuration.SecurityConfiguration.ApplicationCertificate.SubjectName = InstallConfig.ApplicationName;
}
}
configuration.ApplicationName = InstallConfig.ApplicationName;
}
if (InstallConfig.ApplicationUri != null)
{
configuration.ApplicationUri = InstallConfig.ApplicationUri;
}
// replace localhost with the current machine name.
if (configuration.ApplicationUri != null)
{
int index = configuration.ApplicationUri.IndexOf("localhost", StringComparison.OrdinalIgnoreCase);
if (index != -1)
{
StringBuilder buffer = new StringBuilder();
buffer.Append(configuration.ApplicationUri.Substring(0, index));
buffer.Append(System.Net.Dns.GetHostName());
buffer.Append(configuration.ApplicationUri.Substring(index+"localhost".Length));
configuration.ApplicationUri = buffer.ToString();
}
}
ServerBaseConfiguration serverConfiguration = null;
if (configuration.ServerConfiguration != null)
{
serverConfiguration = configuration.ServerConfiguration;
}
else if (configuration.DiscoveryServerConfiguration != null)
{
serverConfiguration = configuration.DiscoveryServerConfiguration;
}
if (serverConfiguration != null)
{
if (InstallConfig.BaseAddresses != null && InstallConfig.BaseAddresses.Count > 0)
{
Dictionary<string, string> addresses = new Dictionary<string, string>();
serverConfiguration.BaseAddresses.Clear();
for (int ii = 0; ii < InstallConfig.BaseAddresses.Count; ii++)
{
Uri url = Utils.ParseUri(InstallConfig.BaseAddresses[ii]);
if (url != null)
{
if (!addresses.ContainsKey(url.Scheme))
{
serverConfiguration.BaseAddresses.Add(url.ToString());
addresses.Add(url.Scheme, String.Empty);
}
else
{
serverConfiguration.AlternateBaseAddresses.Add(url.ToString());
}
}
}
}
if (InstallConfig.SecurityProfiles != null && InstallConfig.SecurityProfiles.Count > 0)
{
ServerSecurityPolicyCollection securityPolicies = new ServerSecurityPolicyCollection();
for (int ii = 0; ii < InstallConfig.SecurityProfiles.Count; ii++)
{
for (int jj = 0; jj < serverConfiguration.SecurityPolicies.Count; jj++)
{
if (serverConfiguration.SecurityPolicies[jj].SecurityPolicyUri == InstallConfig.SecurityProfiles[ii].ProfileUri)
{
securityPolicies.Add(serverConfiguration.SecurityPolicies[jj]);
}
}
}
serverConfiguration.SecurityPolicies = securityPolicies;
}
}
if (InstallConfig.ApplicationCertificate != null)
{
configuration.SecurityConfiguration.ApplicationCertificate.StoreType = InstallConfig.ApplicationCertificate.StoreType;
configuration.SecurityConfiguration.ApplicationCertificate.StorePath = InstallConfig.ApplicationCertificate.StorePath;
if (String.IsNullOrEmpty(InstallConfig.ApplicationCertificate.SubjectName))
{
configuration.SecurityConfiguration.ApplicationCertificate.SubjectName = InstallConfig.ApplicationCertificate.SubjectName;
}
}
if (InstallConfig.RejectedCertificatesStore != null)
{
configuration.SecurityConfiguration.RejectedCertificateStore = Opc.Ua.Security.SecuredApplication.FromCertificateStoreIdentifier(InstallConfig.RejectedCertificatesStore);
}
if (InstallConfig.IssuerCertificateStore != null)
{
configuration.SecurityConfiguration.TrustedIssuerCertificates.StoreType = InstallConfig.IssuerCertificateStore.StoreType;
configuration.SecurityConfiguration.TrustedIssuerCertificates.StorePath = InstallConfig.IssuerCertificateStore.StorePath;
configuration.SecurityConfiguration.TrustedIssuerCertificates.ValidationOptions = (CertificateValidationOptions)(int)InstallConfig.IssuerCertificateStore.ValidationOptions;
}
if (InstallConfig.TrustedCertificateStore != null)
{
configuration.SecurityConfiguration.TrustedPeerCertificates.StoreType = InstallConfig.TrustedCertificateStore.StoreType;
configuration.SecurityConfiguration.TrustedPeerCertificates.StorePath = InstallConfig.TrustedCertificateStore.StorePath;
configuration.SecurityConfiguration.TrustedPeerCertificates.ValidationOptions = (CertificateValidationOptions)(int)InstallConfig.TrustedCertificateStore.ValidationOptions;
}
configuration.CertificateValidator.Update(configuration);
}