Update Safe Exam Browser Patch to 3.10.0.826
This commit is contained in:
@@ -9,18 +9,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SafeExamBrowser.Communication.Contracts;
|
||||
using SafeExamBrowser.Communication.Contracts.Hosts;
|
||||
using SafeExamBrowser.Communication.Contracts.Proxies;
|
||||
using SafeExamBrowser.Communication.Hosts;
|
||||
using SafeExamBrowser.Communication.Proxies;
|
||||
using SafeExamBrowser.Configuration;
|
||||
using SafeExamBrowser.Configuration.Contracts;
|
||||
using SafeExamBrowser.Configuration.Contracts.Integrity;
|
||||
using SafeExamBrowser.Configuration.Cryptography;
|
||||
using SafeExamBrowser.Configuration.DataCompression;
|
||||
using SafeExamBrowser.Configuration.DataFormats;
|
||||
using SafeExamBrowser.Configuration.DataResources;
|
||||
using SafeExamBrowser.Configuration.Integrity;
|
||||
using SafeExamBrowser.Core.Contracts.OperationModel;
|
||||
using SafeExamBrowser.Core.OperationModel;
|
||||
using SafeExamBrowser.Core.Operations;
|
||||
using SafeExamBrowser.Core.ResponsibilityModel;
|
||||
using SafeExamBrowser.I18n;
|
||||
using SafeExamBrowser.I18n.Contracts;
|
||||
using SafeExamBrowser.Logging;
|
||||
@@ -29,12 +32,18 @@ using SafeExamBrowser.Monitoring;
|
||||
using SafeExamBrowser.Monitoring.Display;
|
||||
using SafeExamBrowser.Monitoring.System;
|
||||
using SafeExamBrowser.Runtime.Communication;
|
||||
using SafeExamBrowser.Runtime.Operations;
|
||||
using SafeExamBrowser.Runtime.Operations.Bootstrap;
|
||||
using SafeExamBrowser.Runtime.Operations.Session;
|
||||
using SafeExamBrowser.Runtime.Responsibilities;
|
||||
using SafeExamBrowser.Server;
|
||||
using SafeExamBrowser.Settings.Logging;
|
||||
using SafeExamBrowser.SystemComponents;
|
||||
using SafeExamBrowser.SystemComponents.Contracts;
|
||||
using SafeExamBrowser.SystemComponents.Contracts.Registry;
|
||||
using SafeExamBrowser.SystemComponents.Registry;
|
||||
using SafeExamBrowser.UserInterface.Contracts;
|
||||
using SafeExamBrowser.UserInterface.Contracts.MessageBox;
|
||||
using SafeExamBrowser.UserInterface.Contracts.Windows;
|
||||
using SafeExamBrowser.UserInterface.Desktop;
|
||||
using SafeExamBrowser.WindowsApi;
|
||||
using SafeExamBrowser.WindowsApi.Desktops;
|
||||
@@ -44,8 +53,11 @@ namespace SafeExamBrowser.Runtime
|
||||
{
|
||||
internal class CompositionRoot
|
||||
{
|
||||
private const int FIVE_SECONDS = 5000;
|
||||
private const int THIRTY_SECONDS = 30000;
|
||||
|
||||
private AppConfig appConfig;
|
||||
private IConfigurationRepository configuration;
|
||||
private IConfigurationRepository repository;
|
||||
private ILogger logger;
|
||||
private ISystemInfo systemInfo;
|
||||
private IText text;
|
||||
@@ -54,82 +66,112 @@ namespace SafeExamBrowser.Runtime
|
||||
|
||||
internal void BuildObjectGraph(Action shutdown)
|
||||
{
|
||||
const int FIVE_SECONDS = 5000;
|
||||
const int THIRTY_SECONDS = 30000;
|
||||
|
||||
logger = new Logger();
|
||||
|
||||
InitializeConfiguration();
|
||||
InitializeLogging();
|
||||
InitializeText();
|
||||
|
||||
var nativeMethods = new NativeMethods();
|
||||
var registry = new Registry(ModuleLogger(nameof(Registry)));
|
||||
var uiFactory = new UserInterfaceFactory(text);
|
||||
var userInfo = new UserInfo(ModuleLogger(nameof(UserInfo)));
|
||||
|
||||
var context = new RuntimeContext();
|
||||
var integrityModule = new IntegrityModule(appConfig, ModuleLogger(nameof(IntegrityModule)));
|
||||
var messageBox = new MessageBoxFactory(text);
|
||||
var registry = new Registry(ModuleLogger(nameof(Registry)));
|
||||
var runtimeHost = new RuntimeHost(appConfig.RuntimeAddress, new HostObjectFactory(), ModuleLogger(nameof(RuntimeHost)), FIVE_SECONDS);
|
||||
var runtimeWindow = uiFactory.CreateRuntimeWindow(appConfig);
|
||||
var serviceProxy = new ServiceProxy(appConfig.ServiceAddress, new ProxyObjectFactory(), ModuleLogger(nameof(ServiceProxy)), Interlocutor.Runtime);
|
||||
var splashScreen = uiFactory.CreateSplashScreen(appConfig);
|
||||
|
||||
systemInfo = new SystemInfo(registry);
|
||||
|
||||
var bootstrapSequence = BuildBootstrapOperations(integrityModule, runtimeHost, splashScreen);
|
||||
var sessionSequence = BuildSessionOperations(integrityModule, messageBox, registry, runtimeHost, runtimeWindow, serviceProxy, context, uiFactory);
|
||||
var responsibilities = BuildResponsibilities(messageBox, runtimeHost, runtimeWindow, serviceProxy, context, sessionSequence, shutdown, splashScreen);
|
||||
|
||||
context.Responsibilities = responsibilities;
|
||||
|
||||
RuntimeController = new RuntimeController(logger, bootstrapSequence, responsibilities, context, runtimeWindow, splashScreen);
|
||||
}
|
||||
|
||||
private BootstrapOperationSequence BuildBootstrapOperations(IIntegrityModule integrityModule, IRuntimeHost runtimeHost, ISplashScreen splashScreen)
|
||||
{
|
||||
var operations = new Queue<IOperation>();
|
||||
|
||||
operations.Enqueue(new I18nOperation(logger, text));
|
||||
operations.Enqueue(new CommunicationHostOperation(runtimeHost, logger));
|
||||
operations.Enqueue(new ApplicationIntegrityOperation(integrityModule, logger));
|
||||
|
||||
return new BootstrapOperationSequence(logger, operations, splashScreen);
|
||||
}
|
||||
|
||||
private ResponsibilityCollection<RuntimeTask> BuildResponsibilities(
|
||||
IMessageBox messageBox,
|
||||
IRuntimeHost runtimeHost,
|
||||
IRuntimeWindow runtimeWindow,
|
||||
IServiceProxy serviceProxy,
|
||||
RuntimeContext runtimeContext,
|
||||
SessionOperationSequence sessionSequence,
|
||||
Action shutdown,
|
||||
ISplashScreen splashScreen)
|
||||
{
|
||||
var responsibilities = new Queue<RuntimeResponsibility>();
|
||||
|
||||
responsibilities.Enqueue(new ClientResponsibility(ModuleLogger(nameof(ClientResponsibility)), messageBox, runtimeContext, runtimeWindow, shutdown));
|
||||
responsibilities.Enqueue(new CommunicationResponsibility(ModuleLogger(nameof(CommunicationResponsibility)), runtimeContext, runtimeHost, shutdown));
|
||||
responsibilities.Enqueue(new ErrorMessageResponsibility(appConfig, ModuleLogger(nameof(ErrorMessageResponsibility)), messageBox, runtimeContext, splashScreen, text));
|
||||
responsibilities.Enqueue(new ServiceResponsibility(ModuleLogger(nameof(ServiceResponsibility)), messageBox, runtimeContext, runtimeWindow, serviceProxy, shutdown));
|
||||
responsibilities.Enqueue(new SessionResponsibility(appConfig, ModuleLogger(nameof(SessionResponsibility)), messageBox, runtimeContext, runtimeWindow, sessionSequence, shutdown, text));
|
||||
|
||||
return new ResponsibilityCollection<RuntimeTask>(logger, responsibilities);
|
||||
}
|
||||
|
||||
private SessionOperationSequence BuildSessionOperations(
|
||||
IIntegrityModule integrityModule,
|
||||
IMessageBox messageBox,
|
||||
IRegistry registry,
|
||||
IRuntimeHost runtimeHost,
|
||||
IRuntimeWindow runtimeWindow,
|
||||
IServiceProxy serviceProxy,
|
||||
RuntimeContext runtimeContext,
|
||||
IUserInterfaceFactory uiFactory)
|
||||
{
|
||||
var args = Environment.GetCommandLineArgs();
|
||||
var integrityModule = new IntegrityModule(appConfig, ModuleLogger(nameof(IntegrityModule)));
|
||||
var fileSystem = new FileSystem();
|
||||
var nativeMethods = new NativeMethods();
|
||||
var operations = new Queue<SessionOperation>();
|
||||
var userInfo = new UserInfo(ModuleLogger(nameof(UserInfo)));
|
||||
|
||||
var clientBridge = new ClientBridge(runtimeHost, runtimeContext);
|
||||
var dependencies = new Dependencies(clientBridge, logger, messageBox, runtimeWindow, runtimeContext, text);
|
||||
var desktopFactory = new DesktopFactory(ModuleLogger(nameof(DesktopFactory)));
|
||||
var desktopMonitor = new DesktopMonitor(ModuleLogger(nameof(DesktopMonitor)));
|
||||
var displayMonitor = new DisplayMonitor(ModuleLogger(nameof(DisplayMonitor)), nativeMethods, systemInfo);
|
||||
var explorerShell = new ExplorerShell(ModuleLogger(nameof(ExplorerShell)), nativeMethods);
|
||||
var fileSystem = new FileSystem();
|
||||
var keyGenerator = new KeyGenerator(appConfig, integrityModule, ModuleLogger(nameof(KeyGenerator)));
|
||||
var messageBox = new MessageBoxFactory(text);
|
||||
var processFactory = new ProcessFactory(ModuleLogger(nameof(ProcessFactory)));
|
||||
var proxyFactory = new ProxyFactory(new ProxyObjectFactory(), ModuleLogger(nameof(ProxyFactory)));
|
||||
var remoteSessionDetector = new RemoteSessionDetector(ModuleLogger(nameof(RemoteSessionDetector)));
|
||||
var runtimeHost = new RuntimeHost(appConfig.RuntimeAddress, new HostObjectFactory(), ModuleLogger(nameof(RuntimeHost)), FIVE_SECONDS);
|
||||
var runtimeWindow = uiFactory.CreateRuntimeWindow(appConfig);
|
||||
var sentinel = new SystemSentinel(ModuleLogger(nameof(SystemSentinel)), nativeMethods, registry);
|
||||
var server = new ServerProxy(appConfig, keyGenerator, ModuleLogger(nameof(ServerProxy)), systemInfo, userInfo);
|
||||
var serviceProxy = new ServiceProxy(appConfig.ServiceAddress, new ProxyObjectFactory(), ModuleLogger(nameof(ServiceProxy)), Interlocutor.Runtime);
|
||||
var sessionContext = new SessionContext();
|
||||
var splashScreen = uiFactory.CreateSplashScreen(appConfig);
|
||||
var vmDetector = new VirtualMachineDetector(ModuleLogger(nameof(VirtualMachineDetector)), registry, systemInfo);
|
||||
var virtualMachineDetector = new VirtualMachineDetector(ModuleLogger(nameof(VirtualMachineDetector)), registry, systemInfo);
|
||||
|
||||
var bootstrapOperations = new Queue<IOperation>();
|
||||
var sessionOperations = new Queue<SessionOperation>();
|
||||
operations.Enqueue(new SessionInitializationOperation(dependencies, fileSystem, repository));
|
||||
operations.Enqueue(new ConfigurationOperation(args, dependencies, new FileSystem(), new HashAlgorithm(), repository, uiFactory));
|
||||
operations.Enqueue(new ServerOperation(dependencies, fileSystem, repository, server, uiFactory));
|
||||
operations.Enqueue(new VersionRestrictionOperation(dependencies));
|
||||
operations.Enqueue(new DisclaimerOperation(dependencies));
|
||||
operations.Enqueue(new RemoteSessionOperation(dependencies, remoteSessionDetector));
|
||||
operations.Enqueue(new SessionIntegrityOperation(dependencies, sentinel));
|
||||
operations.Enqueue(new VirtualMachineOperation(dependencies, virtualMachineDetector));
|
||||
operations.Enqueue(new DisplayMonitorOperation(dependencies, displayMonitor));
|
||||
operations.Enqueue(new ServiceOperation(dependencies, runtimeHost, serviceProxy, THIRTY_SECONDS, userInfo));
|
||||
operations.Enqueue(new ClientTerminationOperation(dependencies, processFactory, proxyFactory, runtimeHost, THIRTY_SECONDS));
|
||||
operations.Enqueue(new KioskModeOperation(dependencies, desktopFactory, desktopMonitor, explorerShell, processFactory));
|
||||
operations.Enqueue(new ClientOperation(dependencies, processFactory, proxyFactory, runtimeHost, THIRTY_SECONDS));
|
||||
operations.Enqueue(new SessionActivationOperation(dependencies));
|
||||
|
||||
bootstrapOperations.Enqueue(new I18nOperation(logger, text));
|
||||
bootstrapOperations.Enqueue(new CommunicationHostOperation(runtimeHost, logger));
|
||||
bootstrapOperations.Enqueue(new ApplicationIntegrityOperation(integrityModule, logger));
|
||||
|
||||
sessionOperations.Enqueue(new SessionInitializationOperation(configuration, fileSystem, logger, runtimeHost, sessionContext));
|
||||
sessionOperations.Enqueue(new ConfigurationOperation(args, configuration, new FileSystem(), new HashAlgorithm(), logger, sessionContext));
|
||||
sessionOperations.Enqueue(new ServerOperation(args, configuration, fileSystem, logger, sessionContext, server));
|
||||
sessionOperations.Enqueue(new VersionRestrictionOperation(logger, sessionContext, text));
|
||||
sessionOperations.Enqueue(new DisclaimerOperation(logger, sessionContext));
|
||||
sessionOperations.Enqueue(new RemoteSessionOperation(remoteSessionDetector, logger, sessionContext));
|
||||
sessionOperations.Enqueue(new SessionIntegrityOperation(logger, sentinel, sessionContext));
|
||||
sessionOperations.Enqueue(new VirtualMachineOperation(vmDetector, logger, sessionContext));
|
||||
sessionOperations.Enqueue(new DisplayMonitorOperation(displayMonitor, logger, sessionContext, text));
|
||||
sessionOperations.Enqueue(new ServiceOperation(logger, runtimeHost, serviceProxy, sessionContext, THIRTY_SECONDS, userInfo));
|
||||
sessionOperations.Enqueue(new ClientTerminationOperation(logger, processFactory, proxyFactory, runtimeHost, sessionContext, THIRTY_SECONDS));
|
||||
sessionOperations.Enqueue(new KioskModeOperation(desktopFactory, desktopMonitor, explorerShell, logger, processFactory, sessionContext));
|
||||
sessionOperations.Enqueue(new ClientOperation(logger, processFactory, proxyFactory, runtimeHost, sessionContext, THIRTY_SECONDS));
|
||||
sessionOperations.Enqueue(new SessionActivationOperation(logger, sessionContext));
|
||||
|
||||
var bootstrapSequence = new OperationSequence<IOperation>(logger, bootstrapOperations);
|
||||
var sessionSequence = new RepeatableOperationSequence<SessionOperation>(logger, sessionOperations);
|
||||
|
||||
RuntimeController = new RuntimeController(
|
||||
appConfig,
|
||||
logger,
|
||||
messageBox,
|
||||
bootstrapSequence,
|
||||
sessionSequence,
|
||||
runtimeHost,
|
||||
runtimeWindow,
|
||||
serviceProxy,
|
||||
sessionContext,
|
||||
shutdown,
|
||||
splashScreen,
|
||||
text,
|
||||
uiFactory);
|
||||
return new SessionOperationSequence(logger, operations, runtimeWindow);
|
||||
}
|
||||
|
||||
internal void LogStartupInformation()
|
||||
@@ -162,28 +204,28 @@ namespace SafeExamBrowser.Runtime
|
||||
var xmlParser = new XmlParser(compressor, ModuleLogger(nameof(XmlParser)));
|
||||
var xmlSerializer = new XmlSerializer(ModuleLogger(nameof(XmlSerializer)));
|
||||
|
||||
configuration = new ConfigurationRepository(certificateStore, repositoryLogger);
|
||||
appConfig = configuration.InitializeAppConfig();
|
||||
repository = new ConfigurationRepository(certificateStore, repositoryLogger);
|
||||
appConfig = repository.InitializeAppConfig();
|
||||
|
||||
configuration.Register(new BinaryParser(
|
||||
repository.Register(new BinaryParser(
|
||||
compressor,
|
||||
new HashAlgorithm(),
|
||||
ModuleLogger(nameof(BinaryParser)),
|
||||
passwordEncryption,
|
||||
publicKeyEncryption,
|
||||
symmetricEncryption, xmlParser));
|
||||
configuration.Register(new BinarySerializer(
|
||||
repository.Register(new BinarySerializer(
|
||||
compressor,
|
||||
ModuleLogger(nameof(BinarySerializer)),
|
||||
passwordEncryption,
|
||||
publicKeyEncryption,
|
||||
symmetricEncryption,
|
||||
xmlSerializer));
|
||||
configuration.Register(new XmlParser(compressor, ModuleLogger(nameof(XmlParser))));
|
||||
configuration.Register(new XmlSerializer(ModuleLogger(nameof(XmlSerializer))));
|
||||
configuration.Register(new FileResourceLoader(ModuleLogger(nameof(FileResourceLoader))));
|
||||
configuration.Register(new FileResourceSaver(ModuleLogger(nameof(FileResourceSaver))));
|
||||
configuration.Register(new NetworkResourceLoader(appConfig, new ModuleLogger(logger, nameof(NetworkResourceLoader))));
|
||||
repository.Register(new XmlParser(compressor, ModuleLogger(nameof(XmlParser))));
|
||||
repository.Register(new XmlSerializer(ModuleLogger(nameof(XmlSerializer))));
|
||||
repository.Register(new FileResourceLoader(ModuleLogger(nameof(FileResourceLoader))));
|
||||
repository.Register(new FileResourceSaver(ModuleLogger(nameof(FileResourceSaver))));
|
||||
repository.Register(new NetworkResourceLoader(appConfig, new ModuleLogger(logger, nameof(NetworkResourceLoader))));
|
||||
}
|
||||
|
||||
private void InitializeLogging()
|
||||
|
Reference in New Issue
Block a user