示例#1
0
        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");
            }
        }
示例#2
0
        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);
        }