import * as UI from "./UI.js"; import * as DataGrid from "./DataGrid.js"; import { Device } from "./Models/Device.js"; import { PSCoreCommandResult } from "./Models/PSCoreCommandResult.js"; import { GenericCommandResult } from "./Models/GenericCommandResult.js"; import { CommandContext } from "./Models/CommandContext.js"; import { CreateCommandHarness, AddCommandResultsHarness, AddPSCoreResultsHarness, UpdateResultsCount } from "./ResultsParser.js"; import { Store } from "./Store.js"; import { UserOptions } from "./Models/UserOptions.js"; import { UserSettings } from "./UserSettings.js"; import { Main } from "./Main.js"; export var Connection: any; export var ServiceID: string; export var Connected: boolean; export function Connect() { var signalR = window["signalR"]; Connection = new signalR.HubConnectionBuilder() .withUrl("/BrowserHub") .configureLogging(signalR.LogLevel.Information) .build(); applyMessageHandlers(Connection); Connection.start().catch(err => { console.error(err.toString()); Connected = false; UI.AddConsoleOutput("Your connection was lost. Refresh the page or enter a command to reconnect."); }).then(() => { Connected = true; }) this.Connection.closedCallbacks.push((ev) => { Connected = false; if (!Store.IsDisconnectExpected) { UI.ShowModal("Connection Failure", "Your connection was lost. Click Reconnect to start a new session.", ``); UI.AddConsoleOutput("Connection lost."); } }); }; function applyMessageHandlers(hubConnection) { hubConnection.on("UserOptions", (options: UserOptions) => { Main.UserSettings.CommandModeShortcuts.Web = options.CommandModeShortcutWeb; Main.UserSettings.CommandModeShortcuts.PSCore = options.CommandModeShortcutPSCore; Main.UserSettings.CommandModeShortcuts.WinPS = options.CommandModeShortcutWinPS; Main.UserSettings.CommandModeShortcuts.Bash = options.CommandModeShortcutBash; Main.UserSettings.CommandModeShortcuts.CMD = options.CommandModeShortcutCMD; UI.AddConsoleOutput("Console connected."); DataGrid.RefreshGrid(); }); hubConnection.on("LockedOut", (args) => { location.assign("/Identity/Account/Lockout"); }); hubConnection.on("DeviceCameOnline", (device:Device) => { DataGrid.AddOrUpdateDevice(device); }); hubConnection.on("DeviceWentOffline", (device: Device) => { DataGrid.AddOrUpdateDevice(device); }); hubConnection.on("DeviceHeartbeat", (device: Device) => { DataGrid.AddOrUpdateDevice(device); }); hubConnection.on("RefreshDeviceList", () => { DataGrid.RefreshGrid(); }); hubConnection.on("PSCoreResult", (result: PSCoreCommandResult) => { AddPSCoreResultsHarness(result); UpdateResultsCount(result.CommandContextID); }); hubConnection.on("CommandResult", (result: GenericCommandResult) => { AddCommandResultsHarness(result); UpdateResultsCount(result.CommandContextID); }); hubConnection.on("DisplayConsoleMessage", (message: string) => { UI.AddConsoleOutput(message); }); hubConnection.on("DisplayConsoleHTML", (message: string) => { UI.AddConsoleHTML(message); }); hubConnection.on("GetGroupsResult", (devices: Device[]) => { var output = `
| Device Name | Permission Groups |
|---|---|
| ${x.DeviceName} |
${x.DevicePermissionLinks.map(x => x.PermissionGroup.Name + " ").join("")} |