diff --git a/Remotely_ScreenCast/Remotely_ScreenCast.csproj b/Remotely_ScreenCast/Remotely_ScreenCast.csproj
index 3c82081a..8dcc4b91 100644
--- a/Remotely_ScreenCast/Remotely_ScreenCast.csproj
+++ b/Remotely_ScreenCast/Remotely_ScreenCast.csproj
@@ -196,7 +196,7 @@
if $(ConfigurationName) == Debug (
md "$(SolutionDir)Remotely_Agent\bin\Debug\netcoreapp2.2\ScreenCast\"
- copy /y "$(TargetPath)" "$(SolutionDir)Remotely_Agent\bin\Debug\netcoreapp2.2\ScreenCast\"
+ if exist "$(TargetPath)" copy /y "$(TargetPath)" "$(SolutionDir)Remotely_Agent\bin\Debug\netcoreapp2.2\ScreenCast\"
)
diff --git a/Remotely_ScreenCast_Linux/Sockets/MessageHandlers.cs b/Remotely_ScreenCast_Linux/Sockets/MessageHandlers.cs
index 0bc7afdd..efd86c92 100644
--- a/Remotely_ScreenCast_Linux/Sockets/MessageHandlers.cs
+++ b/Remotely_ScreenCast_Linux/Sockets/MessageHandlers.cs
@@ -11,7 +11,6 @@ using System.Net;
using System.IO;
using System.Diagnostics;
using Remotely_ScreenCast_Linux.Models;
-using Remotely_ScreenCast_Linux.Capture;
namespace Remotely_ScreenCast_Linux.Sockets
{
diff --git a/Remotely_Server/Data/ApplicationDbContext.cs b/Remotely_Server/Data/ApplicationDbContext.cs
index e74a868d..4fa28e42 100644
--- a/Remotely_Server/Data/ApplicationDbContext.cs
+++ b/Remotely_Server/Data/ApplicationDbContext.cs
@@ -11,11 +11,11 @@ namespace Remotely_Server.Data
{
public class ApplicationDbContext : IdentityDbContext
{
- public ApplicationDbContext(DbContextOptions options)
- : base(options)
+ public ApplicationDbContext(DbContextOptions context)
+ : base(context)
{
- this.Database.Migrate();
}
+
public DbSet CommandContexts { get; set; }
public DbSet Drives { get; set; }
diff --git a/Remotely_Server/Migrations/20190327115434_UserOptionsSchema.Designer.cs b/Remotely_Server/Migrations/20190327115434_UserOptionsSchema.Designer.cs
new file mode 100644
index 00000000..6afdc791
--- /dev/null
+++ b/Remotely_Server/Migrations/20190327115434_UserOptionsSchema.Designer.cs
@@ -0,0 +1,572 @@
+//
+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("20190327115434_UserOptionsSchema")]
+ partial class UserOptionsSchema
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "2.2.2-servicing-10034");
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken();
+
+ b.Property("Name")
+ .HasMaxLength(256);
+
+ b.Property("NormalizedName")
+ .HasMaxLength(256);
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedName")
+ .IsUnique()
+ .HasName("RoleNameIndex");
+
+ b.ToTable("AspNetRoles");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ClaimType");
+
+ b.Property("ClaimValue");
+
+ b.Property("RoleId")
+ .IsRequired();
+
+ b.HasKey("Id");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AspNetRoleClaims");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("AccessFailedCount");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken();
+
+ b.Property("Discriminator")
+ .IsRequired();
+
+ b.Property("Email")
+ .HasMaxLength(256);
+
+ b.Property("EmailConfirmed");
+
+ b.Property("LockoutEnabled");
+
+ b.Property("LockoutEnd");
+
+ b.Property("NormalizedEmail")
+ .HasMaxLength(256);
+
+ b.Property("NormalizedUserName")
+ .HasMaxLength(256);
+
+ b.Property("PasswordHash");
+
+ b.Property("PhoneNumber");
+
+ b.Property("PhoneNumberConfirmed");
+
+ b.Property("SecurityStamp");
+
+ b.Property("TwoFactorEnabled");
+
+ b.Property("UserName")
+ .HasMaxLength(256);
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedEmail")
+ .HasName("EmailIndex");
+
+ b.HasIndex("NormalizedUserName")
+ .IsUnique()
+ .HasName("UserNameIndex");
+
+ b.ToTable("RemotelyUsers");
+
+ b.HasDiscriminator("Discriminator").HasValue("IdentityUser");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ClaimType");
+
+ b.Property("ClaimValue");
+
+ b.Property("UserId")
+ .IsRequired();
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AspNetUserClaims");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b =>
+ {
+ b.Property("LoginProvider")
+ .HasMaxLength(128);
+
+ b.Property("ProviderKey")
+ .HasMaxLength(128);
+
+ b.Property("ProviderDisplayName");
+
+ b.Property("UserId")
+ .IsRequired();
+
+ b.HasKey("LoginProvider", "ProviderKey");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AspNetUserLogins");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b =>
+ {
+ b.Property("UserId");
+
+ b.Property("RoleId");
+
+ b.HasKey("UserId", "RoleId");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AspNetUserRoles");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b =>
+ {
+ b.Property("UserId");
+
+ b.Property("LoginProvider")
+ .HasMaxLength(128);
+
+ b.Property("Name")
+ .HasMaxLength(128);
+
+ b.Property("Value");
+
+ b.HasKey("UserId", "LoginProvider", "Name");
+
+ b.ToTable("AspNetUserTokens");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.CommandContext", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd();
+
+ b.Property("CommandMode");
+
+ b.Property("CommandResults");
+
+ b.Property("CommandText");
+
+ b.Property("OrganizationID");
+
+ b.Property("PSCoreResults");
+
+ b.Property("SenderConnectionID");
+
+ b.Property("SenderUserID");
+
+ b.Property("TargetDeviceIDs");
+
+ b.Property("TimeStamp");
+
+ b.HasKey("ID");
+
+ b.HasIndex("OrganizationID");
+
+ b.ToTable("CommandContexts");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.Device", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd();
+
+ b.Property("CurrentUser");
+
+ b.Property("DeviceName");
+
+ b.Property("FreeMemory");
+
+ b.Property("FreeStorage");
+
+ b.Property("Is64Bit");
+
+ b.Property("IsOnline");
+
+ b.Property("LastOnline");
+
+ b.Property("OSArchitecture");
+
+ b.Property("OSDescription");
+
+ b.Property("OrganizationID");
+
+ b.Property("PermissionGroupID");
+
+ b.Property("Platform");
+
+ b.Property("ProcessorCount");
+
+ b.Property("ServerVerificationToken");
+
+ b.Property("Tags")
+ .HasMaxLength(200);
+
+ b.Property("TotalMemory");
+
+ b.Property("TotalStorage");
+
+ b.HasKey("ID");
+
+ b.HasIndex("OrganizationID");
+
+ b.HasIndex("PermissionGroupID");
+
+ b.ToTable("Devices");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.Drive", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd();
+
+ b.Property("DeviceID");
+
+ b.Property("DriveFormat");
+
+ b.Property("DriveType");
+
+ b.Property("FreeSpace");
+
+ b.Property("Name");
+
+ b.Property("RootDirectory");
+
+ b.Property("TotalSize");
+
+ b.Property("VolumeLabel");
+
+ b.HasKey("ID");
+
+ b.HasIndex("DeviceID");
+
+ b.ToTable("Drives");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.EventLog", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd();
+
+ b.Property("EventType");
+
+ b.Property("Message");
+
+ b.Property("OrganizationID");
+
+ b.Property("Source");
+
+ b.Property("StackTrace");
+
+ b.Property("TimeStamp");
+
+ b.HasKey("ID");
+
+ b.HasIndex("OrganizationID");
+
+ b.ToTable("EventLogs");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.InviteLink", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd();
+
+ b.Property("DateSent");
+
+ b.Property("InvitedUser");
+
+ b.Property("IsAdmin");
+
+ b.Property("OrganizationID");
+
+ b.HasKey("ID");
+
+ b.HasIndex("OrganizationID");
+
+ b.ToTable("InviteLinks");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.Organization", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd();
+
+ b.Property("OrganizationName")
+ .HasMaxLength(25);
+
+ b.HasKey("ID");
+
+ b.ToTable("Organizations");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.PermissionGroup", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd();
+
+ b.Property("DeviceID");
+
+ b.Property("Name")
+ .HasMaxLength(100);
+
+ b.Property("OrganizationID");
+
+ b.Property("RemotelyUserId");
+
+ b.HasKey("ID");
+
+ b.HasIndex("DeviceID");
+
+ b.HasIndex("OrganizationID");
+
+ b.HasIndex("RemotelyUserId");
+
+ b.ToTable("PermissionGroups");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.RemotelyUserOptions", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd();
+
+ b.Property("CommandModeShortcutBash")
+ .HasMaxLength(10);
+
+ b.Property("CommandModeShortcutCMD")
+ .HasMaxLength(10);
+
+ b.Property("CommandModeShortcutPSCore")
+ .HasMaxLength(10);
+
+ b.Property("CommandModeShortcutWeb")
+ .HasMaxLength(10);
+
+ b.Property("CommandModeShortcutWinPS")
+ .HasMaxLength(10);
+
+ b.Property("ConsolePrompt")
+ .HasMaxLength(5);
+
+ b.HasKey("ID");
+
+ b.ToTable("RemotelyUserOptions");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.SharedFile", b =>
+ {
+ b.Property("ID")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ContentType");
+
+ b.Property("FileContents");
+
+ b.Property("FileName");
+
+ b.Property("OrganizationID");
+
+ b.Property("Timestamp");
+
+ b.HasKey("ID");
+
+ b.HasIndex("OrganizationID");
+
+ b.ToTable("SharedFiles");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.RemotelyUser", b =>
+ {
+ b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser");
+
+ b.Property("IsAdministrator");
+
+ b.Property("OrganizationID");
+
+ b.Property("PermissionGroupID");
+
+ b.Property("UserOptionsID");
+
+ b.HasIndex("OrganizationID");
+
+ b.HasIndex("PermissionGroupID");
+
+ b.HasIndex("UserOptionsID");
+
+ b.ToTable("RemotelyUsers");
+
+ b.HasDiscriminator().HasValue("RemotelyUser");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b =>
+ {
+ b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole")
+ .WithMany()
+ .HasForeignKey("RoleId")
+ .OnDelete(DeleteBehavior.Cascade);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b =>
+ {
+ b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b =>
+ {
+ b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", 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", b =>
+ {
+ b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade);
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.CommandContext", b =>
+ {
+ b.HasOne("Remotely_Library.Models.Organization", "Organization")
+ .WithMany("CommandContexts")
+ .HasForeignKey("OrganizationID");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.Device", b =>
+ {
+ b.HasOne("Remotely_Library.Models.Organization", "Organization")
+ .WithMany("Devices")
+ .HasForeignKey("OrganizationID");
+
+ b.HasOne("Remotely_Library.Models.PermissionGroup")
+ .WithMany("Devices")
+ .HasForeignKey("PermissionGroupID");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.Drive", b =>
+ {
+ b.HasOne("Remotely_Library.Models.Device")
+ .WithMany("Drives")
+ .HasForeignKey("DeviceID");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.EventLog", b =>
+ {
+ b.HasOne("Remotely_Library.Models.Organization", "Organization")
+ .WithMany("EventLogs")
+ .HasForeignKey("OrganizationID");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.InviteLink", b =>
+ {
+ b.HasOne("Remotely_Library.Models.Organization", "Organization")
+ .WithMany("InviteLinks")
+ .HasForeignKey("OrganizationID");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.PermissionGroup", b =>
+ {
+ b.HasOne("Remotely_Library.Models.Device")
+ .WithMany("PermissionGroups")
+ .HasForeignKey("DeviceID");
+
+ b.HasOne("Remotely_Library.Models.Organization", "Organization")
+ .WithMany("PermissionGroups")
+ .HasForeignKey("OrganizationID");
+
+ b.HasOne("Remotely_Library.Models.RemotelyUser")
+ .WithMany("PermissionGroups")
+ .HasForeignKey("RemotelyUserId");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.SharedFile", b =>
+ {
+ b.HasOne("Remotely_Library.Models.Organization", "Organization")
+ .WithMany("SharedFiles")
+ .HasForeignKey("OrganizationID");
+ });
+
+ modelBuilder.Entity("Remotely_Library.Models.RemotelyUser", b =>
+ {
+ b.HasOne("Remotely_Library.Models.Organization", "Organization")
+ .WithMany("RemotelyUsers")
+ .HasForeignKey("OrganizationID");
+
+ b.HasOne("Remotely_Library.Models.PermissionGroup")
+ .WithMany("RemotelyUsers")
+ .HasForeignKey("PermissionGroupID");
+
+ b.HasOne("Remotely_Library.Models.RemotelyUserOptions", "UserOptions")
+ .WithMany()
+ .HasForeignKey("UserOptionsID");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/Remotely_Server/Migrations/20190327115434_UserOptionsSchema.cs b/Remotely_Server/Migrations/20190327115434_UserOptionsSchema.cs
new file mode 100644
index 00000000..dd93151c
--- /dev/null
+++ b/Remotely_Server/Migrations/20190327115434_UserOptionsSchema.cs
@@ -0,0 +1,23 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace Remotely_Server.Migrations
+{
+ public partial class UserOptionsSchema : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.RenameColumn(
+ name: "CommandModeShortcutRemotely",
+ table: "RemotelyUserOptions",
+ newName: "CommandModeShortcutWeb");
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.RenameColumn(
+ name: "CommandModeShortcutWeb",
+ table: "RemotelyUserOptions",
+ newName: "CommandModeShortcutRemotely");
+ }
+ }
+}
diff --git a/Remotely_Server/Migrations/ApplicationDbContextModelSnapshot.cs b/Remotely_Server/Migrations/ApplicationDbContextModelSnapshot.cs
index 735414bd..ce75e6b8 100644
--- a/Remotely_Server/Migrations/ApplicationDbContextModelSnapshot.cs
+++ b/Remotely_Server/Migrations/ApplicationDbContextModelSnapshot.cs
@@ -385,7 +385,7 @@ namespace Remotely_Server.Migrations
b.Property("CommandModeShortcutPSCore")
.HasMaxLength(10);
- b.Property("CommandModeShortcutRemotely")
+ b.Property("CommandModeShortcutWeb")
.HasMaxLength(10);
b.Property("CommandModeShortcutWinPS")
diff --git a/Remotely_Server/Startup.cs b/Remotely_Server/Startup.cs
index e15390b5..d1463cc7 100644
--- a/Remotely_Server/Startup.cs
+++ b/Remotely_Server/Startup.cs
@@ -37,7 +37,6 @@ namespace Remotely_Server
public IConfiguration Configuration { get; }
private bool IsDev { get; set; }
- private DataService DataService { get; set; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
@@ -110,9 +109,8 @@ namespace Remotely_Server
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
- public void Configure(IApplicationBuilder app, IHostingEnvironment env, DataService dataService)
+ public void Configure(IApplicationBuilder app, IHostingEnvironment env, ApplicationDbContext context, DataService dataService)
{
- DataService = dataService;
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
@@ -168,6 +166,8 @@ namespace Remotely_Server
});
app.UseMvcWithDefaultRoute();
+
+ context.Database.Migrate();
dataService.SetAllDevicesNotOnline();
dataService.CleanupEmptyOrganizations();
dataService.CleanupOldRecords();