SEBWIN-312: Implemented mapping for configuration values of whitelisted applications.
This commit is contained in:
parent
cf28a7f172
commit
f778d5b848
5 changed files with 161 additions and 16 deletions
|
@ -22,26 +22,26 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
|
||||||
{
|
{
|
||||||
if (item is IDictionary<string, object> applicationData)
|
if (item is IDictionary<string, object> applicationData)
|
||||||
{
|
{
|
||||||
var isActive = applicationData.TryGetValue(Keys.Applications.ApplicationActive, out var v) && v is bool active && active;
|
var isActive = applicationData.TryGetValue(Keys.Applications.Active, out var v) && v is bool active && active;
|
||||||
var isWindowsProcess = applicationData.TryGetValue(Keys.Applications.ApplicationOs, out v) && v is int os && os == Keys.WINDOWS;
|
var isWindowsProcess = applicationData.TryGetValue(Keys.Applications.OperatingSystem, out v) && v is int os && os == Keys.WINDOWS;
|
||||||
|
|
||||||
if (isActive && isWindowsProcess)
|
if (isActive && isWindowsProcess)
|
||||||
{
|
{
|
||||||
var application = new BlacklistApplication();
|
var application = new BlacklistApplication();
|
||||||
|
|
||||||
if (applicationData.TryGetValue(Keys.Applications.ApplicationAutoTerminate, out v) && v is bool autoTerminate)
|
if (applicationData.TryGetValue(Keys.Applications.AutoTerminate, out v) && v is bool autoTerminate)
|
||||||
{
|
{
|
||||||
application.AutoTerminate = autoTerminate;
|
application.AutoTerminate = autoTerminate;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (applicationData.TryGetValue(Keys.Applications.ApplicationExecutable, out v) && v is string executableName)
|
if (applicationData.TryGetValue(Keys.Applications.ExecutableName, out v) && v is string executableName)
|
||||||
{
|
{
|
||||||
application.ExecutableName = executableName;
|
application.ExecutableName = executableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (applicationData.TryGetValue(Keys.Applications.ApplicationOriginalName, out v) && v is string originalName)
|
if (applicationData.TryGetValue(Keys.Applications.OriginalName, out v) && v is string originalName)
|
||||||
{
|
{
|
||||||
application.ExecutableOriginalName = originalName;
|
application.OriginalName = originalName;
|
||||||
}
|
}
|
||||||
|
|
||||||
settings.Applications.Blacklist.Add(application);
|
settings.Applications.Blacklist.Add(application);
|
||||||
|
@ -57,14 +57,87 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
|
||||||
{
|
{
|
||||||
foreach (var item in applications)
|
foreach (var item in applications)
|
||||||
{
|
{
|
||||||
if (item is IDictionary<string, object> application)
|
if (item is IDictionary<string, object> applicationData)
|
||||||
{
|
{
|
||||||
var isActive = application.TryGetValue(Keys.Applications.ApplicationActive, out var v) && v is bool active && active;
|
var isActive = applicationData.TryGetValue(Keys.Applications.Active, out var v) && v is bool active && active;
|
||||||
var isWindowsProcess = application.TryGetValue(Keys.Applications.ApplicationOs, out v) && v is int os && os == Keys.WINDOWS;
|
var isWindowsProcess = applicationData.TryGetValue(Keys.Applications.OperatingSystem, out v) && v is int os && os == Keys.WINDOWS;
|
||||||
|
|
||||||
if (isActive && isWindowsProcess)
|
if (isActive && isWindowsProcess)
|
||||||
{
|
{
|
||||||
|
var application = new WhitelistApplication();
|
||||||
|
|
||||||
|
if (applicationData.TryGetValue(Keys.Applications.AllowCustomPath, out v) && v is bool allowCustomPath)
|
||||||
|
{
|
||||||
|
application.AllowCustomPath = allowCustomPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (applicationData.TryGetValue(Keys.Applications.AllowRunning, out v) && v is bool allowRunning)
|
||||||
|
{
|
||||||
|
application.AllowRunning = allowRunning;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (applicationData.TryGetValue(Keys.Applications.Arguments, out v) && v is IList<object> arguments)
|
||||||
|
{
|
||||||
|
foreach (var argumentItem in arguments)
|
||||||
|
{
|
||||||
|
if (argumentItem is IDictionary<string, object> argumentData)
|
||||||
|
{
|
||||||
|
var argActive = argumentData.TryGetValue(Keys.Applications.Active, out v) && v is bool a && a;
|
||||||
|
|
||||||
|
if (argActive && argumentData.TryGetValue(Keys.Applications.Argument, out v) && v is string argument)
|
||||||
|
{
|
||||||
|
application.Arguments.Add(argument);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (applicationData.TryGetValue(Keys.Applications.AutoStart, out v) && v is bool autoStart)
|
||||||
|
{
|
||||||
|
application.AutoStart = autoStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (applicationData.TryGetValue(Keys.Applications.AutoTerminate, out v) && v is bool autoTerminate)
|
||||||
|
{
|
||||||
|
application.AutoTerminate = autoTerminate;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (applicationData.TryGetValue(Keys.Applications.DisplayName, out v) && v is string displayName)
|
||||||
|
{
|
||||||
|
application.DisplayName = displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (applicationData.TryGetValue(Keys.Applications.ExecutableName, out v) && v is string executableName)
|
||||||
|
{
|
||||||
|
application.ExecutableName = executableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (applicationData.TryGetValue(Keys.Applications.ExecutablePath, out v) && v is string executablePath)
|
||||||
|
{
|
||||||
|
application.ExecutablePath = executablePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (applicationData.TryGetValue(Keys.Applications.Identifier, out v) && v is string identifier)
|
||||||
|
{
|
||||||
|
application.Identifier = identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (applicationData.TryGetValue(Keys.Applications.OriginalName, out v) && v is string originalName)
|
||||||
|
{
|
||||||
|
application.OriginalName = originalName;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (applicationData.TryGetValue(Keys.Applications.RendererName, out v) && v is string rendererName)
|
||||||
|
{
|
||||||
|
application.RendererName = rendererName;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (applicationData.TryGetValue(Keys.Applications.ShowInShell, out v) && v is bool showInShell)
|
||||||
|
{
|
||||||
|
application.ShowInShell = showInShell;
|
||||||
|
}
|
||||||
|
|
||||||
|
settings.Applications.Whitelist.Add(application);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,12 +18,22 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
|
||||||
|
|
||||||
internal static class Applications
|
internal static class Applications
|
||||||
{
|
{
|
||||||
internal const string ApplicationActive = "active";
|
internal const string Active = "active";
|
||||||
internal const string ApplicationAutoTerminate = "strongKill";
|
internal const string AllowCustomPath = "allowUserToChooseApp";
|
||||||
internal const string ApplicationExecutable = "executable";
|
internal const string AllowRunning = "runInBackground";
|
||||||
internal const string ApplicationOriginalName = "originalName";
|
internal const string Argument = "argument";
|
||||||
internal const string ApplicationOs = "os";
|
internal const string Arguments = "arguments";
|
||||||
|
internal const string AutoStart = "autostart";
|
||||||
|
internal const string AutoTerminate = "strongKill";
|
||||||
internal const string Blacklist = "prohibitedProcesses";
|
internal const string Blacklist = "prohibitedProcesses";
|
||||||
|
internal const string DisplayName = "title";
|
||||||
|
internal const string ExecutableName = "executable";
|
||||||
|
internal const string ExecutablePath = "path";
|
||||||
|
internal const string Identifier = "identifier";
|
||||||
|
internal const string OperatingSystem = "os";
|
||||||
|
internal const string OriginalName = "originalName";
|
||||||
|
internal const string RendererName = "windowHandlingProcess";
|
||||||
|
internal const string ShowInShell = "iconInTaskbar";
|
||||||
internal const string Whitelist = "permittedProcesses";
|
internal const string Whitelist = "permittedProcesses";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -234,7 +234,7 @@ namespace SafeExamBrowser.Monitoring.Applications
|
||||||
private bool BelongsToApplication(IProcess process, BlacklistApplication application)
|
private bool BelongsToApplication(IProcess process, BlacklistApplication application)
|
||||||
{
|
{
|
||||||
var sameName = process.Name.Equals(application.ExecutableName, StringComparison.OrdinalIgnoreCase);
|
var sameName = process.Name.Equals(application.ExecutableName, StringComparison.OrdinalIgnoreCase);
|
||||||
var sameOriginalName = process.OriginalName?.Equals(application.ExecutableOriginalName, StringComparison.OrdinalIgnoreCase) == true;
|
var sameOriginalName = process.OriginalName?.Equals(application.OriginalName, StringComparison.OrdinalIgnoreCase) == true;
|
||||||
|
|
||||||
return sameName || sameOriginalName;
|
return sameName || sameOriginalName;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,6 @@ namespace SafeExamBrowser.Settings.Applications
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The original file name of the main executable of the application, if available.
|
/// The original file name of the main executable of the application, if available.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string ExecutableOriginalName { get; set; }
|
public string OriginalName { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Settings.Applications
|
namespace SafeExamBrowser.Settings.Applications
|
||||||
{
|
{
|
||||||
|
@ -16,9 +17,70 @@ namespace SafeExamBrowser.Settings.Applications
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class WhitelistApplication
|
public class WhitelistApplication
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Determines whether the user may choose a custom path if the main executable cannot be found under <see cref="ExecutablePath"/>.
|
||||||
|
/// </summary>
|
||||||
|
public bool AllowCustomPath { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Determines whether the application may already be running when initializing a session. If <c>true</c>, <see cref="AutoTerminate"/> will be ignored.
|
||||||
|
/// </summary>
|
||||||
|
public bool AllowRunning { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The list of arguments to be used when starting the application.
|
||||||
|
/// </summary>
|
||||||
|
public IList<string> Arguments { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Determines whether the application will be automatically started when initializing a session.
|
||||||
|
/// </summary>
|
||||||
|
public bool AutoStart { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Specifies whether the application may be automatically terminated when starting a session. Is ignored if <see cref="AllowRunning"/> is set.
|
||||||
|
/// </summary>
|
||||||
|
public bool AutoTerminate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The display name to be used for the application (e.g. in the shell).
|
||||||
|
/// </summary>
|
||||||
|
public string DisplayName { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The name of the main executable of the application.
|
/// The name of the main executable of the application.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string ExecutableName { get; set; }
|
public string ExecutableName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The path where the main executable of the application is located.
|
||||||
|
/// </summary>
|
||||||
|
public string ExecutablePath { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Used to identify an application by its main window title.
|
||||||
|
/// </summary>
|
||||||
|
/// TODO: Rename?
|
||||||
|
public string Identifier { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The original file name of the main executable of the application, if available.
|
||||||
|
/// </summary>
|
||||||
|
public string OriginalName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The name of the executable responsible for rendering the user interface.
|
||||||
|
/// </summary>
|
||||||
|
public string RendererName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Determines whether the user will be able to access the application via the shell.
|
||||||
|
/// </summary>
|
||||||
|
public bool ShowInShell { get; set; }
|
||||||
|
|
||||||
|
public WhitelistApplication()
|
||||||
|
{
|
||||||
|
Arguments = new List<string>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue