SEBWIN-396: Implemented configuration value "allowQuit" to control the termination of SEB by user action.
This commit is contained in:
parent
631fb583d7
commit
b5876eb61a
14 changed files with 104 additions and 4 deletions
|
@ -104,6 +104,7 @@ namespace SafeExamBrowser.Client.UnitTests.Operations
|
|||
context.Activators.Add(terminationActivator.Object);
|
||||
context.Settings.ActionCenter.EnableActionCenter = true;
|
||||
context.Settings.Keyboard.AllowAltTab = true;
|
||||
context.Settings.Security.AllowTermination = true;
|
||||
|
||||
sut.Perform();
|
||||
|
||||
|
@ -218,6 +219,32 @@ namespace SafeExamBrowser.Client.UnitTests.Operations
|
|||
taskbar.VerifySet(t => t.ShowClock = false, Times.Once);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Perform_MustInitializeQuitButton()
|
||||
{
|
||||
context.Settings.ActionCenter.EnableActionCenter = true;
|
||||
context.Settings.Taskbar.EnableTaskbar = true;
|
||||
context.Settings.Security.AllowTermination = false;
|
||||
|
||||
sut.Perform();
|
||||
|
||||
actionCenter.VerifySet(a => a.ShowQuitButton = false, Times.Once);
|
||||
taskbar.VerifySet(t => t.ShowQuitButton = false, Times.Once);
|
||||
actionCenter.VerifySet(a => a.ShowQuitButton = true, Times.Never);
|
||||
taskbar.VerifySet(t => t.ShowQuitButton = true, Times.Never);
|
||||
|
||||
actionCenter.Reset();
|
||||
taskbar.Reset();
|
||||
context.Settings.Security.AllowTermination = true;
|
||||
|
||||
sut.Perform();
|
||||
|
||||
actionCenter.VerifySet(a => a.ShowQuitButton = false, Times.Never);
|
||||
taskbar.VerifySet(t => t.ShowQuitButton = false, Times.Never);
|
||||
actionCenter.VerifySet(a => a.ShowQuitButton = true, Times.Once);
|
||||
taskbar.VerifySet(t => t.ShowQuitButton = true, Times.Once);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Perform_MustInitializeNotifications()
|
||||
{
|
||||
|
@ -346,6 +373,19 @@ namespace SafeExamBrowser.Client.UnitTests.Operations
|
|||
taskbar.VerifyNoOtherCalls();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Perform_MustNotInitializeTerminationActivatorIfNotEnabled()
|
||||
{
|
||||
var terminationActivator = new Mock<ITerminationActivator>();
|
||||
|
||||
context.Activators.Add(terminationActivator.Object);
|
||||
context.Settings.Security.AllowTermination = false;
|
||||
|
||||
sut.Perform();
|
||||
|
||||
terminationActivator.Verify(a => a.Start(), Times.Never);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Revert_MustTerminateActivators()
|
||||
{
|
||||
|
|
|
@ -120,7 +120,7 @@ namespace SafeExamBrowser.Client.Operations
|
|||
taskViewActivator.Start();
|
||||
}
|
||||
|
||||
if (activator is ITerminationActivator terminationActivator)
|
||||
if (Context.Settings.Security.AllowTermination && activator is ITerminationActivator terminationActivator)
|
||||
{
|
||||
terminationActivator.Start();
|
||||
}
|
||||
|
@ -142,6 +142,7 @@ namespace SafeExamBrowser.Client.Operations
|
|||
InitializeKeyboardLayoutForActionCenter();
|
||||
InitializeWirelessNetworkForActionCenter();
|
||||
InitializePowerSupplyForActionCenter();
|
||||
InitializeQuitButtonForActionCenter();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -164,6 +165,7 @@ namespace SafeExamBrowser.Client.Operations
|
|||
InitializeAudioForTaskbar();
|
||||
InitializeKeyboardLayoutForTaskbar();
|
||||
InitializeClockForTaskbar();
|
||||
InitializeQuitButtonForTaskbar();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -302,6 +304,16 @@ namespace SafeExamBrowser.Client.Operations
|
|||
}
|
||||
}
|
||||
|
||||
private void InitializeQuitButtonForActionCenter()
|
||||
{
|
||||
actionCenter.ShowQuitButton = Context.Settings.Security.AllowTermination;
|
||||
}
|
||||
|
||||
private void InitializeQuitButtonForTaskbar()
|
||||
{
|
||||
taskbar.ShowQuitButton = Context.Settings.Security.AllowTermination;
|
||||
}
|
||||
|
||||
private void InitializeWirelessNetworkForActionCenter()
|
||||
{
|
||||
if (Context.Settings.ActionCenter.ShowWirelessNetwork)
|
||||
|
|
|
@ -22,6 +22,9 @@ namespace SafeExamBrowser.Configuration.ConfigurationData.DataMapping
|
|||
case Keys.ConfigurationFile.AdminPasswordHash:
|
||||
MapAdminPasswordHash(settings, value);
|
||||
break;
|
||||
case Keys.Security.AllowTermination:
|
||||
MapAllowTermination(settings, value);
|
||||
break;
|
||||
case Keys.Security.AllowVirtualMachine:
|
||||
MapVirtualMachinePolicy(settings, value);
|
||||
break;
|
||||
|
@ -48,6 +51,14 @@ namespace SafeExamBrowser.Configuration.ConfigurationData.DataMapping
|
|||
}
|
||||
}
|
||||
|
||||
private void MapAllowTermination(AppSettings settings, object value)
|
||||
{
|
||||
if (value is bool allow)
|
||||
{
|
||||
settings.Security.AllowTermination = allow;
|
||||
}
|
||||
}
|
||||
|
||||
private void MapApplicationLogAccess(IDictionary<string, object> rawData, AppSettings settings)
|
||||
{
|
||||
var hasValue = rawData.TryGetValue(Keys.Security.AllowApplicationLog, out var value);
|
||||
|
@ -112,7 +123,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData.DataMapping
|
|||
{
|
||||
if (value is bool allow)
|
||||
{
|
||||
settings.Security.VirtualMachinePolicy = allow ? VirtualMachinePolicy.Allow : VirtualMachinePolicy.Deny ;
|
||||
settings.Security.VirtualMachinePolicy = allow ? VirtualMachinePolicy.Allow : VirtualMachinePolicy.Deny;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -167,6 +167,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
|
|||
settings.Mouse.AllowRightButton = true;
|
||||
|
||||
settings.Security.AllowApplicationLogAccess = false;
|
||||
settings.Security.AllowTermination = true;
|
||||
settings.Security.AllowReconfiguration = false;
|
||||
settings.Security.KioskMode = KioskMode.CreateNewDesktop;
|
||||
settings.Security.VirtualMachinePolicy = VirtualMachinePolicy.Deny;
|
||||
|
|
|
@ -207,6 +207,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
|
|||
internal static class Security
|
||||
{
|
||||
internal const string AllowApplicationLog = "allowApplicationLog";
|
||||
internal const string AllowTermination = "allowQuit";
|
||||
internal const string AllowVirtualMachine = "allowVirtualMachine";
|
||||
internal const string KioskModeCreateNewDesktop = "createNewDesktop";
|
||||
internal const string KioskModeDisableExplorerShell = "killExplorerShell";
|
||||
|
|
|
@ -26,6 +26,11 @@ namespace SafeExamBrowser.Settings.Security
|
|||
/// </summary>
|
||||
public bool AllowApplicationLogAccess { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the user may initiate the termination of SEB. This setting does not affect automated mechanisms like a quit URL.
|
||||
/// </summary>
|
||||
public bool AllowTermination { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the user may reconfigure the application.
|
||||
/// </summary>
|
||||
|
|
|
@ -21,6 +21,11 @@ namespace SafeExamBrowser.UserInterface.Contracts.Shell
|
|||
/// </summary>
|
||||
bool ShowClock { set; }
|
||||
|
||||
/// <summary>
|
||||
/// Controls the visibility of the quit button.
|
||||
/// </summary>
|
||||
bool ShowQuitButton { set; }
|
||||
|
||||
/// <summary>
|
||||
/// Event fired when the user clicked the quit button.
|
||||
/// </summary>
|
||||
|
|
|
@ -21,6 +21,11 @@ namespace SafeExamBrowser.UserInterface.Contracts.Shell
|
|||
/// </summary>
|
||||
bool ShowClock { set; }
|
||||
|
||||
/// <summary>
|
||||
/// Controls the visibility of the quit button.
|
||||
/// </summary>
|
||||
bool ShowQuitButton { set; }
|
||||
|
||||
/// <summary>
|
||||
/// Event fired when the user clicked the quit button in the taskbar.
|
||||
/// </summary>
|
||||
|
|
|
@ -24,6 +24,11 @@ namespace SafeExamBrowser.UserInterface.Desktop.Windows
|
|||
set { Dispatcher.Invoke(() => Clock.Visibility = value ? Visibility.Visible : Visibility.Collapsed); }
|
||||
}
|
||||
|
||||
public bool ShowQuitButton
|
||||
{
|
||||
set { Dispatcher.Invoke(() => QuitButton.Visibility = value ? Visibility.Visible : Visibility.Collapsed); }
|
||||
}
|
||||
|
||||
public event QuitButtonClickedEventHandler QuitButtonClicked;
|
||||
|
||||
internal ActionCenter()
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="40" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<ScrollViewer Grid.Column="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" Template="{StaticResource SmallBarScrollViewer}">
|
||||
<StackPanel x:Name="ApplicationStackPanel" Orientation="Horizontal" />
|
||||
|
|
|
@ -26,6 +26,11 @@ namespace SafeExamBrowser.UserInterface.Desktop.Windows
|
|||
set { Dispatcher.Invoke(() => Clock.Visibility = value ? Visibility.Visible : Visibility.Collapsed); }
|
||||
}
|
||||
|
||||
public bool ShowQuitButton
|
||||
{
|
||||
set { Dispatcher.Invoke(() => QuitButton.Visibility = value ? Visibility.Visible : Visibility.Collapsed); }
|
||||
}
|
||||
|
||||
public event QuitButtonClickedEventHandler QuitButtonClicked;
|
||||
|
||||
internal Taskbar(ILogger logger)
|
||||
|
|
|
@ -24,6 +24,11 @@ namespace SafeExamBrowser.UserInterface.Mobile.Windows
|
|||
set { Dispatcher.Invoke(() => Clock.Visibility = value ? Visibility.Visible : Visibility.Collapsed); }
|
||||
}
|
||||
|
||||
public bool ShowQuitButton
|
||||
{
|
||||
set { Dispatcher.Invoke(() => QuitButton.Visibility = value ? Visibility.Visible : Visibility.Collapsed); }
|
||||
}
|
||||
|
||||
public event QuitButtonClickedEventHandler QuitButtonClicked;
|
||||
|
||||
internal ActionCenter()
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="60" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<ScrollViewer Grid.Column="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" Template="{StaticResource SmallBarScrollViewer}">
|
||||
<StackPanel x:Name="ApplicationStackPanel" Orientation="Horizontal" />
|
||||
|
|
|
@ -26,6 +26,11 @@ namespace SafeExamBrowser.UserInterface.Mobile.Windows
|
|||
set { Dispatcher.Invoke(() => Clock.Visibility = value ? Visibility.Visible : Visibility.Collapsed); }
|
||||
}
|
||||
|
||||
public bool ShowQuitButton
|
||||
{
|
||||
set { Dispatcher.Invoke(() => QuitButton.Visibility = value ? Visibility.Visible : Visibility.Collapsed); }
|
||||
}
|
||||
|
||||
public event QuitButtonClickedEventHandler QuitButtonClicked;
|
||||
|
||||
internal Taskbar(ILogger logger)
|
||||
|
|
Loading…
Add table
Reference in a new issue