From 2293933953790340334d66bc068f8555d5266adf Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Sat, 13 Jun 2020 21:42:57 +0000 Subject: [PATCH] --- .../AyaNova/Controllers/LicenseController.cs | 33 +++++++++++++++---- server/AyaNova/util/License.cs | 13 +++++--- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/server/AyaNova/Controllers/LicenseController.cs b/server/AyaNova/Controllers/LicenseController.cs index 5dc0101a..06974bc1 100644 --- a/server/AyaNova/Controllers/LicenseController.cs +++ b/server/AyaNova/Controllers/LicenseController.cs @@ -188,14 +188,35 @@ namespace AyaNova.Api.Controllers { return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, null, "There is an active registered license. Only an unlicensed or trial license database can request a trial key.")); } + try + { + //Send the request to RockFish here (or at least start the job to do it in which case return Accepted instead of no content and update comment above) + var ret = await Core.License.RequestTrialAsync(trialRequest, log); + if (ret == "ok") + { + //Log + await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserIdFromContext.Id(HttpContext.Items), 0, AyaType.License, AyaEvent.LicenseTrialRequest), ct); + } + return Ok(ret); + } + catch (Exception ex) + { + Exception rootex = ex; + while (rootex.InnerException != null) + { + rootex = rootex.InnerException; + } - //Send the request to RockFish here (or at least start the job to do it in which case return Accepted instead of no content and update comment above) - var ret = await Core.License.RequestTrialAsync(trialRequest, log); + if (rootex.Message.Contains("E1020")) + { + return BadRequest(new ApiErrorResponse(ApiErrorCode.INVALID_OPERATION, "LICENSE_KEY", rootex.Message)); + } + else + { + throw ex; + } - //Log - await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserIdFromContext.Id(HttpContext.Items), 0, AyaType.License, AyaEvent.LicenseTrialRequest), ct); - - return Ok(ApiOkResponse.Response(ret)); + } } diff --git a/server/AyaNova/util/License.cs b/server/AyaNova/util/License.cs index cd3fed22..39ba3a60 100644 --- a/server/AyaNova/util/License.cs +++ b/server/AyaNova/util/License.cs @@ -14,6 +14,7 @@ using Microsoft.EntityFrameworkCore; using Org.BouncyCastle.Security; using Org.BouncyCastle.OpenSsl; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; @@ -456,7 +457,7 @@ namespace AyaNova.Core if (res.IsSuccessStatusCode) { if (string.IsNullOrWhiteSpace(responseText)) - return "Accepted"; + return "ok"; else return responseText; } @@ -491,10 +492,13 @@ namespace AyaNova.Core if (res.IsSuccessStatusCode) { var responseText = await res.Content.ReadAsStringAsync(); - AyaNovaLicenseKey ParsedKey = Parse(responseText, log); + var responseJson=JObject.Parse(responseText); + var keyText=responseJson["data"]["key"].Value(); + + AyaNovaLicenseKey ParsedKey = Parse(keyText, log); if (ParsedKey != null) { - await InstallAsync(responseText, ParsedKey, apiServerState, ct, log); + await InstallAsync(keyText, ParsedKey, apiServerState, ct, log); return "ok"; } return $"E1020 - Error fetching license key: No key was returned"; @@ -670,7 +674,7 @@ namespace AyaNova.Core CurrentInDbKeyRecord.Key = RawTextNewKey; //LOOKAT: reason, resultcode etc //There is similar block related to this in ayschema for db schema version 8 - ct.SaveChanges(); + await ct.SaveChangesAsync(); } catch (Exception ex) { @@ -718,6 +722,7 @@ namespace AyaNova.Core string keyNoWS = System.Text.RegularExpressions.Regex.Replace(StringUtil.Extract(k, "[KEY", "KEY]").Trim(), "(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+", "$1"); string keySig = StringUtil.Extract(k, "[SIGNATURE", "SIGNATURE]").Trim(); +//bugbug second time around after installing key, keysig has cr/lf characters in it after this extract method runs, not sure wtf as it isnt there the first time #region Check Signature