This commit is contained in:
2022-06-22 18:04:31 +00:00
parent 4102809635
commit b14b36c6e9

View File

@@ -26,14 +26,14 @@ namespace AyaNovaQBI
internal static string JWT { get; set; }
// internal static long AyaNovaUserId { get; set; } //probably don't need this, if I do then some code will need to be added to decode the JWT or at the server to get my currently logged in USER ID
// internal static long AyaNovaUserId { get; set; } //probably don't need this, if I do then some code will need to be added to decode the JWT or at the server to get my currently logged in USER ID
internal static string AyaNovaUserName { get; set; }
internal static AuthorizationRoles AyaNovaUserRoles { get; set; }
internal static UserType AyaNovaUserType { get; set; }
internal static AyaNovaLicense ALicense { get; set; } = null;
public static void InitClient()
@@ -100,15 +100,14 @@ namespace AyaNovaQBI
var InnerErr = "";
if (ex.InnerException != null)
InnerErr = ex.InnerException.Message;
throw new Exception("Authentication error, route: AUTH\r\nError:" + Err + "\r\nInner error:" + InnerErr);
}
//ApiResponse a = await PostAsync("auth", creds.ToString());
var a = new ApiResponse() { HttpResponse = response, ObjectResponse = Parse(await response.Content.ReadAsStringAsync()) };
if (response.IsSuccessStatusCode)
{
var a = new ApiResponse() { HttpResponse = response, ObjectResponse = Parse(await response.Content.ReadAsStringAsync()) };
bool tfa = a.ObjectResponse["data"]["tfa"].Value<bool>();
if (tfa == true)
{
@@ -131,14 +130,14 @@ namespace AyaNovaQBI
var tfaResponse = await TryPostAsync("auth/tfa-authenticate", tfaCreds.ToString(Newtonsoft.Json.Formatting.None));//trypost is no delay
if (ProcessLoginResponse(tfaResponse)) return true;
}
catch(Exception ex)
catch (Exception ex)
{
if (!ex.Message.Contains("2003"))//if not an authentication error (bad pin) then throw it back up for display
throw ex;
//otherwise eat it and let them re-enter the pin again to mirror how ayanova web client works
}
}
} while (true);
@@ -148,8 +147,27 @@ namespace AyaNovaQBI
return ProcessLoginResponse(a);
}
}
else
{
/*
"error": {
"code": "2001",
"message": "\"E1020 - License key expired 2022-06-20 5:00 PM\r\nLogin as SuperUser to start evaluation / install license\""
}
*/
if (a.ObjectResponse != null && a.ObjectResponse.ContainsKey("error"))
{
var errCode = a.ObjectResponse["error"]["code"].Value<string>();
if (errCode.Contains("2003")) return false;//simple authentication error
var errMessage = a.ObjectResponse["error"]["message"].Value<string>();
throw new Exception($"Code: {errCode} - {errMessage}");
}
return false;
}
return false;
}
private static bool ProcessLoginResponse(ApiResponse a)
@@ -159,12 +177,12 @@ namespace AyaNovaQBI
{
return false;
}
if(a.ObjectResponse["data"]["l"].Value<bool>())//license lockout
if (a.ObjectResponse["data"]["l"].Value<bool>())//license lockout
{
throw new Exception("Server login from QBI is disabled due to AyaNova license issue");
}
JWT = a.ObjectResponse["data"]["token"].Value<string>();
JWT = a.ObjectResponse["data"]["token"].Value<string>();
AyaNovaUserName = a.ObjectResponse["data"]["name"].Value<string>();
AyaNovaUserRoles = (AuthorizationRoles)(int.Parse(a.ObjectResponse["data"]["roles"].Value<string>()));
@@ -463,11 +481,15 @@ namespace AyaNovaQBI
//Get license
var r = await GetAsync("license");
ALicense = r.ObjectResponse["data"]["license"].ToObject < AyaNovaLicense>();
ALicense = r.ObjectResponse["data"]["license"].ToObject<AyaNovaLicense>();
//UNEXPIRED AYANOVA LICENSE?
todo check this
if (ALicense.licenseWillExpire && ALicense.licenseExpiration < DateTime.UtcNow)
{
initErrors.AppendLine($"AyaNova license has expired {ALicense.licenseExpiration.ToLocalTime().ToString("g")}");
return false;
}
//QBI LICENSED?
@@ -477,7 +499,7 @@ namespace AyaNovaQBI
return false;
}
//check if build date is within licensed date (how did I do that automated build date thing?)
// copy timestamp.cs and the createtimestamp.exe utility from v7 qbi and create build event to run it here and do same thing
//check that AyaNova version matches required minimum for this QBI (