Added migration. Moved database migrate to Startup.

This commit is contained in:
Jared Goodwin 2019-03-27 05:00:45 -07:00
parent 7155a99e7b
commit 800fba4d0f
7 changed files with 603 additions and 9 deletions

View File

@ -196,7 +196,7 @@
<PropertyGroup>
<PostBuildEvent>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\"
)</PostBuildEvent>
</PropertyGroup>
<Import Project="..\packages\Fody.4.0.2\build\Fody.targets" Condition="Exists('..\packages\Fody.4.0.2\build\Fody.targets')" />

View File

@ -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
{

View File

@ -11,11 +11,11 @@ namespace Remotely_Server.Data
{
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> context)
: base(context)
{
this.Database.Migrate();
}
public DbSet<CommandContext> CommandContexts { get; set; }
public DbSet<Drive> Drives { get; set; }

View File

@ -0,0 +1,572 @@
// <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("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<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_Library.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_Library.Models.Device", b =>
{
b.Property<string>("ID")
.ValueGeneratedOnAdd();
b.Property<string>("CurrentUser");
b.Property<string>("DeviceName");
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>("PermissionGroupID");
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.HasIndex("PermissionGroupID");
b.ToTable("Devices");
});
modelBuilder.Entity("Remotely_Library.Models.Drive", b =>
{
b.Property<string>("ID")
.ValueGeneratedOnAdd();
b.Property<string>("DeviceID");
b.Property<string>("DriveFormat");
b.Property<int>("DriveType");
b.Property<double>("FreeSpace");
b.Property<string>("Name");
b.Property<string>("RootDirectory");
b.Property<double>("TotalSize");
b.Property<string>("VolumeLabel");
b.HasKey("ID");
b.HasIndex("DeviceID");
b.ToTable("Drives");
});
modelBuilder.Entity("Remotely_Library.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_Library.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.HasKey("ID");
b.HasIndex("OrganizationID");
b.ToTable("InviteLinks");
});
modelBuilder.Entity("Remotely_Library.Models.Organization", b =>
{
b.Property<string>("ID")
.ValueGeneratedOnAdd();
b.Property<string>("OrganizationName")
.HasMaxLength(25);
b.HasKey("ID");
b.ToTable("Organizations");
});
modelBuilder.Entity("Remotely_Library.Models.PermissionGroup", b =>
{
b.Property<string>("ID")
.ValueGeneratedOnAdd();
b.Property<string>("DeviceID");
b.Property<string>("Name")
.HasMaxLength(100);
b.Property<string>("OrganizationID");
b.Property<string>("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<string>("ID")
.ValueGeneratedOnAdd();
b.Property<string>("CommandModeShortcutBash")
.HasMaxLength(10);
b.Property<string>("CommandModeShortcutCMD")
.HasMaxLength(10);
b.Property<string>("CommandModeShortcutPSCore")
.HasMaxLength(10);
b.Property<string>("CommandModeShortcutWeb")
.HasMaxLength(10);
b.Property<string>("CommandModeShortcutWinPS")
.HasMaxLength(10);
b.Property<string>("ConsolePrompt")
.HasMaxLength(5);
b.HasKey("ID");
b.ToTable("RemotelyUserOptions");
});
modelBuilder.Entity("Remotely_Library.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_Library.Models.RemotelyUser", b =>
{
b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser");
b.Property<bool>("IsAdministrator");
b.Property<string>("OrganizationID");
b.Property<string>("PermissionGroupID");
b.Property<string>("UserOptionsID");
b.HasIndex("OrganizationID");
b.HasIndex("PermissionGroupID");
b.HasIndex("UserOptionsID");
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_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
}
}
}

View File

@ -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");
}
}
}

View File

@ -385,7 +385,7 @@ namespace Remotely_Server.Migrations
b.Property<string>("CommandModeShortcutPSCore")
.HasMaxLength(10);
b.Property<string>("CommandModeShortcutRemotely")
b.Property<string>("CommandModeShortcutWeb")
.HasMaxLength(10);
b.Property<string>("CommandModeShortcutWinPS")

View File

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