This commit is contained in:
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
@@ -45,7 +45,7 @@
|
|||||||
//"AYANOVA_LOG_LEVEL": "Debug",
|
//"AYANOVA_LOG_LEVEL": "Debug",
|
||||||
"AYANOVA_DEFAULT_TRANSLATION": "en",
|
"AYANOVA_DEFAULT_TRANSLATION": "en",
|
||||||
//TRANSLATION MUST BE en for Integration TESTING
|
//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_DB_CONNECTION": "Server=localhost;Username=postgres;Password=raven;Database=AyaNova;",
|
||||||
"AYANOVA_USE_URLS": "http://*:7575;",
|
"AYANOVA_USE_URLS": "http://*:7575;",
|
||||||
"AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles",
|
"AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles",
|
||||||
|
|||||||
@@ -7,6 +7,6 @@ namespace AyaNova.Models
|
|||||||
{
|
{
|
||||||
public long Id { get; set; }
|
public long Id { get; set; }
|
||||||
public string Key { get; set; }
|
public string Key { get; set; }
|
||||||
public Guid DbId { get; set; }
|
public string DbId { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,11 +11,9 @@ namespace AyaNova.Models
|
|||||||
{
|
{
|
||||||
[Required]
|
[Required]
|
||||||
[Key]
|
[Key]
|
||||||
public Guid Id { get; set; }
|
public string Id { get; set; }
|
||||||
public int Schema { get; set; }
|
public int Schema { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//ef core requires this
|
//ef core requires this
|
||||||
public SchemaVersion() { }
|
public SchemaVersion() { }
|
||||||
|
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ namespace AyaNova.Models
|
|||||||
{
|
{
|
||||||
public RequestTrial()
|
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]
|
[Required]
|
||||||
public Guid DbId { get; set; }
|
public string DbId { get; set; }
|
||||||
[Required, EmailAddress]
|
[Required, EmailAddress]
|
||||||
public string Email { get; set; }
|
public string Email { get; set; }
|
||||||
[Required]
|
[Required]
|
||||||
|
|||||||
@@ -173,10 +173,10 @@ namespace AyaNova.Util
|
|||||||
using (var cm = ct.Database.GetDbConnection().CreateCommand())
|
using (var cm = ct.Database.GetDbConnection().CreateCommand())
|
||||||
{
|
{
|
||||||
await ct.Database.OpenConnectionAsync();
|
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();
|
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 cm.ExecuteNonQueryAsync();
|
||||||
|
|
||||||
await ct.Database.CloseConnectionAsync();
|
await ct.Database.CloseConnectionAsync();
|
||||||
@@ -351,7 +351,7 @@ $BODY$;
|
|||||||
LogUpdateMessage(log);
|
LogUpdateMessage(log);
|
||||||
|
|
||||||
//Add user table
|
//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);
|
await SetSchemaLevelAsync(++currentSchema);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ namespace AyaNova.Core
|
|||||||
private static AyaNovaLicenseKey _ActiveLicense = new AyaNovaLicenseKey();
|
private static AyaNovaLicenseKey _ActiveLicense = new AyaNovaLicenseKey();
|
||||||
|
|
||||||
//The license dbid, separate from teh server dbid
|
//The license dbid, separate from teh server dbid
|
||||||
private static Guid LicenseDbId { get; set; }
|
private static string LicenseDbId { get; set; }
|
||||||
|
|
||||||
#region license classes
|
#region license classes
|
||||||
|
|
||||||
@@ -246,7 +246,7 @@ namespace AyaNova.Core
|
|||||||
public string LicenseFormat { get; set; }
|
public string LicenseFormat { get; set; }
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
public string RegisteredTo { get; set; }
|
public string RegisteredTo { get; set; }
|
||||||
public Guid DbId { get; set; }
|
public string DbId { get; set; }
|
||||||
public DateTime LicenseExpiration { get; set; }
|
public DateTime LicenseExpiration { get; set; }
|
||||||
public DateTime MaintenanceExpiration { get; set; }
|
public DateTime MaintenanceExpiration { get; set; }
|
||||||
public List<LicenseFeature> Features { get; set; }
|
public List<LicenseFeature> Features { get; set; }
|
||||||
@@ -295,7 +295,7 @@ namespace AyaNova.Core
|
|||||||
#region Exposed properties
|
#region Exposed properties
|
||||||
|
|
||||||
//The database id value stored in the schema table
|
//The database id value stored in the schema table
|
||||||
internal static Guid ServerDbId { get; private set; }
|
internal static string ServerDbId { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Fetch a summary of the license key for displaying to the end user
|
/// Fetch a summary of the license key for displaying to the end user
|
||||||
@@ -452,7 +452,7 @@ namespace AyaNova.Core
|
|||||||
{
|
{
|
||||||
trialRequest.DbId = ServerDbId;
|
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";
|
string sUrl = $"{LICENSE_SERVER_URL}rvr";
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -489,11 +489,11 @@ namespace AyaNova.Core
|
|||||||
internal static async Task<string> FetchKeyAsync(AyaNova.Api.ControllerHelpers.ApiServerState apiServerState, AyContext ct, ILogger log, bool calledFromInternalJob)
|
internal static async Task<string> FetchKeyAsync(AyaNova.Api.ControllerHelpers.ApiServerState apiServerState, AyContext ct, ILogger log, bool calledFromInternalJob)
|
||||||
{
|
{
|
||||||
if (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
|
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
|
try
|
||||||
{
|
{
|
||||||
// string ResponseText = await ServiceProviderProvider.HttpClientFactory.CreateClient().GetStringAsync(sUrl);
|
// 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
|
//First fetch the schema db id for the servers database, the license must match
|
||||||
var schema = await ct.SchemaVersion.AsNoTracking().SingleOrDefaultAsync();
|
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
|
//cryptic message deliberately, this is probably caused by someone trying to circumvent licensing
|
||||||
var msg = "E1030 - Database integrity check failed (2). Contact support.";
|
var msg = "E1030 - Database integrity check failed (2). Contact support.";
|
||||||
@@ -603,7 +604,8 @@ namespace AyaNova.Core
|
|||||||
}
|
}
|
||||||
|
|
||||||
//ensure DB ID
|
//ensure DB ID
|
||||||
if (ldb.DbId == Guid.Empty)
|
// if (ldb.DbId == Guid.Empty)
|
||||||
|
if (string.IsNullOrWhiteSpace(ldb.DbId ))
|
||||||
{
|
{
|
||||||
ldb.DbId = ServerDbId;
|
ldb.DbId = ServerDbId;
|
||||||
//Convert the no tracking record fetched above to tracking
|
//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");
|
throw new ApplicationException($"E1020 - License.Parse -> License key format {key.LicenseFormat} not recognized");
|
||||||
key.Id = (string)token.SelectToken("Key.Id");
|
key.Id = (string)token.SelectToken("Key.Id");
|
||||||
key.RegisteredTo = (string)token.SelectToken("Key.RegisteredTo");
|
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)
|
if (key.DbId != ServerDbId)
|
||||||
throw new ApplicationException($"E1020 - License.Parse -> License key does not match this server");
|
throw new ApplicationException($"E1020 - License.Parse -> License key does not match this server");
|
||||||
key.LicenseExpiration = (DateTime)token.SelectToken("Key.LicenseExpiration");
|
key.LicenseExpiration = (DateTime)token.SelectToken("Key.LicenseExpiration");
|
||||||
|
|||||||
Reference in New Issue
Block a user