private async Task <Tuple <string, X509Certificate2> > GetMqttCertificate(string token) { using (var client = new WebClient()) { client.Headers["Authorization"] = token; var buf = await client.DownloadDataTaskAsync(_configuration.GetValue <string>("WorxApi") + "users/certificate"); var str = Encoding.UTF8.GetString(buf); Debug.WriteLine("Certificate: {0}", str); using (MemoryStream ms = new MemoryStream(buf)) { DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(LsCertificate)); LsCertificate lsc = (LsCertificate)dcjs.ReadObject(ms); ms.Close(); if (!string.IsNullOrEmpty(lsc.Pkcs12)) { var certString = str = lsc.Pkcs12.Replace("\\/", "/"); buf = Convert.FromBase64String(str); return(new Tuple <string, X509Certificate2>(certString, new X509Certificate2(buf, (string)null, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable))); } } } return(null); }
public bool WebApi(string url, string clientSecret, string mail, string pass, string uuid) { NameValueCollection nvc = new NameValueCollection(); string str; string api = url; string sec = clientSecret; byte[] buf; #region REGISTRATION nvc.Add("username", mail); nvc.Add("password", pass); nvc.Add("grant_type", "password"); nvc.Add("client_id", "1"); nvc.Add("client_secret", sec); nvc.Add("scope", "*"); try { buf = _client.UploadValues(api + "oauth/token", nvc); str = Encoding.UTF8.GetString(buf); Debug.WriteLine("Oauth token: {0}", str); Log(string.Format("Oauth token: {0}", str), 1); using (MemoryStream ms = new MemoryStream(buf)) { DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(LsOAuth)); LsOAuth lsoa = (LsOAuth)dcjs.ReadObject(ms); _client.Headers["Authorization"] = string.Format("{0} {1}", lsoa.Type, lsoa.Token); ms.Close(); } } catch (Exception ex) { Err(ex.Message); Log(ex.ToString(), 9); return(false); } #endregion try { #region USER buf = _client.DownloadData(api + "users/me"); str = Encoding.UTF8.GetString(buf); Debug.WriteLine("User info: {0}", str); Log(string.Format("User info: {0}", str), 1); using (MemoryStream ms = new MemoryStream(buf)) { DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(LsUserMe)); LsUserMe ku = (LsUserMe)dcjs.ReadObject(ms); Broker = ku.Endpoint; ms.Close(); } #endregion #region CERTIFICATE buf = _client.DownloadData(api + "users/certificate"); str = Encoding.UTF8.GetString(buf); Debug.WriteLine("Certificate: {0}", str); Log(string.Format("Certificate: {0}", str), 1); using (MemoryStream ms = new MemoryStream(buf)) { DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(LsCertificate)); LsCertificate lsc = (LsCertificate)dcjs.ReadObject(ms); ms.Close(); if (!string.IsNullOrEmpty(lsc.Pkcs12)) { str = lsc.Pkcs12.Replace("\\/", "/"); buf = Convert.FromBase64String(str); File.WriteAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AWS" + ArgCfg() + ".p12"), buf); _certWX = new X509Certificate2(buf); } //string mac = Products.Count > 0 ? Products[0].MacAdr.Substring(5) : "000000"; //int xx = int.Parse(mac, System.Globalization.NumberStyles.HexNumber) ^ 0xE1588A; //Log(string.Format("AWS certificate done ({0})", xx), 2); //buf = _certWX.Export(X509ContentType.Cert); //File.WriteAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WX.p12"), buf); } #endregion #region PRODUCT ITEMS buf = _client.DownloadData(api + "product-items"); str = Encoding.UTF8.GetString(buf); Debug.WriteLine("Product items: {0}", str); Log(string.Format("Product items: {0}", str), 1); using (MemoryStream ms = new MemoryStream(buf)) { DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(List <LsProductItem>)); Products = (List <LsProductItem>)dcjs.ReadObject(ms); ms.Close(); } #endregion #region STATUS buf = null; foreach (LsProductItem pi in Products) { buf = _client.DownloadData(api + "product-items/" + pi.SerialNo + "/status"); str = Encoding.UTF8.GetString(buf); Debug.WriteLine("Status {0}: {1}", pi.Name, str); Log(string.Format("Status {0}: {1}", pi.Name, str), 1); } if (buf != null) { MemoryStream ms = new MemoryStream(buf); DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(LsMqtt)); LsMqtt jm = (LsMqtt)dcjs.ReadObject(ms); Json = str; Data = jm; //_msgPoll = false; ms.Close(); Recv(); } #endregion } catch (Exception ex) { Err(ex.Message); Log(ex.ToString(), 9); return(false); } buf = null; return(!string.IsNullOrEmpty(Broker) && _certWX != null && Products.Count > 0); }