|
@@ -171,12 +171,49 @@ namespace MediaBrowser.Server.Implementations.Configuration
|
|
|
ValidateItemByNamePath(newConfig);
|
|
|
ValidatePathSubstitutions(newConfig);
|
|
|
ValidateMetadataPath(newConfig);
|
|
|
+ ValidateSslCertificate(newConfig);
|
|
|
|
|
|
EventHelper.FireEventIfNotNull(ConfigurationUpdating, this, new GenericEventArgs<ServerConfiguration> { Argument = newConfig }, Logger);
|
|
|
|
|
|
base.ReplaceConfiguration(newConfiguration);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Validates the SSL certificate.
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="newConfig">The new configuration.</param>
|
|
|
+ /// <exception cref="System.IO.DirectoryNotFoundException"></exception>
|
|
|
+ private void ValidateSslCertificate(BaseApplicationConfiguration newConfig)
|
|
|
+ {
|
|
|
+ var serverConfig = (ServerConfiguration)newConfig;
|
|
|
+
|
|
|
+ var certPath = serverConfig.CertificatePath;
|
|
|
+
|
|
|
+ if (!string.IsNullOrWhiteSpace(certPath))
|
|
|
+ {
|
|
|
+ // Validate
|
|
|
+ if (!File.Exists(certPath))
|
|
|
+ {
|
|
|
+ throw new FileNotFoundException(string.Format("Certificate file '{0}' does not exist.", certPath));
|
|
|
+ }
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var cert = new System.Security.Cryptography.X509Certificates.X509Certificate2(certPath);
|
|
|
+
|
|
|
+ if (cert.PrivateKey == null)
|
|
|
+ {
|
|
|
+ throw new ArgumentException("Certificate does not contain a private key!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ throw new ArgumentException(string.Format("Exception loading certificate: '{0}' - {1}", certPath, ex.Message));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void ValidatePathSubstitutions(ServerConfiguration newConfig)
|
|
|
{
|
|
|
foreach (var map in newConfig.PathSubstitutions)
|