From 467c0acc590997279a197fc4447ae499c49a137e Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Mon, 15 Aug 2022 21:02:01 +0000 Subject: [PATCH] case 4170 --- server/AyaNova/Startup.cs | 11 ++++++- server/AyaNova/util/DbUtil.cs | 39 ++++++++++++++++++++++++- server/AyaNova/util/ServerBootConfig.cs | 25 +++++++++++----- 3 files changed, 65 insertions(+), 10 deletions(-) diff --git a/server/AyaNova/Startup.cs b/server/AyaNova/Startup.cs index 493b21aa..a6b24da0 100644 --- a/server/AyaNova/Startup.cs +++ b/server/AyaNova/Startup.cs @@ -577,6 +577,8 @@ namespace AyaNova AySchema.CheckAndUpdateAsync(dbContext, _newLog).Wait(); } + + var dbServerVersionInfo = DbUtil.DBServerVersion(dbContext); var dbServerRunTimeParameters = DbUtil.DBServerRunTimeParameters(dbContext); //Log server version @@ -585,12 +587,19 @@ namespace AyaNova //db server extended parameters _newLog.LogTrace($"Database server runtime parameters{Environment.NewLine}{string.Join(Environment.NewLine, dbServerRunTimeParameters)}"); + //log each item individually from runtime parameters ServerBootConfig.DBSERVER_DIAGNOSTIC_INFO.Add("DB SERVER", dbServerVersionInfo); foreach (var p in dbServerRunTimeParameters) ServerBootConfig.DBSERVER_DIAGNOSTIC_INFO.Add(p.Key, p.Value); - //log each item individually from runtime parameters + + //case 4170 + if (ServerBootConfig.AYANOVA_REMOVE_LICENSE_FROM_DB) + { + _newLog.LogWarning("AYANOVA_REMOVE_LICENSE_FROM_DB has been set - removing license from database"); + Util.DbUtil.RemoveLicenseFromDB(_newLog); + } //Initialize license unless it doesn't exist yet then wait and do it after schema update and fingerprint diff --git a/server/AyaNova/util/DbUtil.cs b/server/AyaNova/util/DbUtil.cs index beed986e..b947af7e 100644 --- a/server/AyaNova/util/DbUtil.cs +++ b/server/AyaNova/util/DbUtil.cs @@ -302,11 +302,48 @@ namespace AyaNova.Util } + //case 4170 + /////////////////////////////////////////// + // Remove license key from database + // triggered by AYANOVA_REMOVE_LICENSE_FROM_DB flag on boot + // This is for potential edge cases when we need + // to fix a weird license issue for a customer remotely + // by issuing a new license when they can't boot due to a bad license + // e.g. they upgrade and no maint so get too new error on boot + // want to renew and keep working so they contact us, buy a maintenance + // and need to have it fetch. (or some other unknown future issue) + // + internal static void RemoveLicenseFromDB(ILogger _log) + { + _log.LogInformation("Removing license from database \"{0}\"", _dbName); + + //clear all connections so that the database can be dropped + Npgsql.NpgsqlConnection.ClearAllPools(); + + using (var conn = new Npgsql.NpgsqlConnection(_dbConnectionString)) + { + conn.Open(); + + // Create the database desired + using (var cmd = new Npgsql.NpgsqlCommand()) + { + cmd.Connection = conn; + cmd.CommandText = "delete from alicense;"; + cmd.ExecuteNonQuery(); + _log.LogDebug("License removed"); + } + conn.Close(); + } + + + } + + ///////////////////////////////////////////////////////// // Erase all user entered data from the db // This is called by seeder for trial seeding purposes // and by v8 migrate and by license controller when erasing db - internal static async Task EmptyBizDataFromDatabaseForSeedingOrImportingAsync(ILogger _log, Guid jobIdToKeep, bool isMigrate=false) + internal static async Task EmptyBizDataFromDatabaseForSeedingOrImportingAsync(ILogger _log, Guid jobIdToKeep, bool isMigrate = false) { bool forSeeding = jobIdToKeep != Guid.Empty; diff --git a/server/AyaNova/util/ServerBootConfig.cs b/server/AyaNova/util/ServerBootConfig.cs index ccaf9b83..ba9982fb 100644 --- a/server/AyaNova/util/ServerBootConfig.cs +++ b/server/AyaNova/util/ServerBootConfig.cs @@ -62,13 +62,17 @@ namespace AyaNova.Util internal static string AYANOVA_JWT_SECRET { get; set; } internal static string AYANOVA_USE_URLS { get; set; } internal static int AYANOVA_REPORT_RENDERING_TIMEOUT { get; set; } - + //DATABASE internal static string AYANOVA_DB_CONNECTION { get; set; } //** Not intended for end users internal static bool AYANOVA_PERMANENTLY_ERASE_DATABASE { get; set; } + //LICENSE EMERGENCY ISSUE GIVES US OPTIONS TO ALLOW BOOT WITHOUT ERASING DATA SO WE CAN ISSUE THEM A REPLACEMENT LICENSE + //case 4170 + internal static bool AYANOVA_REMOVE_LICENSE_FROM_DB { get; set; } + //FILE FOLDERS internal static string AYANOVA_ATTACHMENT_FILES_PATH { get; set; } internal static string AYANOVA_BACKUP_FILES_PATH { get; set; } @@ -81,7 +85,7 @@ namespace AyaNova.Util internal static string AYANOVA_REPORT_RENDER_BROWSER_PATH { get; set; } //REPORT RENDERING BROWSER PARAMS internal static string AYANOVA_REPORT_RENDER_BROWSER_PARAMS { get; set; } - + //LOGGING internal static string AYANOVA_LOG_PATH { get; set; } @@ -175,23 +179,28 @@ namespace AyaNova.Util //REPORT RENDERING //RENDER ENGINE PATH - AYANOVA_REPORT_RENDER_BROWSER_PATH = ActualFullPath(config.GetValue("AYANOVA_REPORT_RENDER_BROWSER_PATH")); - - //RENDER ENGINE PARAMS - AYANOVA_REPORT_RENDER_BROWSER_PARAMS = config.GetValue("AYANOVA_REPORT_RENDER_BROWSER_PARAMS"); + AYANOVA_REPORT_RENDER_BROWSER_PATH = ActualFullPath(config.GetValue("AYANOVA_REPORT_RENDER_BROWSER_PATH")); + + //RENDER ENGINE PARAMS + AYANOVA_REPORT_RENDER_BROWSER_PARAMS = config.GetValue("AYANOVA_REPORT_RENDER_BROWSER_PARAMS"); //PROCESS CONTROL int? nTemp = config.GetValue("AYANOVA_REPORT_RENDERING_TIMEOUT"); AYANOVA_REPORT_RENDERING_TIMEOUT = (null == nTemp) ? 5 : (int)nTemp;//default if (AYANOVA_REPORT_RENDERING_TIMEOUT < 1) AYANOVA_REPORT_RENDERING_TIMEOUT = 1; //one minute minimum timeout - - + + //DB AYANOVA_DB_CONNECTION = config.GetValue("AYANOVA_DB_CONNECTION"); bTemp = config.GetValue("AYANOVA_PERMANENTLY_ERASE_DATABASE"); AYANOVA_PERMANENTLY_ERASE_DATABASE = (null == bTemp) ? false : (bool)bTemp; + //LICENSE REMOVER + //case 4170 + bTemp = config.GetValue("AYANOVA_REMOVE_LICENSE_FROM_DB"); + AYANOVA_REMOVE_LICENSE_FROM_DB = (null == bTemp) ? false : (bool)bTemp; + //FOLDERS string DataFolderPath = ActualFullPath(config.GetValue("AYANOVA_DATA_PATH"));