/// <summary> /// Scrive i valori del cookie /// </summary> /// <param name="mysetup">I valori da registrare</param> /// <returns></returns> private bool _writeSetup(CookieInformation mysetup) { try { Directory.CreateDirectory(_mainpath); using (StreamWriter file = File.CreateText(_pathsetup)) { JsonSerializer serializer = new JsonSerializer(); serializer.Serialize(file, mysetup); } return(true); } catch { return(false); } }
/// <summary> /// Richiede le informazioni del prodotto richiesto /// </summary> /// <param name="Request"></param> public API(RequestProductInfo Request) { RequestProduct = Request; // --> Non controllo se non ho l'ID del prodotto if (Request.MyProduct.ID <= 0) { return; } // --> Rendo disponibile il file del cookie _pathsetup = string.Format("{0}\\{1}.json", _mainpath, Request.MyProduct.ID); CookieInformation MySetup = new CookieInformation(); DateTime now = DateTime.Now; // --> Evito di chiamare il server se non sono passate almeno 24h try { string json = _loadSetup(); if (json != null && json.Trim().Length > 0) { json = json.Trim(); MySetup = JsonConvert.DeserializeObject <CookieInformation>(json); DateTime ExpireDate = MySetup.LastCheck.AddDays(1); // --> Impedisco di controllare se non è passato il tempo necessario if (now < ExpireDate) { ProductInfo.Exception = string.Format("Check for updates scheduled for {0}", ExpireDate.ToString()); return; } } } catch (Exception Exp) { // --> Setup corrotto ? resetto! _writeSetup(MySetup); // --> Se ci sono errori non controllo perchè non è gestito ed evito di sovraccaricare il server che mi bloccherebbe ProductInfo.Exception = Exp.Message; return; } // --> Dobbiamo supervisionare la chiamata per registrare l'eccexione try { // --> Strutturo le informazioni per la richiesta POST NameValueCollection data = new NameValueCollection { { "account_broker", Request.AccountBroker }, { "account_number", Request.AccountNumber.ToString() }, { "my_version", Request.MyProduct.Version }, { "productid", Request.MyProduct.ID.ToString() } }; // --> Autorizzo tutte le pagine di questo dominio Uri myuri = new Uri(Service); string pattern = string.Format("{0}://{1}/.*", myuri.Scheme, myuri.Host); Regex urlRegEx = new Regex(pattern); WebPermission p = new WebPermission(NetworkAccess.Connect, urlRegEx); p.Assert(); // --> Protocollo di sicurezza https:// ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 | (SecurityProtocolType)768 | (SecurityProtocolType)3072; // -->> Richiedo le informazioni al server using (var wb = new WebClient()) { wb.Headers.Add("User-Agent", UserAgent); var response = wb.UploadValues(myuri, "POST", data); ProductInfo.Source = Encoding.UTF8.GetString(response); } // -->>> Nel cBot necessita l'attivazione di "AccessRights = AccessRights.FullAccess" ProductInfo.LastProduct = JsonConvert.DeserializeObject <Product>(ProductInfo.Source); // --> Salviamo la sessione MySetup.LastCheck = now; _writeSetup(MySetup); } catch (Exception Exp) { // --> Qualcosa è andato storto, registro l'eccezione ProductInfo.Exception = Exp.Message; } }