From 92d22a843738d7ba4b9c1fa31d629d646e7f4d35 Mon Sep 17 00:00:00 2001 From: dbuechel Date: Thu, 6 Feb 2020 11:10:22 +0100 Subject: [PATCH] SEBWIN-309: Extended detection mechanism for configuration file downloads. --- SafeExamBrowser.Browser/Handlers/DownloadHandler.cs | 11 ++++++++--- SafeExamBrowser.Configuration.Contracts/AppConfig.cs | 5 +++++ .../ConfigurationData/DataValues.cs | 1 + 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/SafeExamBrowser.Browser/Handlers/DownloadHandler.cs b/SafeExamBrowser.Browser/Handlers/DownloadHandler.cs index 6f843ec8..1590741f 100644 --- a/SafeExamBrowser.Browser/Handlers/DownloadHandler.cs +++ b/SafeExamBrowser.Browser/Handlers/DownloadHandler.cs @@ -44,12 +44,17 @@ namespace SafeExamBrowser.Browser.Handlers public void OnBeforeDownload(IWebBrowser webBrowser, IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback) { var uri = new Uri(downloadItem.Url); - var extension = Path.GetExtension(uri.AbsolutePath); - var isConfigFile = String.Equals(extension, appConfig.ConfigurationFileExtension, StringComparison.OrdinalIgnoreCase); + var uriExtension = Path.GetExtension(uri.AbsolutePath); + var fileExtension = Path.GetExtension(downloadItem.SuggestedFileName); + var isConfigurationFile = false; + + isConfigurationFile |= string.Equals(appConfig.ConfigurationFileExtension, fileExtension, StringComparison.OrdinalIgnoreCase); + isConfigurationFile |= string.Equals(appConfig.ConfigurationFileExtension, uriExtension, StringComparison.OrdinalIgnoreCase); + isConfigurationFile |= string.Equals(appConfig.ConfigurationFileMimeType, downloadItem.MimeType, StringComparison.OrdinalIgnoreCase); logger.Debug($"Detected download request for '{uri}'."); - if (isConfigFile) + if (isConfigurationFile) { Task.Run(() => RequestConfigurationFileDownload(downloadItem, callback)); } diff --git a/SafeExamBrowser.Configuration.Contracts/AppConfig.cs b/SafeExamBrowser.Configuration.Contracts/AppConfig.cs index df81f47b..322527f8 100644 --- a/SafeExamBrowser.Configuration.Contracts/AppConfig.cs +++ b/SafeExamBrowser.Configuration.Contracts/AppConfig.cs @@ -91,6 +91,11 @@ namespace SafeExamBrowser.Configuration.Contracts /// public string ConfigurationFileExtension { get; set; } + /// + /// The MIME type of configuration files for the application. + /// + public string ConfigurationFileMimeType { get; set; } + /// /// The build version of the application. /// diff --git a/SafeExamBrowser.Configuration/ConfigurationData/DataValues.cs b/SafeExamBrowser.Configuration/ConfigurationData/DataValues.cs index b1ed4eee..07a3227d 100644 --- a/SafeExamBrowser.Configuration/ConfigurationData/DataValues.cs +++ b/SafeExamBrowser.Configuration/ConfigurationData/DataValues.cs @@ -68,6 +68,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData appConfig.ClientExecutablePath = Path.Combine(Path.GetDirectoryName(executablePath), $"{nameof(SafeExamBrowser)}.Client.exe"); appConfig.ClientLogFilePath = Path.Combine(logFolder, $"{logFilePrefix}_Client.log"); appConfig.ConfigurationFileExtension = ".seb"; + appConfig.ConfigurationFileMimeType = "application/seb"; appConfig.ProgramBuildVersion = programBuild; appConfig.ProgramCopyright = programCopyright; appConfig.ProgramDataFilePath = Path.Combine(programDataFolder, DEFAULT_CONFIGURATION_NAME);