internal void ReplaceMeLater(string product, string esVersion, string s1, string s2, string offlineFile, ProxySettings settings) { bool passed = false; try { Crypto crypto = new Crypto(); string id = this.getUniqueID("C"); string serialNumber = ""; bool canRunOffline = false; bool isAllSecurityOkay = true; RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\EntitySpaces 2019", true); if (key != null) { try { serialNumber = (string)key.GetValue(s1); } catch { } } string offlinePath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); offlinePath += @"\EntitySpaces\ES2019\" + offlineFile; //Interop.ADODBX.dll"; // See if we have registered our license int result = this.ValidateLicense(product, serialNumber, System.Environment.MachineName, id, esVersion, settings); switch (result) { case 0: // Try Registering it ... int newResult = this.RegisterLicense(product, serialNumber, System.Environment.MachineName, id, esVersion, settings); if (newResult == 1) { this.CreateSerialNumber2Key(key, s2, id, false); result = 1; } else { result = 0; } break; case 1: this.CreateSerialNumber2Key(key, s2, id, false); try { File.Delete(offlinePath); } catch { } break; case -1: bool isOffLine = false; DateTime offLineDate = DateTime.MinValue; if (this.ReadSerialNumber2Key(key, s2, id, out isOffLine, out offLineDate)) { if (isOffLine) { if (File.Exists(offlinePath)) { DateTime fileDate = this.OpenOfflineFile(offlinePath); if (DateTime.Now > offLineDate) { TimeSpan ts = DateTime.Now.Subtract(offLineDate); if (ts.Days < this.DaysTheyCanRunOffline) { if (fileDate < DateTime.Now) { canRunOffline = true; } } } } } else { this.CreateSerialNumber2Key(key, s2, id, true); this.CreateOfflineFile(offlinePath); canRunOffline = true; } } break; } if (isAllSecurityOkay && result == 1 || (canRunOffline && result == -1)) { passed = true; } } catch { throw new Exception("License Invalid or You Must Connect"); } if (!passed) { throw new Exception("License Invalid or You Must Connect"); } }
internal int RegisterLicense(string product, string serialNumber, string machineName, string uniqueHardwareIdentifier, string version, ProxySettings settings) { int result = 0; // normal failure as a default try { StringBuilder post = new StringBuilder(); Random seed = new Random(); Random r = new Random(seed.Next()); byte playback = (byte)r.Next(250); post.AppendFormat("Product={0}", Uri.EscapeDataString(product.ToString())); post.AppendFormat("&SerialNumber={0}", Uri.EscapeDataString(serialNumber.ToString())); post.AppendFormat("&MachineName={0}", Uri.EscapeDataString(machineName.ToString())); post.AppendFormat("&UniqueHardwareIdentifier={0}", Uri.EscapeDataString(uniqueHardwareIdentifier.ToString())); post.AppendFormat("&Version={0}", Uri.EscapeDataString(version)); post.AppendFormat("&Playback={0}", Uri.EscapeDataString(playback.ToString())); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"https://api.entityspaces.net/AddActivation2.ashx"); // HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"http://localhost/Licensing/AddActivation2.ashx"); if (settings.UseProxy) { if (!string.IsNullOrEmpty(settings.UserName)) { NetworkCredential creds = new NetworkCredential(settings.UserName, settings.Password); if (!string.IsNullOrEmpty(settings.DomainName)) { creds.Domain = settings.DomainName; } req.Proxy = new WebProxy(settings.Url, true, null, creds); } else { req.Proxy = new WebProxy(settings.Url, true, null); } } req.Method = WebRequestMethods.Http.Post; req.ContentType = "application/x-www-form-urlencoded"; req.Timeout = 10000; byte[] data = System.Text.Encoding.UTF8.GetBytes(post.ToString()); req.ContentLength = data.Length; string responseFromServer = ""; using (Stream dataStream = req.GetRequestStream()) { dataStream.Write(data, 0, data.Length); dataStream.Close(); using (WebResponse response = req.GetResponse()) { using (Stream stream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(stream)) { responseFromServer = reader.ReadToEnd(); } } } } byte[] responseData = Convert.FromBase64String(responseFromServer); byte offset = responseData[600]; byte valid = responseData[offset]; if (valid % 2 == 0) { result = 1; } if (playback != responseData[offset + 2]) { result = 0; } if (result == 1) { daysTheyCanRunOffline = responseData[offset + 1]; } } catch (Exception) { result = -1; } return(result); }