mirror of
https://github.com/immense/Remotely.git
synced 2025-10-26 11:27:15 +00:00
Added GetVersion command. Routed SendSAS through ScreenCaster before DeviceHub. Minor refactoring.
This commit is contained in:
parent
d45e24f091
commit
fc16f56e7b
@ -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
|
||||
|
||||
@ -1 +1 @@
|
||||
2019.07.03.1652
|
||||
2019.07.05.1321
|
||||
|
||||
529
Server/Migrations/20190705195745_Device.AgentVersion.Designer.cs
generated
Normal file
529
Server/Migrations/20190705195745_Device.AgentVersion.Designer.cs
generated
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
22
Server/Migrations/20190705195745_Device.AgentVersion.cs
Normal file
22
Server/Migrations/20190705195745_Device.AgentVersion.cs
Normal 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");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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");
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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" />
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
body {
|
||||
color: rgb(180,180,180);
|
||||
background: rgb(20,20,20) !important;
|
||||
}
|
||||
|
||||
nav.navbar.navbar-dark.bg-dark {
|
||||
|
||||
@ -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
@ -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",
|
||||
[
|
||||
|
||||
@ -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;
|
||||
}
|
||||
11
Server/wwwroot/scripts/RemoteControl/Conductor.js
Normal file
11
Server/wwwroot/scripts/RemoteControl/Conductor.js
Normal 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
|
||||
1
Server/wwwroot/scripts/RemoteControl/Conductor.js.map
Normal file
1
Server/wwwroot/scripts/RemoteControl/Conductor.js.map
Normal 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"}
|
||||
15
Server/wwwroot/scripts/RemoteControl/Conductor.ts
Normal file
15
Server/wwwroot/scripts/RemoteControl/Conductor.ts
Normal 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 = "";
|
||||
}
|
||||
@ -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
|
||||
1
Server/wwwroot/scripts/RemoteControl/Main.js.map
Normal file
1
Server/wwwroot/scripts/RemoteControl/Main.js.map
Normal 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"}
|
||||
@ -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;
|
||||
@ -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
@ -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));
|
||||
|
||||
@ -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"}
|
||||
@ -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
@ -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";
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user