diff --git a/SafeExamBrowser.Client/CompositionRoot.cs b/SafeExamBrowser.Client/CompositionRoot.cs index 5d17da06..949b1a06 100644 --- a/SafeExamBrowser.Client/CompositionRoot.cs +++ b/SafeExamBrowser.Client/CompositionRoot.cs @@ -76,6 +76,7 @@ namespace SafeExamBrowser.Client private ISystemInfo systemInfo; private ITaskbar taskbar; private ITaskview taskview; + private IUserInfo userInfo; private IText text; private IUserInterfaceFactory uiFactory; private IWirelessAdapter wirelessAdapter; @@ -89,9 +90,10 @@ namespace SafeExamBrowser.Client InitializeLogging(); InitializeText(); - context = new ClientContext(); uiFactory = BuildUserInterfaceFactory(); + actionCenter = uiFactory.CreateActionCenter(); + context = new ClientContext(); messageBox = BuildMessageBox(); nativeMethods = new NativeMethods(); powerSupply = new PowerSupply(ModuleLogger(nameof(PowerSupply))); @@ -99,6 +101,7 @@ namespace SafeExamBrowser.Client systemInfo = new SystemInfo(); taskbar = uiFactory.CreateTaskbar(ModuleLogger("Taskbar")); taskview = uiFactory.CreateTaskview(); + userInfo = new UserInfo(ModuleLogger(nameof(UserInfo))); wirelessAdapter = new WirelessAdapter(ModuleLogger(nameof(WirelessAdapter))); var processFactory = new ProcessFactory(ModuleLogger(nameof(ProcessFactory))); @@ -268,7 +271,7 @@ namespace SafeExamBrowser.Client private IOperation BuildServerOperation() { - var server = new ServerProxy(context.AppConfig, ModuleLogger(nameof(ServerProxy)), powerSupply, wirelessAdapter); + var server = new ServerProxy(context.AppConfig, ModuleLogger(nameof(ServerProxy)), systemInfo, userInfo, powerSupply, wirelessAdapter); var operation = new ServerOperation(context, logger, server); context.Server = server; diff --git a/SafeExamBrowser.Runtime/CompositionRoot.cs b/SafeExamBrowser.Runtime/CompositionRoot.cs index 2d188c92..19f42738 100644 --- a/SafeExamBrowser.Runtime/CompositionRoot.cs +++ b/SafeExamBrowser.Runtime/CompositionRoot.cs @@ -58,25 +58,26 @@ namespace SafeExamBrowser.Runtime InitializeLogging(); InitializeText(); - var args = Environment.GetCommandLineArgs(); - var messageBox = new MessageBoxFactory(text); var nativeMethods = new NativeMethods(); var uiFactory = new UserInterfaceFactory(text); + var userInfo = new UserInfo(ModuleLogger(nameof(UserInfo))); + + var args = Environment.GetCommandLineArgs(); 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 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 server = new ServerProxy(appConfig, ModuleLogger(nameof(ServerProxy))); + var server = new ServerProxy(appConfig, 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 userInfo = new UserInfo(ModuleLogger(nameof(UserInfo))); var vmDetector = new VirtualMachineDetector(ModuleLogger(nameof(VirtualMachineDetector)), systemInfo); var bootstrapOperations = new Queue(); diff --git a/SafeExamBrowser.Server/ServerProxy.cs b/SafeExamBrowser.Server/ServerProxy.cs index 27a6dd43..7a97b5d5 100644 --- a/SafeExamBrowser.Server/ServerProxy.cs +++ b/SafeExamBrowser.Server/ServerProxy.cs @@ -25,6 +25,7 @@ using SafeExamBrowser.Server.Contracts.Events; using SafeExamBrowser.Server.Data; using SafeExamBrowser.Settings.Logging; using SafeExamBrowser.Settings.Server; +using SafeExamBrowser.SystemComponents.Contracts; using SafeExamBrowser.SystemComponents.Contracts.PowerSupply; using SafeExamBrowser.SystemComponents.Contracts.WirelessNetwork; using Timer = System.Timers.Timer; @@ -33,27 +34,30 @@ namespace SafeExamBrowser.Server { public class ServerProxy : ILogObserver, IServerProxy { + private readonly AppConfig appConfig; + private readonly FileSystem fileSystem; + private readonly HttpClient httpClient; + private readonly ConcurrentQueue instructionConfirmations; + private readonly ILogger logger; + private readonly ConcurrentQueue logContent; + private readonly Timer logTimer; + private readonly Parser parser; + private readonly Timer pingTimer; + private readonly IPowerSupply powerSupply; + private readonly ISystemInfo systemInfo; + private readonly IUserInfo userInfo; + private readonly IWirelessAdapter wirelessAdapter; + private ApiVersion1 api; - private AppConfig appConfig; - private FileSystem fileSystem; private string connectionToken; private int currentPowerSupplyValue; private bool connectedToPowergrid; private int currentWlanValue; private string examId; private int handNotificationId; - private HttpClient httpClient; - private ConcurrentQueue instructionConfirmations; - private ILogger logger; - private ConcurrentQueue logContent; - private Timer logTimer; - private Parser parser; private string oauth2Token; private int pingNumber; - private Timer pingTimer; - private IPowerSupply powerSupply; private ServerSettings settings; - private IWirelessAdapter wirelessAdapter; public event ServerEventHandler HandConfirmed; public event ProctoringConfigurationReceivedEventHandler ProctoringConfigurationReceived; @@ -63,6 +67,8 @@ namespace SafeExamBrowser.Server public ServerProxy( AppConfig appConfig, ILogger logger, + ISystemInfo systemInfo, + IUserInfo userInfo, IPowerSupply powerSupply = default(IPowerSupply), IWirelessAdapter wirelessAdapter = default(IWirelessAdapter)) { @@ -77,6 +83,8 @@ namespace SafeExamBrowser.Server this.parser = new Parser(logger); this.pingTimer = new Timer(); this.powerSupply = powerSupply; + this.systemInfo = systemInfo; + this.userInfo = userInfo; this.wirelessAdapter = wirelessAdapter; } @@ -298,7 +306,9 @@ namespace SafeExamBrowser.Server public ServerResponse SendSessionIdentifier(string identifier) { var authorization = ("Authorization", $"Bearer {oauth2Token}"); - var content = $"examId={examId}&seb_user_session_id={identifier}"; + var clientInfo = $"client_id={userInfo.GetUserName()}&seb_machine_name={systemInfo.Name}"; + var versionInfo = $"seb_os_name={systemInfo.OperatingSystemInfo}&seb_version={appConfig.ProgramInformationalVersion}"; + var content = $"examId={examId}&{clientInfo}&{versionInfo}&seb_user_session_id={identifier}"; var contentType = "application/x-www-form-urlencoded"; var token = ("SEBConnectionToken", connectionToken);