From eec26f92de91fc13aa6b86208456df88ebaf15b5 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Wed, 3 Mar 2021 00:50:15 +0000 Subject: [PATCH] --- .vscode/launch.json | 2 +- .../ControllerHelpers/ApiServerState.cs | 24 ++++++++++++------- server/AyaNova/Controllers/AuthController.cs | 8 +++---- .../Controllers/ServerStateController.cs | 23 +++++++++++++++++- server/AyaNova/resource/de.json | 1 + server/AyaNova/resource/en.json | 1 + server/AyaNova/resource/es.json | 1 + server/AyaNova/resource/fr.json | 1 + server/AyaNova/util/DbUtil.cs | 7 +++++- 9 files changed, 53 insertions(+), 15 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 0e2049e9..8fd97968 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -53,7 +53,7 @@ "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", "AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", "AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles", - "AYANOVA_SERVER_TEST_MODE": "false", + "AYANOVA_SERVER_TEST_MODE": "true", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small", "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7", "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\" diff --git a/server/AyaNova/ControllerHelpers/ApiServerState.cs b/server/AyaNova/ControllerHelpers/ApiServerState.cs index c4a995ee..4a1fe087 100644 --- a/server/AyaNova/ControllerHelpers/ApiServerState.cs +++ b/server/AyaNova/ControllerHelpers/ApiServerState.cs @@ -123,7 +123,7 @@ namespace AyaNova.Api.ControllerHelpers throw new System.NotSupportedException("ApiServerState:ApiErrorCode - No error code is associated with server state OPEN"); case ServerState.OpsOnly: return ApiErrorCode.API_OPS_ONLY; - case ServerState.MigrateMode: + case ServerState.MigrateMode: return ApiErrorCode.API_MIGRATE_MODE; case ServerState.Closed: return ApiErrorCode.API_CLOSED; @@ -173,6 +173,14 @@ namespace AyaNova.Api.ControllerHelpers } } + public bool IsMigrateMode + { + get + { + return _currentState == ServerState.MigrateMode && !SYSTEM_LOCK; + } + } + public bool IsOpen { get @@ -190,13 +198,13 @@ namespace AyaNova.Api.ControllerHelpers } } - public bool IsOpenOrOpsOnly - { - get - { - return (IsOpen || IsOpsOnly) && !SYSTEM_LOCK; - } - } + // public bool IsOpenOrOpsOnly + // { + // get + // { + // return (IsOpen || IsOpsOnly) && !SYSTEM_LOCK; + // } + // } public bool IsSystemLocked { diff --git a/server/AyaNova/Controllers/AuthController.cs b/server/AyaNova/Controllers/AuthController.cs index 8e4131dc..0ea82be5 100644 --- a/server/AyaNova/Controllers/AuthController.cs +++ b/server/AyaNova/Controllers/AuthController.cs @@ -168,10 +168,10 @@ namespace AyaNova.Api.Controllers { //Valid password, user is effectively authorized at this point - //check if server closed - //if it is it means we got here only because there is no license - //and only *the* SuperUser account can login now - if (serverState.IsClosed) + //check if server available to SuperUser account only (closed or migrate mode) + //if it is it means we got here either because there is no license + //and only *the* SuperUser account can login now or we're in migrate mode + if (serverState.IsClosed || serverState.IsMigrateMode) { //if not SuperUser account then boot closed //SuperUser account is always ID 1 diff --git a/server/AyaNova/Controllers/ServerStateController.cs b/server/AyaNova/Controllers/ServerStateController.cs index d3ee69d7..90459ff7 100644 --- a/server/AyaNova/Controllers/ServerStateController.cs +++ b/server/AyaNova/Controllers/ServerStateController.cs @@ -43,7 +43,7 @@ namespace AyaNova.Api.Controllers /// /// Get server state /// - /// Current server state (Closed, OpsOnly, Open) + /// Current server state (Closed, MigrateMode, OpsOnly, Open) [HttpGet] public ActionResult Get() { @@ -79,8 +79,29 @@ namespace AyaNova.Api.Controllers if (desiredState == ApiServerState.ServerState.Closed) return BadRequest(new ApiErrorResponse(ApiErrorCode.VALIDATION_INVALID_VALUE, null, "Invalid state - must be one of \"OpsOnly\", \"MigrateMode\" or \"Open\"")); + var TransId = UserTranslationIdFromContext.Id(HttpContext.Items); + log.LogInformation($"ServerState change request by user {UserNameFromContext.Name(HttpContext.Items)} from current state of \"{serverState.GetState().ToString()}\" to \"{desiredState.ToString()}-{state.Reason}\""); + //Add a message if user didn't enter one so other users know why they can't login + if (string.IsNullOrWhiteSpace(state.Reason)) + { + switch (desiredState) + { + case ApiServerState.ServerState.Open: + break; + case ApiServerState.ServerState.MigrateMode: + state.Reason += await TranslationBiz.GetTranslationStaticAsync("ServerStateLoginRestricted", TransId, ct) + " " + await TranslationBiz.GetTranslationStaticAsync("ServerStateMigrateMode", TransId, ct); + break; + case ApiServerState.ServerState.OpsOnly: + state.Reason += await TranslationBiz.GetTranslationStaticAsync("ServerStateLoginRestricted", TransId, ct) + " " + await TranslationBiz.GetTranslationStaticAsync("ServerStateOps", TransId, ct); + break; + case ApiServerState.ServerState.Closed: + state.Reason += await TranslationBiz.GetTranslationStaticAsync("ServerStateLoginRestricted", TransId, ct) + " " + await TranslationBiz.GetTranslationStaticAsync("ErrorAPI2000", TransId, ct); + break; + } + } + serverState.SetState(desiredState, state.Reason); //Log diff --git a/server/AyaNova/resource/de.json b/server/AyaNova/resource/de.json index 5f3150ee..9e5838d8 100644 --- a/server/AyaNova/resource/de.json +++ b/server/AyaNova/resource/de.json @@ -1781,6 +1781,7 @@ "ServerStateOps": "Nur Systembetrieb", "ServerStateMigrateMode": "Server-Migrationsmodus", "ServerStateReason": "Grund", + "ServerStateLoginRestricted": "Anmeldung aufgrund der Serverstatuseinstellung eingeschränkt", "TooManyResults": "Zu viele Ergebnisse, um alle anzuzeigen", "NoResults": "Keine Ergebnisse", "EventTextra": "Anmerkungen", diff --git a/server/AyaNova/resource/en.json b/server/AyaNova/resource/en.json index 82e3e7f4..6a52c9ef 100644 --- a/server/AyaNova/resource/en.json +++ b/server/AyaNova/resource/en.json @@ -1781,6 +1781,7 @@ "ServerStateOps": "Server operations only", "ServerStateMigrateMode": "Server migration mode", "ServerStateReason": "Reason", + "ServerStateLoginRestricted": "Login restricted due to server state setting", "TooManyResults": "Too many results to show all", "NoResults": "No results", "EventTextra": "Notes", diff --git a/server/AyaNova/resource/es.json b/server/AyaNova/resource/es.json index 9835cf74..042597ab 100644 --- a/server/AyaNova/resource/es.json +++ b/server/AyaNova/resource/es.json @@ -1781,6 +1781,7 @@ "ServerStateOps": "Solo operaciones del sistema", "ServerStateMigrateMode": "Modo de migración del servidor", "ServerStateReason": "Razón", + "ServerStateLoginRestricted": "Inicio de sesión restringido debido a la configuración del estado del servidor", "TooManyResults": "Demasiados resultados para mostrar todos", "NoResults": "No hay resultados", "EventTextra": "Notas", diff --git a/server/AyaNova/resource/fr.json b/server/AyaNova/resource/fr.json index fdd891fd..42b1ced7 100644 --- a/server/AyaNova/resource/fr.json +++ b/server/AyaNova/resource/fr.json @@ -1781,6 +1781,7 @@ "ServerStateOps": "Opérations système uniquement", "ServerStateMigrateMode": "Mode de migration du serveur", "ServerStateReason": "Objectif", + "ServerStateLoginRestricted": "Connexion restreinte en raison du paramètre d'état du serveur", "TooManyResults": "Trop de résultats pour tout montrer", "NoResults": "Aucun résultat", "EventTextra": "Remarques", diff --git a/server/AyaNova/util/DbUtil.cs b/server/AyaNova/util/DbUtil.cs index 907bfc1c..c85d382a 100644 --- a/server/AyaNova/util/DbUtil.cs +++ b/server/AyaNova/util/DbUtil.cs @@ -340,7 +340,7 @@ namespace AyaNova.Util await EraseTableAsync("apmtemplateitem", conn); await EraseTableAsync("apmtemplate", conn); - + await EraseTableAsync("aquoteitem", conn); await EraseTableAsync("aquote", conn); await EraseTableAsync("aquotetemplateitem", conn); @@ -400,12 +400,17 @@ namespace AyaNova.Util cmd.CommandText = "ALTER SEQUENCE auser_id_seq RESTART WITH 2;"; await cmd.ExecuteNonQueryAsync(); + cmd.CommandText = "delete from \"adashboardview\" where userid <> 1;"; + await cmd.ExecuteNonQueryAsync(); + cmd.CommandText = $"ALTER SEQUENCE adashboardview_id_seq RESTART WITH 2;"; await cmd.ExecuteNonQueryAsync(); cmd.CommandText = "delete from \"apartwarehouse\" where id <> 1;"; await cmd.ExecuteNonQueryAsync(); + cmd.CommandText = $"ALTER SEQUENCE apartwarehouse_id_seq RESTART WITH 2;"; + await cmd.ExecuteNonQueryAsync(); } await conn.CloseAsync();