Generate a new security token per install Pt.1, Pt.2 = new Role System

pull/3840/head
Jamie Rees 4 years ago
parent 100336b3fc
commit 910fd34445

@ -0,0 +1,15 @@
namespace Ombi.Helpers
{
public class StartupSingleton
{
private static StartupSingleton instance;
private StartupSingleton() { }
public static StartupSingleton Instance => instance ?? (instance = new StartupSingleton());
public string StoragePath { get; set; }
public string SecurityKey { get; set; }
}
}

@ -1,13 +0,0 @@
namespace Ombi.Helpers
{
public class StoragePathSingleton
{
private static StoragePathSingleton instance;
private StoragePathSingleton() { }
public static StoragePathSingleton Instance => instance ?? (instance = new StoragePathSingleton());
public string StoragePath { get; set; }
}
}

@ -17,6 +17,7 @@ namespace Ombi.Store.Entities
TheMovieDb = 4, TheMovieDb = 4,
StoragePath = 5, StoragePath = 5,
Notification = 6, Notification = 6,
BaseUrl=7, BaseUrl = 7,
SecurityToken = 8
} }
} }

@ -117,7 +117,7 @@ namespace Ombi.Controllers.V1
public AboutViewModel About() public AboutViewModel About()
{ {
var dbConfiguration = DatabaseExtensions.GetDatabaseConfiguration(); var dbConfiguration = DatabaseExtensions.GetDatabaseConfiguration();
var storage = StoragePathSingleton.Instance; var storage = StartupSingleton.Instance;
var model = new AboutViewModel var model = new AboutViewModel
{ {
FrameworkDescription = RuntimeInformation.FrameworkDescription, FrameworkDescription = RuntimeInformation.FrameworkDescription,

@ -62,7 +62,7 @@ namespace Ombi.Extensions
public static DatabaseConfiguration GetDatabaseConfiguration() public static DatabaseConfiguration GetDatabaseConfiguration()
{ {
var i = StoragePathSingleton.Instance; var i = StartupSingleton.Instance;
if (string.IsNullOrEmpty(i.StoragePath)) if (string.IsNullOrEmpty(i.StoragePath))
{ {
i.StoragePath = string.Empty; i.StoragePath = string.Empty;

@ -83,7 +83,7 @@ namespace Ombi
var tokenValidationParameters = new TokenValidationParameters var tokenValidationParameters = new TokenValidationParameters
{ {
ValidateIssuerSigningKey = true, ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(tokenOptions.GetValue("SecretKey", string.Empty))), IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(StartupSingleton.Instance.SecurityKey)),
RequireExpirationTime = true, RequireExpirationTime = true,
ValidateLifetime = true, ValidateLifetime = true,

@ -18,7 +18,7 @@ using Ombi.Store.Context.Sqlite;
namespace Ombi namespace Ombi
{ {
public class Program public static class Program
{ {
private static string UrlArgs { get; set; } private static string UrlArgs { get; set; }
@ -50,13 +50,11 @@ namespace Ombi
UrlArgs = host; UrlArgs = host;
var urlValue = string.Empty; var urlValue = string.Empty;
var instance = StoragePathSingleton.Instance; var instance = StartupSingleton.Instance;
var demoInstance = DemoSingleton.Instance; var demoInstance = DemoSingleton.Instance;
demoInstance.Demo = demo; demoInstance.Demo = demo;
instance.StoragePath = storagePath ?? string.Empty; instance.StoragePath = storagePath ?? string.Empty;
// Check if we need to migrate the settings
DeleteSchedules();
//CheckAndMigrate();
var services = new ServiceCollection(); var services = new ServiceCollection();
services.ConfigureDatabases(null); services.ConfigureDatabases(null);
@ -67,6 +65,8 @@ namespace Ombi
var config = settingsDb.ApplicationConfigurations.ToList(); var config = settingsDb.ApplicationConfigurations.ToList();
var url = config.FirstOrDefault(x => x.Type == ConfigurationTypes.Url); var url = config.FirstOrDefault(x => x.Type == ConfigurationTypes.Url);
var dbBaseUrl = config.FirstOrDefault(x => x.Type == ConfigurationTypes.BaseUrl); var dbBaseUrl = config.FirstOrDefault(x => x.Type == ConfigurationTypes.BaseUrl);
var securityToken = config.FirstOrDefault(x => x.Type == ConfigurationTypes.SecurityToken);
CheckSecurityToken(securityToken, settingsDb, instance);
if (url == null) if (url == null)
{ {
url = new ApplicationConfiguration url = new ApplicationConfiguration
@ -136,18 +136,25 @@ namespace Ombi
} }
} }
private static void DeleteSchedules() private static void CheckSecurityToken(ApplicationConfiguration securityToken, SettingsContext ctx, StartupSingleton instance)
{ {
try if (securityToken == null || string.IsNullOrEmpty(securityToken.Value))
{ {
if (File.Exists("Schedules.db")) securityToken = new ApplicationConfiguration
{
Type = ConfigurationTypes.SecurityToken,
Value = Guid.NewGuid().ToString("N")
};
using (var tran = ctx.Database.BeginTransaction())
{ {
File.Delete("Schedules.db"); ctx.ApplicationConfigurations.Add(securityToken);
ctx.SaveChanges();
tran.Commit();
} }
} }
catch (Exception)
{ instance.SecurityKey = securityToken.Value;
}
} }
public static IHostBuilder CreateHostBuilder(string[] args) => public static IHostBuilder CreateHostBuilder(string[] args) =>

@ -22,7 +22,7 @@
}, },
"Ombi": { "Ombi": {
"commandName": "Project", "commandName": "Project",
"commandLineArgs": "--host http://localhost:3577 --baseurl /ombi", "commandLineArgs": "--host http://localhost:3577 ",
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Development"
}, },

@ -35,7 +35,7 @@ namespace Ombi
{ {
public class Startup public class Startup
{ {
public static StoragePathSingleton StoragePath => StoragePathSingleton.Instance; public static StartupSingleton StoragePath => StartupSingleton.Instance;
public Startup(IWebHostEnvironment env) public Startup(IWebHostEnvironment env)
{ {
@ -164,7 +164,7 @@ namespace Ombi
var baseUrl = appConfig.Get(ConfigurationTypes.BaseUrl); var baseUrl = appConfig.Get(ConfigurationTypes.BaseUrl);
if (baseUrl != null) if (baseUrl != null)
{ {
if (baseUrl.Value.HasValue() && settings.BaseUrl != baseUrl.Value) if (baseUrl.Value.HasValue())
{ {
settings.BaseUrl = baseUrl.Value; settings.BaseUrl = baseUrl.Value;
ombiService.SaveSettings(settings); ombiService.SaveSettings(settings);

Loading…
Cancel
Save