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();