From 52d63d12f0bc4adea512e9f606c64c3bc1c32c32 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 2 Feb 2022 16:26:40 +0100 Subject: [PATCH] Fix procedure attivazione/disattivazione licenze utente --- .../mod_adminDipendenti.ascx.cs | 4 + GPW_Data/licenzeGPW.cs | 1033 +++++++++-------- 2 files changed, 526 insertions(+), 511 deletions(-) diff --git a/GPW_Admin/WebUserControls/mod_adminDipendenti.ascx.cs b/GPW_Admin/WebUserControls/mod_adminDipendenti.ascx.cs index 8a3ec60..3797cc1 100644 --- a/GPW_Admin/WebUserControls/mod_adminDipendenti.ascx.cs +++ b/GPW_Admin/WebUserControls/mod_adminDipendenti.ascx.cs @@ -495,11 +495,15 @@ namespace GPW_Admin.WebUserControls private static void fullRefresh() { + licenzeGPW.resetLicenseData(); // eseguo call di recupero da online bool refreshApp = licenzeGPW.RefreshAppInfo().Result; bool refreshAct = licenzeGPW.RefreshActInfo().Result; bool refreshPayload = licenzeGPW.RefreshPayload().Result; //bool refreshLic = licenzeGPW.RefreshLicInfo().Result; + //if (refreshApp && refreshAct && refreshPayload) + //{ + //} } private void fixVisibility() diff --git a/GPW_Data/licenzeGPW.cs b/GPW_Data/licenzeGPW.cs index a068e11..216e3fa 100644 --- a/GPW_Data/licenzeGPW.cs +++ b/GPW_Data/licenzeGPW.cs @@ -25,22 +25,84 @@ namespace GPW_data //private static string apiUrl = "https://localhost:44351/"; private static string apiUrl = "https://liman.egalware.com/ELM.API/"; - private static string rkeyInstall = memLayer.ML.redHash($"LiMan:Install"); - private static string rkeyNumInstall = memLayer.ML.redHash($"LiMan:NumInstall"); - private static string rkeyAuth = memLayer.ML.redHash($"LiMan:Auth"); - private static string rkeyMKey = memLayer.ML.redHash($"LiMan:rkeyMKey"); + private static int cacheTTL = 60 * 5; private static string rkeyActInfo = memLayer.ML.redHash($"LiMan:ActInfo"); - private static string rkeyDipAct = memLayer.ML.redHash($"LiMan:DipAct"); private static string rkeyAppInfo = memLayer.ML.redHash($"LiMan:AppInfo"); + private static string rkeyAuth = memLayer.ML.redHash($"LiMan:Auth"); + private static string rkeyDipAct = memLayer.ML.redHash($"LiMan:DipAct"); + private static string rkeyInstall = memLayer.ML.redHash($"LiMan:Install"); private static string rkeyLicInfo = memLayer.ML.redHash($"LiMan:LicInfo"); + private static string rkeyMKey = memLayer.ML.redHash($"LiMan:rkeyMKey"); + private static string rkeyNumInstall = memLayer.ML.redHash($"LiMan:NumInstall"); private static string rkeyPayload = memLayer.ML.redHash($"LiMan:Payload"); private static string rkeyTickets = memLayer.ML.redHash($"LiMan:Tickets"); private static string rkeyVetoRefPayL = memLayer.ML.redHash($"LiMan:VetoRefPayL"); - private static int cacheTTL = 60 * 5; - #endregion Private Fields + #region Private Properties + + /// + /// Info applicativo corrente (da cache con eventuale recupero online...) + /// + private static LiManObj.ApplicativoDTO InfoApplicativo + { + get + { + LiManObj.ApplicativoDTO answ = new LiManObj.ApplicativoDTO(); + // cerco da cache + string rawData = memLayer.ML.getRSV(rkeyLicInfo); + // se no ci fosse --> refresh online! + if (string.IsNullOrEmpty(rawData)) + { + var fatto = RefreshAppInfo().Result; + if (fatto) + { + rawData = memLayer.ML.getRSV(rkeyLicInfo); + } + } + if (!string.IsNullOrEmpty(rawData)) + { + try + { + // verifico se ho 1 risultato o molti...se inizia per "[" è molti + if (rawData.StartsWith("[")) + { + // POTREBBE darmi + di 1 risultato, prendo + recente... + List infoList = JsonConvert.DeserializeObject>(rawData); + if (infoList != null) + { + answ = infoList.OrderByDescending(x => x.Scadenza).FirstOrDefault(); + } + } + else + { + answ = JsonConvert.DeserializeObject(rawData); + } + } + catch + { } + } + return answ; + } + } + + /// + /// Durata cache statica locale dati licenza, random circa 1 h + /// + private static int LicCacheTTL + { + get + { + Random rndGen = new Random(); + return rndGen.Next(50, 70) * 60; + } + } + + private static LiManObj.ApplicativoDTO myInfoApplicativo { get; set; } + + #endregion Private Properties + #region Public Properties /// @@ -125,483 +187,6 @@ namespace GPW_data #endregion Public Properties - #region Private Properties - - /// - /// Info applicativo corrente (da cache con eventuale recupero online...) - /// - private static LiManObj.ApplicativoDTO InfoApplicativo - { - get - { - LiManObj.ApplicativoDTO answ = new LiManObj.ApplicativoDTO(); - // cerco da cache - string rawData = memLayer.ML.getRSV(rkeyLicInfo); - // se no ci fosse --> refresh online! - if (string.IsNullOrEmpty(rawData)) - { - var fatto = RefreshAppInfo().Result; - if (fatto) - { - rawData = memLayer.ML.getRSV(rkeyLicInfo); - } - } - if (!string.IsNullOrEmpty(rawData)) - { - try - { - // verifico se ho 1 risultato o molti...se inizia per "[" è molti - if (rawData.StartsWith("[")) - { - // POTREBBE darmi + di 1 risultato, prendo + recente... - List infoList = JsonConvert.DeserializeObject>(rawData); - if (infoList != null) - { - answ = infoList.OrderByDescending(x => x.Scadenza).FirstOrDefault(); - } - } - else - { - answ = JsonConvert.DeserializeObject(rawData); - } - } - catch - { } - } - return answ; - } - } - - /// - /// Durata cache statica locale dati licenza, random circa 1 h - /// - private static int LicCacheTTL - { - get - { - Random rndGen = new Random(); - return rndGen.Next(50, 70) * 60; - } - } - - private static LiManObj.ApplicativoDTO myInfoApplicativo { get; set; } - - #endregion Private Properties - - #region Public Methods - - /// - /// Verifica attivazione licenza dato codice impiego - /// - /// - /// - public static async Task checkActivation(string CodImpiego) - { - bool answ = false; - // cerco online - RestClient client = new RestClient(apiUrl); - //client.Authenticator = new HttpBasicAuthenticator("username", "password"); - string MKeyEnc = HttpUtility.UrlEncode(MasterKey); - var request = new RestRequest($"/api/attivazioni/verifica?chiave={MKeyEnc}&CodImpiego={CodImpiego}", DataFormat.Json); - var response = client.Get(request); - // controllo risposta - if (response.StatusCode == System.Net.HttpStatusCode.OK) - { - // verifico risposta - string rawData = response.Content; - try - { - // deserializzo - AttivazioneDTO datiAttivazione = JsonConvert.DeserializeObject(rawData); - answ = datiAttivazione != null && datiAttivazione.CodImpiego == CodImpiego; - } - catch - { } - } - return await Task.FromResult(answ); - } - - /// - /// Verifica attivazione licenza dato codice impiego - /// - /// - /// - public static async Task checkActivationUnlocked(string CodImpiego) - { - bool answ = false; - // cerco online - RestClient client = new RestClient(apiUrl); - //client.Authenticator = new HttpBasicAuthenticator("username", "password"); - string MKeyEnc = HttpUtility.UrlEncode(MasterKey); - var request = new RestRequest($"/api/attivazioni/verifica?chiave={MKeyEnc}&CodImpiego={CodImpiego}", DataFormat.Json); - var response = client.Get(request); - // controllo risposta - if (response.StatusCode == System.Net.HttpStatusCode.OK) - { - // verifico risposta - string rawData = response.Content; - try - { - // deserializzo - AttivazioneDTO datiAttivazione = JsonConvert.DeserializeObject(rawData); - if (datiAttivazione != null) - { - // verifico se il veto sia scaduto - answ = datiAttivazione.VetoUnlock <= DateTime.Today; - } - } - catch - { } - } - return await Task.FromResult(answ); - } - - /// - /// Effettua refresh ActivationInfo con chiamata remota (sovrascrivendo info locali Redis) - /// - /// - public static async Task RefreshActInfo() - { - bool answ = false; - - // cerco online - RestClient client = new RestClient(apiUrl); - //client.Authenticator = new HttpBasicAuthenticator("username", "password"); - string MKeyEnc = HttpUtility.UrlEncode(MasterKey); - var request = new RestRequest($"/api/attivazioni/?chiave={MKeyEnc}", DataFormat.Json); - var response = client.Get(request); - // controllo risposta - if (response.StatusCode == System.Net.HttpStatusCode.OK) - { - answ = true; - // salvo in redis contenuto serializzato - string rawData = response.Content; - // salvo in redis per 7 gg - memLayer.ML.setRSV(rkeyActInfo, rawData, LicCacheTTL); - } - return await Task.FromResult(answ); - } - - /// - /// Effettua refresh AppInfo con chiamata remota (sovrascrivendo info locali Redis) - /// - /// - public static async Task RefreshAppInfo() - { - bool answ = false; - - // cerco online - RestClient client = new RestClient(apiUrl); - //client.Authenticator = new HttpBasicAuthenticator("username", "password"); - var request = new RestRequest($"/api/applicazione/{installazione}?CodApp={applicazione}", DataFormat.Json); - var response = client.Get(request); - // controllo risposta - if (response.StatusCode == System.Net.HttpStatusCode.OK) - { - answ = true; - // salvo in redis contenuto serializzato - string rawData = response.Content; - // salvo in redis per 7 gg - memLayer.ML.setRSV(rkeyAppInfo, rawData, LicCacheTTL); - } - return await Task.FromResult(answ); - } - - /// - /// Effettua refresh LicenseInfo con chiamata remota (sovrascrivendo info locali Redis) - /// - /// - public static async Task RefreshLicInfo() - { - bool answ = false; - - // cerco online - RestClient client = new RestClient(apiUrl); - //client.Authenticator = new HttpBasicAuthenticator("username", "password"); - string MKeyEnc = HttpUtility.UrlEncode(MasterKey); - var request = new RestRequest($"/api/licenza/{installazione}?CodApp={applicazione}&Chiave={MKeyEnc}", DataFormat.Json); - var response = client.Get(request); - // controllo risposta - if (response.StatusCode == System.Net.HttpStatusCode.OK) - { - answ = true; - // salvo in redis contenuto serializzato - string rawData = response.Content; - // salvo in redis per 7 gg - memLayer.ML.setRSV(rkeyLicInfo, rawData, LicCacheTTL); - } - return await Task.FromResult(answ); - } - - /// - /// Effettua refresh Payload su server (Remoto) e recupera info licenza in locale (sovrascrivendo info locali Redis) - /// - /// - public static async Task RefreshPayload() - { - bool answ = false; - // svuoto payload calcolato in primis (ttl a 1 sec)... - memLayer.ML.setRSV(rkeyPayload, "", 1); - - // cerco online - RestClient client = new RestClient(apiUrl); - //client.Authenticator = new HttpBasicAuthenticator("username", "password"); - string MKeyEnc = HttpUtility.UrlEncode(MasterKey); - var request = new RestRequest($"/api/licenza/refreshPayload", DataFormat.Json); - string newEnigma = calcHash($"{DateTime.Now:yyyyMMddHHmmss}"); - LicenseCoord newBody = new LicenseCoord() - { - MasterKey = MasterKey, - CodInst = installazione, - CodApp = applicazione, - Enigma = newEnigma - }; - request.AddJsonBody(newBody); - var response = client.Post(request); - // controllo risposta - if (response.StatusCode == System.Net.HttpStatusCode.OK) - { - answ = true; - // salvo in redis contenuto serializzato - string rawData = response.Content; - // salvo in redis per 7 gg - memLayer.ML.setRSV(rkeyLicInfo, rawData, LicCacheTTL); - } - return await Task.FromResult(answ); - } - - /// - /// Tenta invio di un ticket x licenza indicata - /// - /// - /// - /// - /// - /// - /// - /// - public static async Task sendTicketReq(string contName, string contEmail, string contPhone, string reqBody, string codImpiego, int idxSubLic) - { - bool answ = false; - // cerco online - RestClient client = new RestClient(apiUrl); - string MKeyEnc = HttpUtility.UrlEncode(MasterKey); - var request = new RestRequest($"/api/ticket/sendReq", DataFormat.Json); - - SupportRequest richiesta = new SupportRequest() - { - ContactName = contName, - ContactEmail = contEmail, - ContactPhone = contPhone, - ReqBody = reqBody, - CodInst = installazione, - CodApp = applicazione, - MasterKey = MasterKey, - idxSubLic = idxSubLic, - CodImp = codImpiego - }; - - request.AddJsonBody(richiesta); - var response = client.Post(request); - - // controllo risposta - if (response.StatusCode == System.Net.HttpStatusCode.OK) - { - // verifico risposta - string rawData = response.Content; - try - { - if (rawData.StartsWith("[")) - { - // deserializzo - List tickets = JsonConvert.DeserializeObject>(rawData); - answ = tickets != null; - } - else - { - // deserializzo singolo - TicketDTO tickets = JsonConvert.DeserializeObject(rawData); - answ = tickets != null; - } - } - catch - { } - } - return await Task.FromResult(answ); - } - - /// - /// Tenta attivazione licenza dato codice impiego - /// - /// - /// - public static async Task tryActivation(string CodImpiego, string Chiave) - { - bool answ = false; - // cerco online - RestClient client = new RestClient(apiUrl); - //client.Authenticator = new HttpBasicAuthenticator("username", "password"); - string MKeyEnc = HttpUtility.UrlEncode(MasterKey); - var request = new RestRequest($"/api/attivazioni", DataFormat.Json); - Dictionary parDict = new Dictionary(); - parDict.Add(CodImpiego, Chiave); - UserLicenseRequest newBody = new UserLicenseRequest() - { - MasterKey = MasterKey, - ParamDict = parDict - }; - request.AddJsonBody(newBody); - var response = client.Post(request); - // controllo risposta - if (response.StatusCode == System.Net.HttpStatusCode.OK) - { - // verifico risposta - string rawData = response.Content; - try - { - // deserializzo - AttivazioneDTO datiAttivazione = JsonConvert.DeserializeObject(rawData); - answ = datiAttivazione != null; - } - catch - { } - } - return await Task.FromResult(answ); - } - - /// - /// Tenta attivazione licenze dato dizionario codici impiego + chiavi - /// - /// Dizionario parametri attivazione di tipo (CodImpiego,Chiave) - /// - public static async Task tryActivationMult(Dictionary ParamsList) - { - bool answ = false; - // cerco online - RestClient client = new RestClient(apiUrl); - //client.Authenticator = new HttpBasicAuthenticator("username", "password"); - string MKeyEnc = HttpUtility.UrlEncode(MasterKey); - var request = new RestRequest($"/api/attivazioni", DataFormat.Json); - UserLicenseRequest newBody = new UserLicenseRequest() - { - MasterKey = MasterKey, - ParamDict = ParamsList - }; - request.AddJsonBody(newBody); - var response = client.Post(request); - // controllo risposta - if (response.StatusCode == System.Net.HttpStatusCode.OK) - { - // verifico risposta - string rawData = response.Content; - try - { - if (rawData.StartsWith("[")) - { - // deserializzo - List datiAttivazione = JsonConvert.DeserializeObject>(rawData); - answ = datiAttivazione != null; - } - else - { - // deserializzo singolo - AttivazioneDTO datiAttivazione = JsonConvert.DeserializeObject(rawData); - answ = datiAttivazione != null; - } - } - catch - { } - } - return await Task.FromResult(answ); - } - - /// - /// Tenta disattivazione licenza dato codice impiego - /// - /// Dizionario codici da eliminare (CodImpiego/uSERkEY) - /// - public static async Task tryDeactivation(Dictionary ParamsList) - { - bool answ = false; - // cerco attivazione... - var refreshDone = RefreshActInfo().Result; - if (refreshDone) - { - // cerco online - RestClient client = new RestClient(apiUrl); - //client.Authenticator = new HttpBasicAuthenticator("username", "password"); - var request = new RestRequest($"/api/attivazioni", DataFormat.Json); - UserLicenseRequest newBody = new UserLicenseRequest() - { - MasterKey = MasterKey, - ParamDict = ParamsList - }; - request.AddJsonBody(newBody); - var response = client.Delete(request); - // controllo risposta - if (response.StatusCode == System.Net.HttpStatusCode.OK) - { - // verifico risposta - string rawData = response.Content; - bool.TryParse(rawData, out answ); - } - } - - return await Task.FromResult(answ); - } - - /// - /// Tenta refresh licenza dato codice impiego (aggiorna la authKey...) - /// - /// - /// - public static async Task tryRefreshActivation(string CodImpiego, string Chiave) - { - bool answ = false; - // cerco online - RestClient client = new RestClient(apiUrl); - //client.Authenticator = new HttpBasicAuthenticator("username", "password"); - string MKeyEnc = HttpUtility.UrlEncode(MasterKey); - var request = new RestRequest($"/api/attivazioni/refreshKey", DataFormat.Json); - Dictionary parDict = new Dictionary(); - parDict.Add(CodImpiego, Chiave); - UserLicenseRequest newBody = new UserLicenseRequest() - { - MasterKey = MasterKey, - ParamDict = parDict - }; - request.AddJsonBody(newBody); - var response = client.Post(request); - // controllo risposta - if (response.StatusCode == System.Net.HttpStatusCode.OK) - { - // verifico risposta - string rawData = response.Content; - try - { - if (rawData.StartsWith("[")) - { - // deserializzo - List datiAttivazione = JsonConvert.DeserializeObject>(rawData); - answ = datiAttivazione != null; - } - else - { - // deserializzo singolo - AttivazioneDTO datiAttivazione = JsonConvert.DeserializeObject(rawData); - answ = datiAttivazione != null; - } - } - catch - { } - } - return await Task.FromResult(answ); - } - - public static bool userPayloadOk(int idxDip) => _userPayloadOk(idxDip); - - #endregion Public Methods - #region Private Methods /// @@ -891,25 +476,6 @@ namespace GPW_data return getDipAttivi().Count; } - public static DS_Applicazione.DipendentiDataTable getDipAttivi() - { - DS_Applicazione.DipendentiDataTable answ = new DS_Applicazione.DipendentiDataTable(); - // cerco da cache - string rawData = memLayer.ML.getRSV(rkeyDipAct); - // se no ci fosse --> refresh online! - if (string.IsNullOrEmpty(rawData)) - { - answ = DataProxy.DP.taDipendenti.getAttivi(false); - rawData = JsonConvert.SerializeObject(answ); - memLayer.ML.setRSV(rkeyDipAct, rawData, cacheTTL); - } - else - { - answ = JsonConvert.DeserializeObject(rawData); - } - return answ; - } - /// /// Calcolo Hash data stringa input /// @@ -1009,14 +575,6 @@ namespace GPW_data return await Task.FromResult(answ); } - public static void resetTicketCache() - { - // resetto cache tickets a 1 sec e vuoto - memLayer.ML.setRSV(rkeyTickets, "", 1); - // ricarico - var newList = getTickets(); - } - private static void tryCheckPayloadOnline(ref bool answ, ref string currPayload) { try @@ -1044,5 +602,458 @@ namespace GPW_data } #endregion Private Methods + + #region Public Methods + + /// + /// Verifica attivazione licenza dato codice impiego + /// + /// + /// + public static async Task checkActivation(string CodImpiego) + { + bool answ = false; + // cerco online + RestClient client = new RestClient(apiUrl); + //client.Authenticator = new HttpBasicAuthenticator("username", "password"); + string MKeyEnc = HttpUtility.UrlEncode(MasterKey); + var request = new RestRequest($"/api/attivazioni/verifica?chiave={MKeyEnc}&CodImpiego={CodImpiego}", DataFormat.Json); + var response = client.Get(request); + // controllo risposta + if (response.StatusCode == System.Net.HttpStatusCode.OK) + { + // verifico risposta + string rawData = response.Content; + try + { + // deserializzo + AttivazioneDTO datiAttivazione = JsonConvert.DeserializeObject(rawData); + answ = datiAttivazione != null && datiAttivazione.CodImpiego == CodImpiego; + } + catch + { } + } + return await Task.FromResult(answ); + } + + /// + /// Verifica attivazione licenza dato codice impiego + /// + /// + /// + public static async Task checkActivationUnlocked(string CodImpiego) + { + bool answ = false; + // cerco online + RestClient client = new RestClient(apiUrl); + //client.Authenticator = new HttpBasicAuthenticator("username", "password"); + string MKeyEnc = HttpUtility.UrlEncode(MasterKey); + var request = new RestRequest($"/api/attivazioni/verifica?chiave={MKeyEnc}&CodImpiego={CodImpiego}", DataFormat.Json); + var response = client.Get(request); + // controllo risposta + if (response.StatusCode == System.Net.HttpStatusCode.OK) + { + // verifico risposta + string rawData = response.Content; + try + { + // deserializzo + AttivazioneDTO datiAttivazione = JsonConvert.DeserializeObject(rawData); + if (datiAttivazione != null) + { + // verifico se il veto sia scaduto + answ = datiAttivazione.VetoUnlock <= DateTime.Today; + } + } + catch + { } + } + return await Task.FromResult(answ); + } + + public static DS_Applicazione.DipendentiDataTable getDipAttivi() + { + DS_Applicazione.DipendentiDataTable answ = new DS_Applicazione.DipendentiDataTable(); + // cerco da cache + string rawData = memLayer.ML.getRSV(rkeyDipAct); + // se no ci fosse --> refresh online! + if (string.IsNullOrEmpty(rawData)) + { + answ = DataProxy.DP.taDipendenti.getAttivi(false); + rawData = JsonConvert.SerializeObject(answ); + memLayer.ML.setRSV(rkeyDipAct, rawData, cacheTTL); + } + else + { + answ = JsonConvert.DeserializeObject(rawData); + } + return answ; + } + + /// + /// Effettua refresh ActivationInfo con chiamata remota (sovrascrivendo info locali Redis) + /// + /// + public static async Task RefreshActInfo() + { + bool answ = false; + + // cerco online + RestClient client = new RestClient(apiUrl); + //client.Authenticator = new HttpBasicAuthenticator("username", "password"); + string MKeyEnc = HttpUtility.UrlEncode(MasterKey); + var request = new RestRequest($"/api/attivazioni/?chiave={MKeyEnc}", DataFormat.Json); + var response = client.Get(request); + // controllo risposta + if (response.StatusCode == System.Net.HttpStatusCode.OK) + { + answ = true; + // salvo in redis contenuto serializzato + string rawData = response.Content; + // salvo in redis per 7 gg + memLayer.ML.setRSV(rkeyActInfo, rawData, LicCacheTTL); + } + return await Task.FromResult(answ); + } + + /// + /// Effettua refresh AppInfo con chiamata remota (sovrascrivendo info locali Redis) + /// + /// + public static async Task RefreshAppInfo() + { + bool answ = false; + + // cerco online + RestClient client = new RestClient(apiUrl); + //client.Authenticator = new HttpBasicAuthenticator("username", "password"); + var request = new RestRequest($"/api/applicazione/{installazione}?CodApp={applicazione}", DataFormat.Json); + var response = client.Get(request); + // controllo risposta + if (response.StatusCode == System.Net.HttpStatusCode.OK) + { + answ = true; + // salvo in redis contenuto serializzato + string rawData = response.Content; + // salvo in redis per 7 gg + memLayer.ML.setRSV(rkeyAppInfo, rawData, LicCacheTTL); + } + return await Task.FromResult(answ); + } + + /// + /// Effettua refresh LicenseInfo con chiamata remota (sovrascrivendo info locali Redis) + /// + /// + public static async Task RefreshLicInfo() + { + bool answ = false; + + // cerco online + RestClient client = new RestClient(apiUrl); + //client.Authenticator = new HttpBasicAuthenticator("username", "password"); + string MKeyEnc = HttpUtility.UrlEncode(MasterKey); + var request = new RestRequest($"/api/licenza/{installazione}?CodApp={applicazione}&Chiave={MKeyEnc}", DataFormat.Json); + var response = client.Get(request); + // controllo risposta + if (response.StatusCode == System.Net.HttpStatusCode.OK) + { + answ = true; + // salvo in redis contenuto serializzato + string rawData = response.Content; + // salvo in redis per 7 gg + memLayer.ML.setRSV(rkeyLicInfo, rawData, LicCacheTTL); + } + return await Task.FromResult(answ); + } + + /// + /// Effettua refresh Payload su server (Remoto) e recupera info licenza in locale (sovrascrivendo info locali Redis) + /// + /// + public static async Task RefreshPayload() + { + bool answ = false; + // svuoto payload calcolato in primis (ttl a 1 sec)... + memLayer.ML.setRSV(rkeyPayload, "", 1); + + // cerco online + RestClient client = new RestClient(apiUrl); + //client.Authenticator = new HttpBasicAuthenticator("username", "password"); + string MKeyEnc = HttpUtility.UrlEncode(MasterKey); + var request = new RestRequest($"/api/licenza/refreshPayload", DataFormat.Json); + string newEnigma = calcHash($"{DateTime.Now:yyyyMMddHHmmss}"); + LicenseCoord newBody = new LicenseCoord() + { + MasterKey = MasterKey, + CodInst = installazione, + CodApp = applicazione, + Enigma = newEnigma + }; + request.AddJsonBody(newBody); + var response = client.Post(request); + // controllo risposta + if (response.StatusCode == System.Net.HttpStatusCode.OK) + { + answ = true; + // salvo in redis contenuto serializzato + string rawData = response.Content; + // salvo in redis per 7 gg + memLayer.ML.setRSV(rkeyLicInfo, rawData, LicCacheTTL); + } + return await Task.FromResult(answ); + } + + public static void resetLicenseData() + { + memLayer.ML.setRSV(rkeyDipAct, "", 1); + memLayer.ML.setRSV(rkeyPayload, "", 1); + memLayer.ML.setRSV(rkeyLicInfo, "", 1); + memLayer.ML.setRSV(rkeyActInfo, "", 1); + } + + public static void resetTicketCache() + { + // resetto cache tickets a 1 sec e vuoto + memLayer.ML.setRSV(rkeyTickets, "", 1); + // ricarico + var newList = getTickets(); + } + + /// + /// Tenta invio di un ticket x licenza indicata + /// + /// + /// + /// + /// + /// + /// + /// + public static async Task sendTicketReq(string contName, string contEmail, string contPhone, string reqBody, string codImpiego, int idxSubLic) + { + bool answ = false; + // cerco online + RestClient client = new RestClient(apiUrl); + string MKeyEnc = HttpUtility.UrlEncode(MasterKey); + var request = new RestRequest($"/api/ticket/sendReq", DataFormat.Json); + + SupportRequest richiesta = new SupportRequest() + { + ContactName = contName, + ContactEmail = contEmail, + ContactPhone = contPhone, + ReqBody = reqBody, + CodInst = installazione, + CodApp = applicazione, + MasterKey = MasterKey, + idxSubLic = idxSubLic, + CodImp = codImpiego + }; + + request.AddJsonBody(richiesta); + var response = client.Post(request); + + // controllo risposta + if (response.StatusCode == System.Net.HttpStatusCode.OK) + { + // verifico risposta + string rawData = response.Content; + try + { + if (rawData.StartsWith("[")) + { + // deserializzo + List tickets = JsonConvert.DeserializeObject>(rawData); + answ = tickets != null; + } + else + { + // deserializzo singolo + TicketDTO tickets = JsonConvert.DeserializeObject(rawData); + answ = tickets != null; + } + } + catch + { } + } + return await Task.FromResult(answ); + } + + /// + /// Tenta attivazione licenza dato codice impiego + /// + /// + /// + public static async Task tryActivation(string CodImpiego, string Chiave) + { + bool answ = false; + // cerco online + RestClient client = new RestClient(apiUrl); + //client.Authenticator = new HttpBasicAuthenticator("username", "password"); + string MKeyEnc = HttpUtility.UrlEncode(MasterKey); + var request = new RestRequest($"/api/attivazioni", DataFormat.Json); + Dictionary parDict = new Dictionary(); + parDict.Add(CodImpiego, Chiave); + UserLicenseRequest newBody = new UserLicenseRequest() + { + MasterKey = MasterKey, + ParamDict = parDict + }; + request.AddJsonBody(newBody); + var response = client.Post(request); + // controllo risposta + if (response.StatusCode == System.Net.HttpStatusCode.OK) + { + // verifico risposta + string rawData = response.Content; + try + { + // deserializzo + AttivazioneDTO datiAttivazione = JsonConvert.DeserializeObject(rawData); + answ = datiAttivazione != null; + resetLicenseData(); + } + catch + { } + } + return await Task.FromResult(answ); + } + + /// + /// Tenta attivazione licenze dato dizionario codici impiego + chiavi + /// + /// Dizionario parametri attivazione di tipo (CodImpiego,Chiave) + /// + public static async Task tryActivationMult(Dictionary ParamsList) + { + bool answ = false; + // cerco online + RestClient client = new RestClient(apiUrl); + //client.Authenticator = new HttpBasicAuthenticator("username", "password"); + string MKeyEnc = HttpUtility.UrlEncode(MasterKey); + var request = new RestRequest($"/api/attivazioni", DataFormat.Json); + UserLicenseRequest newBody = new UserLicenseRequest() + { + MasterKey = MasterKey, + ParamDict = ParamsList + }; + request.AddJsonBody(newBody); + var response = client.Post(request); + // controllo risposta + if (response.StatusCode == System.Net.HttpStatusCode.OK) + { + // verifico risposta + string rawData = response.Content; + try + { + if (rawData.StartsWith("[")) + { + // deserializzo + List datiAttivazione = JsonConvert.DeserializeObject>(rawData); + answ = datiAttivazione != null; + } + else + { + // deserializzo singolo + AttivazioneDTO datiAttivazione = JsonConvert.DeserializeObject(rawData); + answ = datiAttivazione != null; + resetLicenseData(); + } + } + catch + { } + } + return await Task.FromResult(answ); + } + + /// + /// Tenta disattivazione licenza dato codice impiego + /// + /// Dizionario codici da eliminare (CodImpiego/uSERkEY) + /// + public static async Task tryDeactivation(Dictionary ParamsList) + { + bool answ = false; + // cerco attivazione... + var refreshDone = RefreshActInfo().Result; + if (refreshDone) + { + // cerco online + RestClient client = new RestClient(apiUrl); + //client.Authenticator = new HttpBasicAuthenticator("username", "password"); + var request = new RestRequest($"/api/attivazioni", DataFormat.Json); + UserLicenseRequest newBody = new UserLicenseRequest() + { + MasterKey = MasterKey, + ParamDict = ParamsList + }; + request.AddJsonBody(newBody); + var response = client.Delete(request); + // controllo risposta + if (response.StatusCode == System.Net.HttpStatusCode.OK) + { + // verifico risposta + string rawData = response.Content; + bool.TryParse(rawData, out answ); + resetLicenseData(); + } + } + + return await Task.FromResult(answ); + } + + /// + /// Tenta refresh licenza dato codice impiego (aggiorna la authKey...) + /// + /// + /// + public static async Task tryRefreshActivation(string CodImpiego, string Chiave) + { + bool answ = false; + // cerco online + RestClient client = new RestClient(apiUrl); + //client.Authenticator = new HttpBasicAuthenticator("username", "password"); + string MKeyEnc = HttpUtility.UrlEncode(MasterKey); + var request = new RestRequest($"/api/attivazioni/refreshKey", DataFormat.Json); + Dictionary parDict = new Dictionary(); + parDict.Add(CodImpiego, Chiave); + UserLicenseRequest newBody = new UserLicenseRequest() + { + MasterKey = MasterKey, + ParamDict = parDict + }; + request.AddJsonBody(newBody); + var response = client.Post(request); + // controllo risposta + if (response.StatusCode == System.Net.HttpStatusCode.OK) + { + // verifico risposta + string rawData = response.Content; + try + { + if (rawData.StartsWith("[")) + { + // deserializzo + List datiAttivazione = JsonConvert.DeserializeObject>(rawData); + answ = datiAttivazione != null; + } + else + { + // deserializzo singolo + AttivazioneDTO datiAttivazione = JsonConvert.DeserializeObject(rawData); + answ = datiAttivazione != null; + resetLicenseData(); + } + } + catch + { } + } + return await Task.FromResult(answ); + } + + public static bool userPayloadOk(int idxDip) => _userPayloadOk(idxDip); + + #endregion Public Methods } } \ No newline at end of file