Added GetVersion command. Routed SendSAS through ScreenCaster before DeviceHub. Minor refactoring.

This commit is contained in:
Jared Goodwin 2019-07-05 13:30:45 -07:00
parent d45e24f091
commit fc16f56e7b
31 changed files with 698 additions and 72 deletions

View File

@ -13,6 +13,7 @@ using System.IO;
using System.Net;
using Remotely.ScreenCast.Core.Utilities;
using Remotely.ScreenCast.Core.Input;
using Remotely.Shared.Win32;
namespace Remotely.ScreenCast.Core.Sockets
{
@ -112,6 +113,14 @@ namespace Remotely.ScreenCast.Core.Sockets
}
});
Connection.On("CtrlAltDel", async (string viewerID) =>
{
if (Conductor.Viewers.TryGetValue(viewerID, out var viewer) && viewer.HasControl)
{
await Connection.InvokeAsync("CtrlAltDel");
}
});
Connection.On("GetScreenCast", (string viewerID, string requesterName) =>
{
try

View File

@ -1 +1 @@
2019.07.03.1652
2019.07.05.1321

View File

@ -0,0 +1,529 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Remotely.Server.Data;
namespace Remotely.Server.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20190705195745_Device.AgentVersion")]
partial class DeviceAgentVersion
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "2.2.4-servicing-10062");
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken();
b.Property<string>("Name")
.HasMaxLength(256);
b.Property<string>("NormalizedName")
.HasMaxLength(256);
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasName("RoleNameIndex");
b.ToTable("AspNetRoles");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("ClaimType");
b.Property<string>("ClaimValue");
b.Property<string>("RoleId")
.IsRequired();
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
{
b.Property<string>("Id")
.ValueGeneratedOnAdd();
b.Property<int>("AccessFailedCount");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken();
b.Property<string>("Discriminator")
.IsRequired();
b.Property<string>("Email")
.HasMaxLength(256);
b.Property<bool>("EmailConfirmed");
b.Property<bool>("LockoutEnabled");
b.Property<DateTimeOffset?>("LockoutEnd");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256);
b.Property<string>("NormalizedUserName")
.HasMaxLength(256);
b.Property<string>("PasswordHash");
b.Property<string>("PhoneNumber");
b.Property<bool>("PhoneNumberConfirmed");
b.Property<string>("SecurityStamp");
b.Property<bool>("TwoFactorEnabled");
b.Property<string>("UserName")
.HasMaxLength(256);
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasName("UserNameIndex");
b.ToTable("RemotelyUsers");
b.HasDiscriminator<string>("Discriminator").HasValue("IdentityUser");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("ClaimType");
b.Property<string>("ClaimValue");
b.Property<string>("UserId")
.IsRequired();
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasMaxLength(128);
b.Property<string>("ProviderKey")
.HasMaxLength(128);
b.Property<string>("ProviderDisplayName");
b.Property<string>("UserId")
.IsRequired();
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId");
b.Property<string>("RoleId");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId");
b.Property<string>("LoginProvider")
.HasMaxLength(128);
b.Property<string>("Name")
.HasMaxLength(128);
b.Property<string>("Value");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens");
});
modelBuilder.Entity("Remotely.Shared.Models.CommandContext", b =>
{
b.Property<string>("ID")
.ValueGeneratedOnAdd();
b.Property<string>("CommandMode");
b.Property<string>("CommandResults");
b.Property<string>("CommandText");
b.Property<string>("OrganizationID");
b.Property<string>("PSCoreResults");
b.Property<string>("SenderConnectionID");
b.Property<string>("SenderUserID");
b.Property<string>("TargetDeviceIDs");
b.Property<DateTime>("TimeStamp");
b.HasKey("ID");
b.HasIndex("OrganizationID");
b.ToTable("CommandContexts");
});
modelBuilder.Entity("Remotely.Shared.Models.Device", b =>
{
b.Property<string>("ID")
.ValueGeneratedOnAdd();
b.Property<string>("AgentVersion");
b.Property<string>("CurrentUser");
b.Property<string>("DeviceName");
b.Property<string>("Drives");
b.Property<double>("FreeMemory");
b.Property<double>("FreeStorage");
b.Property<bool>("Is64Bit");
b.Property<bool>("IsOnline");
b.Property<DateTime>("LastOnline");
b.Property<int>("OSArchitecture");
b.Property<string>("OSDescription");
b.Property<string>("OrganizationID");
b.Property<string>("Platform");
b.Property<int>("ProcessorCount");
b.Property<string>("ServerVerificationToken");
b.Property<string>("Tags")
.HasMaxLength(200);
b.Property<double>("TotalMemory");
b.Property<double>("TotalStorage");
b.HasKey("ID");
b.HasIndex("OrganizationID");
b.ToTable("Devices");
});
modelBuilder.Entity("Remotely.Shared.Models.DevicePermissionLink", b =>
{
b.Property<string>("PermissionGroupID");
b.Property<string>("DeviceID");
b.HasKey("PermissionGroupID", "DeviceID");
b.HasIndex("DeviceID");
b.ToTable("DevicePermissionLinks");
});
modelBuilder.Entity("Remotely.Shared.Models.EventLog", b =>
{
b.Property<string>("ID")
.ValueGeneratedOnAdd();
b.Property<int>("EventType");
b.Property<string>("Message");
b.Property<string>("OrganizationID");
b.Property<string>("Source");
b.Property<string>("StackTrace");
b.Property<DateTime>("TimeStamp");
b.HasKey("ID");
b.HasIndex("OrganizationID");
b.ToTable("EventLogs");
});
modelBuilder.Entity("Remotely.Shared.Models.InviteLink", b =>
{
b.Property<string>("ID")
.ValueGeneratedOnAdd();
b.Property<DateTime>("DateSent");
b.Property<string>("InvitedUser");
b.Property<bool>("IsAdmin");
b.Property<string>("OrganizationID");
b.Property<string>("ResetUrl");
b.HasKey("ID");
b.HasIndex("OrganizationID");
b.ToTable("InviteLinks");
});
modelBuilder.Entity("Remotely.Shared.Models.Organization", b =>
{
b.Property<string>("ID")
.ValueGeneratedOnAdd();
b.Property<string>("OrganizationName")
.HasMaxLength(25);
b.HasKey("ID");
b.ToTable("Organizations");
});
modelBuilder.Entity("Remotely.Shared.Models.PermissionGroup", b =>
{
b.Property<string>("ID")
.ValueGeneratedOnAdd();
b.Property<string>("Name")
.HasMaxLength(100);
b.Property<string>("OrganizationID");
b.HasKey("ID");
b.HasIndex("OrganizationID");
b.ToTable("PermissionGroups");
});
modelBuilder.Entity("Remotely.Shared.Models.SharedFile", b =>
{
b.Property<string>("ID")
.ValueGeneratedOnAdd();
b.Property<string>("ContentType");
b.Property<byte[]>("FileContents");
b.Property<string>("FileName");
b.Property<string>("OrganizationID");
b.Property<DateTime>("Timestamp");
b.HasKey("ID");
b.HasIndex("OrganizationID");
b.ToTable("SharedFiles");
});
modelBuilder.Entity("Remotely.Shared.Models.UserPermissionLink", b =>
{
b.Property<string>("PermissionGroupID");
b.Property<string>("RemotelyUserID");
b.HasKey("PermissionGroupID", "RemotelyUserID");
b.HasIndex("RemotelyUserID");
b.ToTable("UserPermissionLinks");
});
modelBuilder.Entity("Remotely.Shared.Models.RemotelyUser", b =>
{
b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser");
b.Property<bool>("IsAdministrator");
b.Property<string>("OrganizationID");
b.Property<string>("UserOptions");
b.HasIndex("OrganizationID");
b.ToTable("RemotelyUsers");
b.HasDiscriminator().HasValue("RemotelyUser");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole")
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole")
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade);
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("Remotely.Shared.Models.CommandContext", b =>
{
b.HasOne("Remotely.Shared.Models.Organization", "Organization")
.WithMany("CommandContexts")
.HasForeignKey("OrganizationID");
});
modelBuilder.Entity("Remotely.Shared.Models.Device", b =>
{
b.HasOne("Remotely.Shared.Models.Organization", "Organization")
.WithMany("Devices")
.HasForeignKey("OrganizationID");
});
modelBuilder.Entity("Remotely.Shared.Models.DevicePermissionLink", b =>
{
b.HasOne("Remotely.Shared.Models.Device", "Device")
.WithMany("DevicePermissionLinks")
.HasForeignKey("DeviceID")
.OnDelete(DeleteBehavior.Cascade);
b.HasOne("Remotely.Shared.Models.PermissionGroup", "PermissionGroup")
.WithMany("DevicePermissionLinks")
.HasForeignKey("PermissionGroupID")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("Remotely.Shared.Models.EventLog", b =>
{
b.HasOne("Remotely.Shared.Models.Organization", "Organization")
.WithMany("EventLogs")
.HasForeignKey("OrganizationID");
});
modelBuilder.Entity("Remotely.Shared.Models.InviteLink", b =>
{
b.HasOne("Remotely.Shared.Models.Organization", "Organization")
.WithMany("InviteLinks")
.HasForeignKey("OrganizationID");
});
modelBuilder.Entity("Remotely.Shared.Models.PermissionGroup", b =>
{
b.HasOne("Remotely.Shared.Models.Organization", "Organization")
.WithMany("PermissionGroups")
.HasForeignKey("OrganizationID");
});
modelBuilder.Entity("Remotely.Shared.Models.SharedFile", b =>
{
b.HasOne("Remotely.Shared.Models.Organization", "Organization")
.WithMany("SharedFiles")
.HasForeignKey("OrganizationID");
});
modelBuilder.Entity("Remotely.Shared.Models.UserPermissionLink", b =>
{
b.HasOne("Remotely.Shared.Models.PermissionGroup", "PermissionGroup")
.WithMany("UserPermissionLinks")
.HasForeignKey("PermissionGroupID")
.OnDelete(DeleteBehavior.Cascade);
b.HasOne("Remotely.Shared.Models.RemotelyUser", "RemotelyUser")
.WithMany("UserPermissionLinks")
.HasForeignKey("RemotelyUserID")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("Remotely.Shared.Models.RemotelyUser", b =>
{
b.HasOne("Remotely.Shared.Models.Organization", "Organization")
.WithMany("RemotelyUsers")
.HasForeignKey("OrganizationID");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,22 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace Remotely.Server.Migrations
{
public partial class DeviceAgentVersion : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "AgentVersion",
table: "Devices",
nullable: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "AgentVersion",
table: "Devices");
}
}
}

View File

@ -217,6 +217,8 @@ namespace Remotely.Server.Migrations
b.Property<string>("ID")
.ValueGeneratedOnAdd();
b.Property<string>("AgentVersion");
b.Property<string>("CurrentUser");
b.Property<string>("DeviceName");

View File

@ -4,32 +4,6 @@
ViewData["Title"] = "Client Downloads";
}
<div class="row mb-3" style="margin-top:15px">
<div class="col-sm-12 card card-body">
<p>
<strong class="text-info">Please Note:</strong>
</p>
<ul>
<li>
Install/uninstall scripts require elevated privileges (i.e. "run as admininistrator").
</li>
<li>
An installation log is created at %temp%\Remotely_Install.txt.
</li>
<li>
Client logs are created at %temp%\Remotely_Logs.txt.
<ul>
<li>
For a Windows Service, %temp% is C:\Windows\Temp\.
</li>
</ul>
</li>
</ul>
</div>
</div>
<div class="row mb-3">
<h4>Screen-Sharing Client</h4>
<div class="text-info col-sm-12 pl-0 mb-2">

View File

@ -128,7 +128,7 @@
</p>
</div>
</footer>
<script type="module" src="~/scripts/RemoteControl/RemoteControl.js">
<script type="module" src="~/scripts/RemoteControl/Main.js">
</script>
</body>
</html>

View File

@ -44,7 +44,8 @@
<Content Remove="wwwroot\scripts\Models\Point.ts" />
<Content Remove="wwwroot\scripts\Models\UserOptions.ts" />
<Content Remove="wwwroot\scripts\Pages\OrganizationManagement.ts" />
<Content Remove="wwwroot\scripts\RemoteControl\RemoteControl.ts" />
<Content Remove="wwwroot\scripts\RemoteControl\Conductor.ts" />
<Content Remove="wwwroot\scripts\RemoteControl\Main.ts" />
<Content Remove="wwwroot\scripts\RemoteControl\UI.ts" />
<Content Remove="wwwroot\scripts\ResultsParser.ts" />
<Content Remove="wwwroot\scripts\RTC.ts" />
@ -128,7 +129,8 @@
<TypeScriptCompile Include="wwwroot\scripts\Models\Device.ts" />
<TypeScriptCompile Include="wwwroot\scripts\Models\Parameter.ts" />
<TypeScriptCompile Include="wwwroot\scripts\Pages\OrganizationManagement.ts" />
<TypeScriptCompile Include="wwwroot\scripts\RemoteControl\RemoteControl.ts" />
<TypeScriptCompile Include="wwwroot\scripts\RemoteControl\Main.ts" />
<TypeScriptCompile Include="wwwroot\scripts\RemoteControl\Conductor.ts" />
<TypeScriptCompile Include="wwwroot\scripts\RemoteControl\UI.ts" />
<TypeScriptCompile Include="wwwroot\scripts\ResultsParser.ts" />
<TypeScriptCompile Include="wwwroot\scripts\RemoteControl\RCBrowserSockets.ts" />

View File

@ -71,9 +71,9 @@ namespace Remotely.Server.Services
Context.Items["ScreenCasterID"] = value;
}
}
public async Task CtrlAltDel(string serviceID)
public async Task CtrlAltDel()
{
await DeviceHub.Clients.Client(serviceID).SendAsync("CtrlAltDel");
await RCDeviceHub.Clients.Client(ScreenCasterID).SendAsync("CtrlAltDel", Context.ConnectionId);
}
public async Task KeyDown(string key)

View File

@ -125,6 +125,10 @@ namespace Remotely.Server.Services
}
}
public async Task CtrlAltDel()
{
await DeviceHub.Clients.Client(ServiceID).SendAsync("CtrlAltDel");
}
public async Task GetSessionID()
{
var random = new Random();

View File

@ -132,6 +132,9 @@ try {
}
else {
Write-Log "Install started."
Write-Log
Write-Log "Install/uninstall logs are being written to `"$LogPath`""
Write-Log
Install-Remotely
Write-Log "Install completed."
exit

View File

@ -120,9 +120,12 @@ try {
Run-StartupChecks
if ($ArgList.Contains("-uninstall")) {
Write-Log "Uninstall started."
Uninstall-Remotely
Write-Log "Uninstall completed."
Write-Log "Install started."
Write-Log
Write-Log "Install/uninstall logs are being written to `"$LogPath`""
Write-Log
Install-Remotely
Write-Log "Install completed."
exit
}
else {

View File

@ -1,5 +1,6 @@
body {
color: rgb(180,180,180);
background: rgb(20,20,20) !important;
}
nav.navbar.navbar-dark.bg-dark {

View File

@ -58,6 +58,30 @@ var commands = [
;
BrowserSockets.Connection.invoke("GetGroups", selectedDevices.map(x => x.ID));
}),
new ConsoleCommand("GetVersion", [], "Display the remote agent's version.", "GetVersion", "", (parameters, paramDictionary) => {
var selectedDevices = Main.DataGrid.GetSelectedDevices();
if (selectedDevices.length == 0) {
AddConsoleOutput("No devices are selected.");
return;
}
;
var output = `<div>Permission Groups:</div>
<table class="console-device-table table table-responsive">
<thead><tr>
<th>Device Name</th><th>Agent Version</th>
</tr></thead>`;
var deviceList = selectedDevices.map(x => {
return `<tr>
<td>${x.DeviceName}</td>
<td>
${x.AgentVersion}
</td>
</tr>`;
});
output += deviceList.join("");
output += "</table>";
UI.AddConsoleOutput(output);
}),
new ConsoleCommand("RemoveGroup", [
new Parameter("group", "The group name to remove.", "String")
], "Removes a permission group to the selected computer(s).", "RemoveGroup -group Lab Devices", "", (parameters, paramDictionary) => {

File diff suppressed because one or more lines are too long

View File

@ -82,6 +82,38 @@ var commands: Array<ConsoleCommand> = [
BrowserSockets.Connection.invoke("GetGroups", selectedDevices.map(x=>x.ID));
}
),
new ConsoleCommand(
"GetVersion",
[
],
"Display the remote agent's version.",
"GetVersion",
"",
(parameters, paramDictionary) => {
var selectedDevices = Main.DataGrid.GetSelectedDevices();
if (selectedDevices.length == 0) {
AddConsoleOutput("No devices are selected.");
return;
};
var output = `<div>Permission Groups:</div>
<table class="console-device-table table table-responsive">
<thead><tr>
<th>Device Name</th><th>Agent Version</th>
</tr></thead>`;
var deviceList = selectedDevices.map(x => {
return `<tr>
<td>${x.DeviceName}</td>
<td>
${x.AgentVersion}
</td>
</tr>`
});
output += deviceList.join("");
output += "</table>";
UI.AddConsoleOutput(output);
}
),
new ConsoleCommand(
"RemoveGroup",
[

View File

@ -1,22 +1,23 @@
import { DevicePermissionLink } from "./DevicePermissionLink";
export interface Device {
AgentVersion: string;
CurrentUser: string;
DeviceName: string;
DevicePermissionLinks: DevicePermissionLink[];
Drives: any[];
FreeMemory: number;
FreeStorage: number;
ID: string;
Is64Bit: boolean;
IsOnline: boolean;
LastOnline: Date;
DeviceName: string;
DevicePermissionLinks: DevicePermissionLink[];
OrganizationID: string;
OSArchitecture: any;
OSDescription: string;
Platform: string;
ProcessorCount: number;
TotalMemory: number;
FreeStorage: number;
TotalStorage: number;
FreeMemory: number;
CurrentUser: string;
Tags: string;
}

View File

@ -0,0 +1,11 @@
export class Conductor {
constructor(rcBrowserSockets, clientID, serviceID) {
this.ClientID = "";
this.ServiceID = "";
this.RequesterName = "";
this.RCBrowserSockets = rcBrowserSockets;
this.ClientID = clientID;
this.ServiceID = serviceID;
}
}
//# sourceMappingURL=Conductor.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"Conductor.js","sourceRoot":"","sources":["Conductor.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,SAAS;IAClB,YAAY,gBAAkC,EAAE,QAAgB,EAAE,SAAiB;QAMnF,aAAQ,GAAW,EAAE,CAAC;QACtB,cAAS,GAAY,EAAE,CAAC;QAExB,kBAAa,GAAW,EAAE,CAAC;QARvB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;CAMJ"}

View File

@ -0,0 +1,15 @@
import { RCBrowserSockets } from "./RCBrowserSockets.js";
import { RemoteControlMode } from "../Enums/RemoteControlMode.js";
export class Conductor {
constructor(rcBrowserSockets: RCBrowserSockets, clientID: string, serviceID: string) {
this.RCBrowserSockets = rcBrowserSockets;
this.ClientID = clientID;
this.ServiceID = serviceID;
}
RCBrowserSockets: RCBrowserSockets;
ClientID: string = "";
ServiceID : string = "";
Mode: RemoteControlMode;
RequesterName: string = "";
}

View File

@ -2,16 +2,10 @@ import * as Utilities from "../Utilities.js";
import { RCBrowserSockets } from "./RCBrowserSockets.js";
import * as UI from "./UI.js";
import { RemoteControlMode } from "../Enums/RemoteControlMode.js";
import { Conductor } from "./Conductor.js";
var queryString = Utilities.ParseSearchString();
var rcBrowserSockets = new RCBrowserSockets();
export const RemoteControl = new class {
constructor() {
this.RCBrowserSockets = rcBrowserSockets;
this.ClientID = queryString["clientID"] ? decodeURIComponent(queryString["clientID"]) : "";
this.ServiceID = queryString["serviceID"] ? decodeURIComponent(queryString["serviceID"]) : "";
this.RequesterName = "";
}
};
export const RemoteControl = new Conductor(rcBrowserSockets, queryString["clientID"] ? decodeURIComponent(queryString["clientID"]) : "", queryString["serviceID"] ? decodeURIComponent(queryString["serviceID"]) : "");
export function ConnectToClient() {
UI.ConnectButton.disabled = true;
RemoteControl.ClientID = UI.SessionIDInput.value.split(" ").join("");
@ -35,4 +29,4 @@ window.onload = () => {
}
}
};
//# sourceMappingURL=RemoteControl.js.map
//# sourceMappingURL=Main.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"Main.js","sourceRoot":"","sources":["Main.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,IAAI,WAAW,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC;AAChD,IAAI,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAE9C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,SAAS,CAAC,gBAAgB,EACvD,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAC1E,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAElF,MAAM,UAAU,eAAe;IAC3B,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,aAAa,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAC1D,aAAa,CAAC,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAC9C,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IACzC,EAAE,CAAC,aAAa,CAAC,SAAS,GAAG,+BAA+B,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;IACjB,EAAE,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAExC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE;QACzB,aAAa,CAAC,IAAI,GAAG,iBAAiB,CAAC,UAAU,CAAC;QAClD,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACrC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;KAC5C;SACI,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE;QAC/B,EAAE,CAAC,cAAc,CAAC,KAAK,GAAG,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QACvE,IAAI,WAAW,CAAC,eAAe,CAAC,EAAE;YAC9B,EAAE,CAAC,kBAAkB,CAAC,KAAK,GAAG,kBAAkB,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;YAC/E,eAAe,EAAE,CAAC;SACrB;KACJ;AACL,CAAC,CAAA"}

View File

@ -2,18 +2,15 @@
import { RCBrowserSockets } from "./RCBrowserSockets.js";
import * as UI from "./UI.js";
import { RemoteControlMode } from "../Enums/RemoteControlMode.js";
import { Conductor } from "./Conductor.js";
var queryString = Utilities.ParseSearchString();
var rcBrowserSockets = new RCBrowserSockets();
export const RemoteControl = new class {
RCBrowserSockets = rcBrowserSockets;
ClientID = queryString["clientID"] ? decodeURIComponent(queryString["clientID"]) : "";
ServiceID = queryString["serviceID"] ? decodeURIComponent(queryString["serviceID"]) : "";
Mode: RemoteControlMode;
RequesterName: string = "";
}
export const RemoteControl = new Conductor(rcBrowserSockets,
queryString["clientID"] ? decodeURIComponent(queryString["clientID"]) : "",
queryString["serviceID"] ? decodeURIComponent(queryString["serviceID"]) : "");
export function ConnectToClient() {
UI.ConnectButton.disabled = true;

View File

@ -1,6 +1,6 @@
import * as Utilities from "../Utilities.js";
import * as UI from "./UI.js";
import { RemoteControl } from "./RemoteControl.js";
import { RemoteControl } from "./Main.js";
import { Sound } from "../Sound.js";
var signalR = window["signalR"];
export class RCBrowserSockets {
@ -78,7 +78,7 @@ export class RCBrowserSockets {
this.Connection.invoke("KeyPress", key);
}
SendCtrlAltDel() {
this.Connection.invoke("CtrlAltDel", RemoteControl.ServiceID);
this.Connection.invoke("CtrlAltDel");
}
SendSharedFileIDs(fileIDs) {
this.Connection.invoke("SendSharedFileIDs", JSON.parse(fileIDs));

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,6 @@
import * as Utilities from "../Utilities.js";
import * as UI from "./UI.js";
import { ConnectButton } from "./UI.js";
import { RemoteControl } from "./RemoteControl.js";
import { RemoteControl } from "./Main.js";
import { CursorInfo } from "../Models/CursorInfo.js";
import { Sound } from "../Sound.js";
@ -86,7 +85,7 @@ export class RCBrowserSockets {
}
SendCtrlAltDel() {
this.Connection.invoke("CtrlAltDel", RemoteControl.ServiceID);
this.Connection.invoke("CtrlAltDel");
}
SendSharedFileIDs(fileIDs: string): any {
this.Connection.invoke("SendSharedFileIDs", JSON.parse(fileIDs));

View File

@ -1 +0,0 @@
{"version":3,"file":"RemoteControl.js","sourceRoot":"","sources":["RemoteControl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,IAAI,WAAW,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC;AAChD,IAAI,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAE9C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI;IAAA;QAC7B,qBAAgB,GAAG,gBAAgB,CAAC;QACpC,aAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,cAAS,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzF,kBAAa,GAAW,EAAE,CAAC;IAC/B,CAAC;CAAA,CAAA;AAED,MAAM,UAAU,eAAe;IAC3B,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,aAAa,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAC1D,aAAa,CAAC,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAC9C,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IACzC,EAAE,CAAC,aAAa,CAAC,SAAS,GAAG,+BAA+B,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;IACjB,EAAE,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAExC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE;QACzB,aAAa,CAAC,IAAI,GAAG,iBAAiB,CAAC,UAAU,CAAC;QAClD,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACrC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;KAC5C;SACI,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE;QAC/B,EAAE,CAAC,cAAc,CAAC,KAAK,GAAG,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QACvE,IAAI,WAAW,CAAC,eAAe,CAAC,EAAE;YAC9B,EAAE,CAAC,kBAAkB,CAAC,KAAK,GAAG,kBAAkB,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;YAC/E,eAAe,EAAE,CAAC;SACrB;KACJ;AACL,CAAC,CAAA"}

View File

@ -1,4 +1,4 @@
import { ConnectToClient, RemoteControl } from "./RemoteControl.js";
import { ConnectToClient, RemoteControl } from "./Main.js";
import { FloatMessage } from "../UI.js";
import { RemoteControlMode } from "../Enums/RemoteControlMode.js";
export var AudioButton = document.getElementById("audioButton");

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
import { RCBrowserSockets } from "./RCBrowserSockets.js";
import { GetDistanceBetween } from "../Utilities.js";
import { ConnectToClient, RemoteControl } from "./RemoteControl.js";
import { ConnectToClient, RemoteControl } from "./Main.js";
import { FloatMessage } from "../UI.js";
import { RemoteControlMode } from "../Enums/RemoteControlMode.js";
import { Point } from "../Models/Point.js";

View File

@ -12,7 +12,10 @@ namespace Remotely.Shared.Models
{
public class Device
{
public string AgentVersion { get; set; }
public string CurrentUser { get; set; }
public string DeviceName { get; set; }
public virtual ICollection<DevicePermissionLink> DevicePermissionLinks { get; set; } = new List<DevicePermissionLink>();
public List<Drive> Drives { get; set; }
public double FreeMemory { get; set; }
@ -27,16 +30,11 @@ namespace Remotely.Shared.Models
public bool IsOnline { get; set; }
public DateTime LastOnline { get; set; }
public string DeviceName { get; set; }
public virtual Organization Organization { get; set; }
public string OrganizationID { get; set; }
public Architecture OSArchitecture { get; set; }
public string OSDescription { get; set; }
public virtual ICollection<DevicePermissionLink> DevicePermissionLinks { get; set; } = new List<DevicePermissionLink>();
public string Platform { get; set; }
public int ProcessorCount { get; set; }
@ -117,6 +115,11 @@ namespace Remotely.Shared.Models
}
device.TotalMemory = totalMemory.Item2;
if (File.Exists("Remotely_Agent.dll"))
{
device.AgentVersion = FileVersionInfo.GetVersionInfo("Remotely_Agent.dll")?.FileVersion?.ToString()?.Trim();
}
return device;
}