diff --git a/.vscode/launch.json b/.vscode/launch.json index 396abc9b..33155498 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -45,7 +45,7 @@ //"AYANOVA_LOG_LEVEL": "Debug", "AYANOVA_DEFAULT_TRANSLATION": "en", //TRANSLATION MUST BE en for Integration TESTING - //"AYANOVA_PERMANENTLY_ERASE_DATABASE": "true", + "AYANOVA_PERMANENTLY_ERASE_DATABASE": "true", "AYANOVA_DB_CONNECTION": "Server=localhost;Username=postgres;Password=raven;Database=AyaNova;", "AYANOVA_USE_URLS": "http://*:7575;", "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", diff --git a/server/AyaNova/models/License.cs b/server/AyaNova/models/License.cs index 10f7de31..ebf695a7 100644 --- a/server/AyaNova/models/License.cs +++ b/server/AyaNova/models/License.cs @@ -7,6 +7,6 @@ namespace AyaNova.Models { public long Id { get; set; } public string Key { get; set; } - public Guid DbId { get; set; } + public string DbId { get; set; } } } diff --git a/server/AyaNova/models/SchemaVersion.cs b/server/AyaNova/models/SchemaVersion.cs index 6bb1380a..0a8d0621 100644 --- a/server/AyaNova/models/SchemaVersion.cs +++ b/server/AyaNova/models/SchemaVersion.cs @@ -11,11 +11,9 @@ namespace AyaNova.Models { [Required] [Key] - public Guid Id { get; set; } + public string Id { get; set; } public int Schema { get; set; } - - //ef core requires this public SchemaVersion() { } diff --git a/server/AyaNova/models/dto/RequestTrial.cs b/server/AyaNova/models/dto/RequestTrial.cs index 5617b461..347524e0 100644 --- a/server/AyaNova/models/dto/RequestTrial.cs +++ b/server/AyaNova/models/dto/RequestTrial.cs @@ -7,10 +7,10 @@ namespace AyaNova.Models { public RequestTrial() { - DbId = Guid.Empty;//default this because it's coming from the client without a dbid as the server will set it before forwarding it on + DbId = string.Empty;//default this because it's coming from the client without a dbid as the server will set it before forwarding it on } [Required] - public Guid DbId { get; set; } + public string DbId { get; set; } [Required, EmailAddress] public string Email { get; set; } [Required] diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index ebc75d82..4c548e04 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -173,10 +173,10 @@ namespace AyaNova.Util using (var cm = ct.Database.GetDbConnection().CreateCommand()) { await ct.Database.OpenConnectionAsync(); - cm.CommandText = "CREATE TABLE aschemaversion (schema INTEGER NOT NULL, id uuid not null);"; + cm.CommandText = "CREATE TABLE aschemaversion (schema INTEGER NOT NULL, id text not null);"; await cm.ExecuteNonQueryAsync(); - cm.CommandText = $"insert into aschemaversion (schema, id) values (1,'{Guid.NewGuid()}');"; + cm.CommandText = $"insert into aschemaversion (schema, id) values (1,'{AyaNova.Util.Hasher.GenerateSalt()}');"; await cm.ExecuteNonQueryAsync(); await ct.Database.CloseConnectionAsync(); @@ -351,7 +351,7 @@ $BODY$; LogUpdateMessage(log); //Add user table - await ExecQueryAsync("CREATE TABLE alicense (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, dbid uuid, key text not null)"); + await ExecQueryAsync("CREATE TABLE alicense (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, dbid text, key text not null)"); await SetSchemaLevelAsync(++currentSchema); } diff --git a/server/AyaNova/util/License.cs b/server/AyaNova/util/License.cs index b08af55e..8542245b 100644 --- a/server/AyaNova/util/License.cs +++ b/server/AyaNova/util/License.cs @@ -66,7 +66,7 @@ namespace AyaNova.Core private static AyaNovaLicenseKey _ActiveLicense = new AyaNovaLicenseKey(); //The license dbid, separate from teh server dbid - private static Guid LicenseDbId { get; set; } + private static string LicenseDbId { get; set; } #region license classes @@ -246,7 +246,7 @@ namespace AyaNova.Core public string LicenseFormat { get; set; } public string Id { get; set; } public string RegisteredTo { get; set; } - public Guid DbId { get; set; } + public string DbId { get; set; } public DateTime LicenseExpiration { get; set; } public DateTime MaintenanceExpiration { get; set; } public List Features { get; set; } @@ -295,7 +295,7 @@ namespace AyaNova.Core #region Exposed properties //The database id value stored in the schema table - internal static Guid ServerDbId { get; private set; } + internal static string ServerDbId { get; private set; } /// /// Fetch a summary of the license key for displaying to the end user @@ -452,7 +452,7 @@ namespace AyaNova.Core { trialRequest.DbId = ServerDbId; - log.LogDebug($"Requesting trial license for DBID {LicenseDbId.ToString()}"); + log.LogDebug($"Requesting trial license for DBID {LicenseDbId}"); string sUrl = $"{LICENSE_SERVER_URL}rvr"; try { @@ -489,11 +489,11 @@ namespace AyaNova.Core internal static async Task FetchKeyAsync(AyaNova.Api.ControllerHelpers.ApiServerState apiServerState, AyContext ct, ILogger log, bool calledFromInternalJob) { if (calledFromInternalJob) - log.LogTrace($"Fetching license for DBID {LicenseDbId.ToString()} (called by job)"); + log.LogTrace($"Fetching license for DBID {LicenseDbId} (called by job)"); else - log.LogInformation($"Fetching license for DBID {LicenseDbId.ToString()}"); + log.LogInformation($"Fetching license for DBID {LicenseDbId}"); - string sUrl = $"{LICENSE_SERVER_URL}rvf/{LicenseDbId.ToString()}"; + string sUrl = $"{LICENSE_SERVER_URL}rvf/{LicenseDbId}"; try { // string ResponseText = await ServiceProviderProvider.HttpClientFactory.CreateClient().GetStringAsync(sUrl); @@ -579,7 +579,8 @@ namespace AyaNova.Core { //First fetch the schema db id for the servers database, the license must match var schema = await ct.SchemaVersion.AsNoTracking().SingleOrDefaultAsync(); - if (schema == null || schema.Id == Guid.Empty) + //if (schema == null || schema.Id == Guid.Empty) + if (schema == null || string.IsNullOrWhiteSpace(schema.Id) ) { //cryptic message deliberately, this is probably caused by someone trying to circumvent licensing var msg = "E1030 - Database integrity check failed (2). Contact support."; @@ -603,7 +604,8 @@ namespace AyaNova.Core } //ensure DB ID - if (ldb.DbId == Guid.Empty) + // if (ldb.DbId == Guid.Empty) + if (string.IsNullOrWhiteSpace(ldb.DbId )) { ldb.DbId = ServerDbId; //Convert the no tracking record fetched above to tracking @@ -803,7 +805,7 @@ EQIDAQAB throw new ApplicationException($"E1020 - License.Parse -> License key format {key.LicenseFormat} not recognized"); key.Id = (string)token.SelectToken("Key.Id"); key.RegisteredTo = (string)token.SelectToken("Key.RegisteredTo"); - key.DbId = (Guid)token.SelectToken("Key.DBID"); + key.DbId = (string)token.SelectToken("Key.DBID"); if (key.DbId != ServerDbId) throw new ApplicationException($"E1020 - License.Parse -> License key does not match this server"); key.LicenseExpiration = (DateTime)token.SelectToken("Key.LicenseExpiration");