├── App.config ├── Debug.ico ├── LICENSE ├── License.csproj ├── License.csproj.user ├── Program.cs ├── README.md ├── Software License.sln ├── _config.yml ├── dollar.ico ├── frmDiagnostics.Designer.cs ├── frmDiagnostics.cs ├── frmDiagnostics.resx └── packages.config /App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | http://www.mydomain.com 15 | 16 | 17 | 5b06a6205a97f1.60209273 18 | 19 | 20 | 5b06a6205a96f4.88239186 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /Debug.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Opzet/SoftwareLicenseManager/85dcc5d4bbae4e6ee66c72b5ac552de9a4ddc1ef/Debug.ico -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Opzet 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /License.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {9793FC53-CCA5-4633-8FA7-99F03ED5207B} 8 | WinExe 9 | License 10 | License 11 | v4.5.2 12 | 512 13 | true 14 | true 15 | C:\License\ 16 | true 17 | Web 18 | false 19 | Foreground 20 | 7 21 | Days 22 | false 23 | false 24 | true 25 | http://www.mydomain.com/Apps/License/ 26 | Software License Debug 27 | ... 28 | true 29 | index.html 30 | 5 31 | 1.0.0.%2a 32 | false 33 | true 34 | true 35 | true 36 | 37 | 38 | AnyCPU 39 | true 40 | full 41 | false 42 | bin\Debug\ 43 | DEBUG;TRACE 44 | prompt 45 | 4 46 | 47 | 48 | AnyCPU 49 | pdbonly 50 | true 51 | bin\Release\ 52 | TRACE 53 | prompt 54 | 4 55 | 56 | 57 | Debug.ico 58 | 59 | 60 | License.Program 61 | 62 | 63 | B7BB68076D6B1027C3A973BA7FEC49E0C00392AF 64 | 65 | 66 | License_TemporaryKey.pfx 67 | 68 | 69 | true 70 | 71 | 72 | true 73 | 74 | 75 | 76 | ..\packages\RestSharp.106.3.1\lib\net452\RestSharp.dll 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | Form 95 | 96 | 97 | frmDiagnostics.cs 98 | 99 | 100 | 101 | 102 | frmDiagnostics.cs 103 | 104 | 105 | ResXFileCodeGenerator 106 | Resources.Designer.cs 107 | Designer 108 | 109 | 110 | True 111 | Resources.resx 112 | 113 | 114 | 115 | 116 | SettingsSingleFileGenerator 117 | Settings.Designer.cs 118 | 119 | 120 | True 121 | Settings.settings 122 | True 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | False 134 | Microsoft .NET Framework 4.5.2 %28x86 and x64%29 135 | true 136 | 137 | 138 | False 139 | .NET Framework 3.5 SP1 Client Profile 140 | false 141 | 142 | 143 | False 144 | .NET Framework 3.5 SP1 145 | false 146 | 147 | 148 | 149 | -------------------------------------------------------------------------------- /License.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Y:\License\|publish\ 5 | http://www.planworkdone.com/Apps/License/ 6 | 7 | 8 | 9 | 10 | en-US 11 | false 12 | 13 | 14 | false 15 | 16 | -------------------------------------------------------------------------------- /Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using System.Windows.Forms; 6 | 7 | namespace License 8 | { 9 | static class Program 10 | { 11 | /// 12 | /// The main entry point for the application. 13 | /// 14 | [STAThread] 15 | static void Main() 16 | { 17 | Application.EnableVisualStyles(); 18 | Application.SetCompatibleTextRenderingDefault(false); 19 | Application.Run(new frmDiagnostics()); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Want to sell desktop software (e.g. DotNet C# winform) and activate it via a key, this is how I did it for free. 2 | 3 | Use Woocommerce to sell license and enable your WordPress setup to act as a validator API (service) with endpoints that will let you activate, validate and deactivate license keys via HTTP requests; this is a C# solutions to integrate the API within your desktop products. 4 | 5 | ## Reverse Engineer of licensing in Wordpress/WooCommerce 6 | 7 | ### Required Infrastructure 8 | 9 | 1. Store 10 | 11 | 2. Enable license key fields in product 12 | 13 | 3. Software License Management (SLM) and Enable license key auto generation with notification on purchase 14 | 15 | 4. REST API for desktop application 16 | 17 |
18 | 19 | #### 1. Store : Wordpress and WooCommerce 20 | 21 | Install Wordpress Plugin: 'woocommerce' enables eCommerce Store 22 | 23 | #### 2. Field: Enable license key fields in product 24 | 25 | Install Wordpress Plugin: 'WooCommerce License Keys' Version 1.0.11 By 10 Quality 26 | Enables "License Keys" with WooCommerce field in products. 27 | 28 | #### 3. Manage: Software licence manager dashboard 29 | 30 | https://www.tipsandtricks-hq.com/software-license-manager-plugin-for-wordpress 31 | 32 | Install Wordpress Plugin: Software License Manager Version 4.0 | By Tips and Tricks HQ - Dashboard 33 | 34 | Install Wordpress Plugin: Software licence manager plugin Version 1.0 | By Aaron Bowie (We are AG) - Auto gen license 35 | 36 | This is an __updated version of Woocommerce Software License Manager By Omid Shamlu__ to work with the latest WooCommerce (3.0+) 37 | Features 38 | 39 | Automatically creates license keys for each sale with WC Licensing is optional and can be activated/deactivated individually send generated license keys to your customers within your existing email notifications 40 | 41 |
42 | 43 | ### Application code to query store: REST API / WebClient to check json query to woocommerce 44 | 45 | Port of License Keys API client used to activate, validate and deactivate license keys from https://github.com/10quality/license-keys-php-client/blob/v1.0/src/Client.php 46 | 47 |
 48 |   LicenseResponse License = new LicenseResponse();
 49 | 
 50 |             using (WebClient client = new WebClient())
 51 |             {
 52 |                 var response = client.UploadValues(txtLicenseServer.Text, new NameValueCollection()
 53 |                 {
 54 |                     { "secret_key", txtKeyQuery.Text},
 55 |                     { "slm_action", "slm_check" },
 56 |                     { "license_key" , txtMyLicense.Text }
 57 |                 });
 58 | 
 59 |                 string result = System.Text.Encoding.UTF8.GetString(response);
 60 |                 License = FromJson(result);
 61 |             }
 62 | 	    
 63 | 	    if (License != null)
 64 |             {
 65 |                 lblResponse.Text = $"Result: {License.result} | Message: {License.message} | Key: {License.key}";
 66 | 
 67 |                 txtFirstName.Text = License.first_name;
 68 |                 txtLastName.Text = License.last_name;
 69 |                 txtEmail.Text = License.email;
 70 |                 txtCompany.Text = License.company_name;
 71 |                 txtTransId.Text = License.txn_id;
 72 |                 txtAllowedInstalls.Text = License.max_allowed_domains;
 73 | 
 74 |                 txtProductref.Text = License.product_ref;
 75 | 
 76 |                 listActivations.Items.Clear();
 77 | 
 78 |                 foreach (RegDomains domain in License.registered_domains)
 79 |                 {
 80 |                     listActivations.Items.Add(new ListViewItem(new string[] {
 81 |                         domain.id,
 82 |                         domain.registered_domain,
 83 |                         domain.item_reference,
 84 |                     }));
 85 | 
 86 |                     txtItem.Text = domain.item_reference;
 87 | 
 88 |                 }
 89 | 
 90 |                 listActivations.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
 91 |                 listActivations.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
 92 |                 listActivations.Refresh();
 93 |             }
 94 |             else
 95 |             {
 96 |                 lblResponse.Text = "No Response?";
 97 |             }
 98 | 
 99 |         }
100 | 	    
101 | 102 | #### Other Implementations 103 | 104 | ### MVC 105 | https://github.com/10quality/wpmvc-addon-license-key 106 | 107 | ### It is confusing on how to enable software licensing, it is hidden in the free architecture, cannot work out what to buy... 108 | 109 | * $199 - 399 https://woocommerce.com/products/woocommerce-subscriptions/ I think this is closest to the above? 110 | 111 | * $39 https://www.10quality.com/product/woocommerce-license-keys/ 112 | * $129 https://woocommerce.com/products/woocommerce-api-manager/ <- What is this?? Looks promising 113 | * $129 https://woocommerce.com/products/software-add-on/?utm_source=product&utm_medium=upsell&utm_campaign=wcaddons 114 | WooCommerce License Keys adds a new product type to your WordPress and WooCommerce setup, and lets you create and handle license keys that can be used to validate your licensed products. 115 | 116 | https://www.tipsandtricks-hq.com/ecommerce/integrate-wp-estore-with-software-license-manager-plugin-3731 117 | 118 | 119 | -------------------------------------------------------------------------------- /Software License.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.27703.2042 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "License", "License.csproj", "{9793FC53-CCA5-4633-8FA7-99F03ED5207B}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {9793FC53-CCA5-4633-8FA7-99F03ED5207B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {9793FC53-CCA5-4633-8FA7-99F03ED5207B}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {9793FC53-CCA5-4633-8FA7-99F03ED5207B}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {9793FC53-CCA5-4633-8FA7-99F03ED5207B}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {5D4B8FFF-7532-4F40-ABA7-009F4A23EA43} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-minimal -------------------------------------------------------------------------------- /dollar.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Opzet/SoftwareLicenseManager/85dcc5d4bbae4e6ee66c72b5ac552de9a4ddc1ef/dollar.ico -------------------------------------------------------------------------------- /frmDiagnostics.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace License 2 | { 3 | partial class frmDiagnostics 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmDiagnostics)); 32 | this.btnCreateLicense = new System.Windows.Forms.Button(); 33 | this.label1 = new System.Windows.Forms.Label(); 34 | this.txtMyLicense = new System.Windows.Forms.TextBox(); 35 | this.label2 = new System.Windows.Forms.Label(); 36 | this.lblResponse = new System.Windows.Forms.Label(); 37 | this.btnCheckKey = new System.Windows.Forms.Button(); 38 | this.txtFirstName = new System.Windows.Forms.TextBox(); 39 | this.txtLastName = new System.Windows.Forms.TextBox(); 40 | this.txtEmail = new System.Windows.Forms.TextBox(); 41 | this.label4 = new System.Windows.Forms.Label(); 42 | this.label5 = new System.Windows.Forms.Label(); 43 | this.label6 = new System.Windows.Forms.Label(); 44 | this.btnActivate = new System.Windows.Forms.Button(); 45 | this.label3 = new System.Windows.Forms.Label(); 46 | this.label7 = new System.Windows.Forms.Label(); 47 | this.txtItem = new System.Windows.Forms.TextBox(); 48 | this.TxtDomain = new System.Windows.Forms.TextBox(); 49 | this.label8 = new System.Windows.Forms.Label(); 50 | this.txtTransId = new System.Windows.Forms.TextBox(); 51 | this.label9 = new System.Windows.Forms.Label(); 52 | this.txtExpiry = new System.Windows.Forms.TextBox(); 53 | this.btnDeactivate = new System.Windows.Forms.Button(); 54 | this.label10 = new System.Windows.Forms.Label(); 55 | this.txtCompany = new System.Windows.Forms.TextBox(); 56 | this.label11 = new System.Windows.Forms.Label(); 57 | this.txtLicenseServer = new System.Windows.Forms.TextBox(); 58 | this.label12 = new System.Windows.Forms.Label(); 59 | this.label13 = new System.Windows.Forms.Label(); 60 | this.txtKeyLicCreate = new System.Windows.Forms.TextBox(); 61 | this.txtKeyQuery = new System.Windows.Forms.TextBox(); 62 | this.label14 = new System.Windows.Forms.Label(); 63 | this.txtAllowedInstalls = new System.Windows.Forms.TextBox(); 64 | this.groupBox1 = new System.Windows.Forms.GroupBox(); 65 | this.label17 = new System.Windows.Forms.Label(); 66 | this.groupBox2 = new System.Windows.Forms.GroupBox(); 67 | this.txtProductref = new System.Windows.Forms.TextBox(); 68 | this.label16 = new System.Windows.Forms.Label(); 69 | this.listActivations = new System.Windows.Forms.ListView(); 70 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 71 | this.label15 = new System.Windows.Forms.Label(); 72 | this.groupBox1.SuspendLayout(); 73 | this.groupBox2.SuspendLayout(); 74 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 75 | this.SuspendLayout(); 76 | // 77 | // btnCreateLicense 78 | // 79 | this.btnCreateLicense.BackColor = System.Drawing.Color.Gray; 80 | this.btnCreateLicense.Location = new System.Drawing.Point(163, 356); 81 | this.btnCreateLicense.Margin = new System.Windows.Forms.Padding(5); 82 | this.btnCreateLicense.Name = "btnCreateLicense"; 83 | this.btnCreateLicense.Size = new System.Drawing.Size(214, 35); 84 | this.btnCreateLicense.TabIndex = 0; 85 | this.btnCreateLicense.Text = "Debug - Create License"; 86 | this.btnCreateLicense.UseVisualStyleBackColor = false; 87 | this.btnCreateLicense.Click += new System.EventHandler(this.btnCreateLicense_Click); 88 | // 89 | // label1 90 | // 91 | this.label1.Location = new System.Drawing.Point(4, 147); 92 | this.label1.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 93 | this.label1.Name = "label1"; 94 | this.label1.Size = new System.Drawing.Size(349, 92); 95 | this.label1.TabIndex = 1; 96 | this.label1.Text = "Please enter the license key for this product to activate it. \r\nYou were given a " + 97 | "license key when you purchased this item"; 98 | this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; 99 | // 100 | // txtMyLicense 101 | // 102 | this.txtMyLicense.Location = new System.Drawing.Point(176, 244); 103 | this.txtMyLicense.Margin = new System.Windows.Forms.Padding(5); 104 | this.txtMyLicense.Name = "txtMyLicense"; 105 | this.txtMyLicense.Size = new System.Drawing.Size(159, 29); 106 | this.txtMyLicense.TabIndex = 2; 107 | this.txtMyLicense.Text = "5b3fc6fcd83d7"; 108 | this.txtMyLicense.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; 109 | // 110 | // label2 111 | // 112 | this.label2.AutoSize = true; 113 | this.label2.Location = new System.Drawing.Point(209, 601); 114 | this.label2.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 115 | this.label2.Name = "label2"; 116 | this.label2.Size = new System.Drawing.Size(378, 21); 117 | this.label2.TabIndex = 3; 118 | this.label2.Text = "The following message was returned from the server:"; 119 | // 120 | // lblResponse 121 | // 122 | this.lblResponse.BackColor = System.Drawing.Color.White; 123 | this.lblResponse.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 124 | this.lblResponse.Location = new System.Drawing.Point(11, 622); 125 | this.lblResponse.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 126 | this.lblResponse.Name = "lblResponse"; 127 | this.lblResponse.Size = new System.Drawing.Size(763, 58); 128 | this.lblResponse.TabIndex = 4; 129 | this.lblResponse.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; 130 | // 131 | // btnCheckKey 132 | // 133 | this.btnCheckKey.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); 134 | this.btnCheckKey.Location = new System.Drawing.Point(176, 279); 135 | this.btnCheckKey.Margin = new System.Windows.Forms.Padding(5); 136 | this.btnCheckKey.Name = "btnCheckKey"; 137 | this.btnCheckKey.Size = new System.Drawing.Size(159, 83); 138 | this.btnCheckKey.TabIndex = 5; 139 | this.btnCheckKey.Text = "Check \r\n(Embed in Application)"; 140 | this.btnCheckKey.UseVisualStyleBackColor = false; 141 | this.btnCheckKey.Click += new System.EventHandler(this.btnCheckKey_Click); 142 | // 143 | // txtFirstName 144 | // 145 | this.txtFirstName.Location = new System.Drawing.Point(131, 89); 146 | this.txtFirstName.Margin = new System.Windows.Forms.Padding(5); 147 | this.txtFirstName.Name = "txtFirstName"; 148 | this.txtFirstName.Size = new System.Drawing.Size(215, 29); 149 | this.txtFirstName.TabIndex = 6; 150 | this.txtFirstName.Text = "Bob"; 151 | // 152 | // txtLastName 153 | // 154 | this.txtLastName.Location = new System.Drawing.Point(131, 127); 155 | this.txtLastName.Margin = new System.Windows.Forms.Padding(5); 156 | this.txtLastName.Name = "txtLastName"; 157 | this.txtLastName.Size = new System.Drawing.Size(215, 29); 158 | this.txtLastName.TabIndex = 7; 159 | this.txtLastName.Text = "Smith"; 160 | // 161 | // txtEmail 162 | // 163 | this.txtEmail.Location = new System.Drawing.Point(131, 165); 164 | this.txtEmail.Margin = new System.Windows.Forms.Padding(5); 165 | this.txtEmail.Name = "txtEmail"; 166 | this.txtEmail.Size = new System.Drawing.Size(215, 29); 167 | this.txtEmail.TabIndex = 8; 168 | this.txtEmail.Text = "bob.smith@bs.com"; 169 | // 170 | // label4 171 | // 172 | this.label4.AutoSize = true; 173 | this.label4.Location = new System.Drawing.Point(35, 91); 174 | this.label4.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 175 | this.label4.Name = "label4"; 176 | this.label4.Size = new System.Drawing.Size(86, 21); 177 | this.label4.TabIndex = 9; 178 | this.label4.Text = "First Name"; 179 | // 180 | // label5 181 | // 182 | this.label5.AutoSize = true; 183 | this.label5.Location = new System.Drawing.Point(37, 131); 184 | this.label5.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 185 | this.label5.Name = "label5"; 186 | this.label5.Size = new System.Drawing.Size(84, 21); 187 | this.label5.TabIndex = 10; 188 | this.label5.Text = "Last Name"; 189 | // 190 | // label6 191 | // 192 | this.label6.AutoSize = true; 193 | this.label6.Location = new System.Drawing.Point(73, 169); 194 | this.label6.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 195 | this.label6.Name = "label6"; 196 | this.label6.Size = new System.Drawing.Size(48, 21); 197 | this.label6.TabIndex = 11; 198 | this.label6.Text = "Email"; 199 | // 200 | // btnActivate 201 | // 202 | this.btnActivate.BackColor = System.Drawing.Color.Blue; 203 | this.btnActivate.ForeColor = System.Drawing.Color.White; 204 | this.btnActivate.Location = new System.Drawing.Point(113, 121); 205 | this.btnActivate.Margin = new System.Windows.Forms.Padding(5); 206 | this.btnActivate.Name = "btnActivate"; 207 | this.btnActivate.Size = new System.Drawing.Size(138, 35); 208 | this.btnActivate.TabIndex = 12; 209 | this.btnActivate.Text = "Activate"; 210 | this.btnActivate.UseVisualStyleBackColor = false; 211 | this.btnActivate.Click += new System.EventHandler(this.btnActivate_Click); 212 | // 213 | // label3 214 | // 215 | this.label3.AutoSize = true; 216 | this.label3.Location = new System.Drawing.Point(33, 60); 217 | this.label3.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 218 | this.label3.Name = "label3"; 219 | this.label3.Size = new System.Drawing.Size(41, 21); 220 | this.label3.TabIndex = 16; 221 | this.label3.Text = "Item"; 222 | // 223 | // label7 224 | // 225 | this.label7.AutoSize = true; 226 | this.label7.Location = new System.Drawing.Point(9, 33); 227 | this.label7.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 228 | this.label7.Name = "label7"; 229 | this.label7.Size = new System.Drawing.Size(65, 21); 230 | this.label7.TabIndex = 15; 231 | this.label7.Text = "Domain"; 232 | // 233 | // txtItem 234 | // 235 | this.txtItem.Location = new System.Drawing.Point(75, 60); 236 | this.txtItem.Margin = new System.Windows.Forms.Padding(5); 237 | this.txtItem.Name = "txtItem"; 238 | this.txtItem.Size = new System.Drawing.Size(176, 29); 239 | this.txtItem.TabIndex = 14; 240 | this.txtItem.Text = "License Test"; 241 | this.txtItem.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; 242 | // 243 | // TxtDomain 244 | // 245 | this.TxtDomain.Location = new System.Drawing.Point(75, 30); 246 | this.TxtDomain.Margin = new System.Windows.Forms.Padding(5); 247 | this.TxtDomain.Name = "TxtDomain"; 248 | this.TxtDomain.Size = new System.Drawing.Size(176, 29); 249 | this.TxtDomain.TabIndex = 13; 250 | this.TxtDomain.Text = "Domain"; 251 | this.TxtDomain.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; 252 | // 253 | // label8 254 | // 255 | this.label8.AutoSize = true; 256 | this.label8.Location = new System.Drawing.Point(15, 247); 257 | this.label8.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 258 | this.label8.Name = "label8"; 259 | this.label8.Size = new System.Drawing.Size(106, 21); 260 | this.label8.TabIndex = 18; 261 | this.label8.Text = "Transaction id"; 262 | // 263 | // txtTransId 264 | // 265 | this.txtTransId.Location = new System.Drawing.Point(131, 241); 266 | this.txtTransId.Margin = new System.Windows.Forms.Padding(5); 267 | this.txtTransId.Name = "txtTransId"; 268 | this.txtTransId.Size = new System.Drawing.Size(215, 29); 269 | this.txtTransId.TabIndex = 17; 270 | this.txtTransId.Text = "Trans ID 1"; 271 | this.txtTransId.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; 272 | // 273 | // label9 274 | // 275 | this.label9.AutoSize = true; 276 | this.label9.Location = new System.Drawing.Point(22, 91); 277 | this.label9.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 278 | this.label9.Name = "label9"; 279 | this.label9.Size = new System.Drawing.Size(52, 21); 280 | this.label9.TabIndex = 20; 281 | this.label9.Text = "Expiry"; 282 | // 283 | // txtExpiry 284 | // 285 | this.txtExpiry.Location = new System.Drawing.Point(75, 91); 286 | this.txtExpiry.Margin = new System.Windows.Forms.Padding(5); 287 | this.txtExpiry.Name = "txtExpiry"; 288 | this.txtExpiry.Size = new System.Drawing.Size(176, 29); 289 | this.txtExpiry.TabIndex = 19; 290 | this.txtExpiry.Text = "2019/01/01"; 291 | this.txtExpiry.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; 292 | // 293 | // btnDeactivate 294 | // 295 | this.btnDeactivate.BackColor = System.Drawing.Color.Red; 296 | this.btnDeactivate.Location = new System.Drawing.Point(56, 577); 297 | this.btnDeactivate.Margin = new System.Windows.Forms.Padding(5); 298 | this.btnDeactivate.Name = "btnDeactivate"; 299 | this.btnDeactivate.Size = new System.Drawing.Size(138, 35); 300 | this.btnDeactivate.TabIndex = 21; 301 | this.btnDeactivate.Text = "DeActivate"; 302 | this.btnDeactivate.UseVisualStyleBackColor = false; 303 | this.btnDeactivate.Click += new System.EventHandler(this.btnDeactivate_Click); 304 | // 305 | // label10 306 | // 307 | this.label10.AutoSize = true; 308 | this.label10.Location = new System.Drawing.Point(44, 208); 309 | this.label10.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 310 | this.label10.Name = "label10"; 311 | this.label10.Size = new System.Drawing.Size(77, 21); 312 | this.label10.TabIndex = 23; 313 | this.label10.Text = "Company"; 314 | // 315 | // txtCompany 316 | // 317 | this.txtCompany.Location = new System.Drawing.Point(131, 203); 318 | this.txtCompany.Margin = new System.Windows.Forms.Padding(5); 319 | this.txtCompany.Name = "txtCompany"; 320 | this.txtCompany.Size = new System.Drawing.Size(215, 29); 321 | this.txtCompany.TabIndex = 22; 322 | this.txtCompany.Text = "XYZ"; 323 | this.txtCompany.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; 324 | // 325 | // label11 326 | // 327 | this.label11.AutoSize = true; 328 | this.label11.Font = new System.Drawing.Font("Segoe UI", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 329 | this.label11.Location = new System.Drawing.Point(51, 5); 330 | this.label11.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 331 | this.label11.Name = "label11"; 332 | this.label11.Size = new System.Drawing.Size(275, 25); 333 | this.label11.TabIndex = 25; 334 | this.label11.Text = "License Server Domain Settings"; 335 | // 336 | // txtLicenseServer 337 | // 338 | this.txtLicenseServer.Location = new System.Drawing.Point(56, 35); 339 | this.txtLicenseServer.Margin = new System.Windows.Forms.Padding(5); 340 | this.txtLicenseServer.Name = "txtLicenseServer"; 341 | this.txtLicenseServer.Size = new System.Drawing.Size(245, 29); 342 | this.txtLicenseServer.TabIndex = 24; 343 | this.txtLicenseServer.Text = "http://www.mydomain.com"; 344 | this.txtLicenseServer.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; 345 | // 346 | // label12 347 | // 348 | this.label12.AutoSize = true; 349 | this.label12.Location = new System.Drawing.Point(122, 25); 350 | this.label12.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 351 | this.label12.Name = "label12"; 352 | this.label12.Size = new System.Drawing.Size(224, 21); 353 | this.label12.TabIndex = 29; 354 | this.label12.Text = "Secret Key for License Creation"; 355 | // 356 | // label13 357 | // 358 | this.label13.AutoSize = true; 359 | this.label13.Location = new System.Drawing.Point(22, 71); 360 | this.label13.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 361 | this.label13.Name = "label13"; 362 | this.label13.Size = new System.Drawing.Size(313, 42); 363 | this.label13.TabIndex = 28; 364 | this.label13.Text = " Secret Key for License Veriication Requests \r\n(Embed in Source Code)"; 365 | this.label13.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; 366 | // 367 | // txtKeyLicCreate 368 | // 369 | this.txtKeyLicCreate.Location = new System.Drawing.Point(131, 51); 370 | this.txtKeyLicCreate.Margin = new System.Windows.Forms.Padding(5); 371 | this.txtKeyLicCreate.Name = "txtKeyLicCreate"; 372 | this.txtKeyLicCreate.Size = new System.Drawing.Size(215, 29); 373 | this.txtKeyLicCreate.TabIndex = 27; 374 | this.txtKeyLicCreate.Text = "5b06a6205a96f4.88239185"; 375 | // 376 | // txtKeyQuery 377 | // 378 | this.txtKeyQuery.Location = new System.Drawing.Point(56, 113); 379 | this.txtKeyQuery.Margin = new System.Windows.Forms.Padding(5); 380 | this.txtKeyQuery.Name = "txtKeyQuery"; 381 | this.txtKeyQuery.Size = new System.Drawing.Size(247, 29); 382 | this.txtKeyQuery.TabIndex = 26; 383 | this.txtKeyQuery.Text = "5b06a6205a97f1.60209273"; 384 | this.txtKeyQuery.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; 385 | // 386 | // label14 387 | // 388 | this.label14.AutoSize = true; 389 | this.label14.Location = new System.Drawing.Point(3, 283); 390 | this.label14.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 391 | this.label14.Name = "label14"; 392 | this.label14.Size = new System.Drawing.Size(118, 21); 393 | this.label14.TabIndex = 31; 394 | this.label14.Text = "Allowed Installs"; 395 | // 396 | // txtAllowedInstalls 397 | // 398 | this.txtAllowedInstalls.Location = new System.Drawing.Point(131, 279); 399 | this.txtAllowedInstalls.Margin = new System.Windows.Forms.Padding(5); 400 | this.txtAllowedInstalls.Name = "txtAllowedInstalls"; 401 | this.txtAllowedInstalls.Size = new System.Drawing.Size(215, 29); 402 | this.txtAllowedInstalls.TabIndex = 30; 403 | this.txtAllowedInstalls.Text = "1"; 404 | this.txtAllowedInstalls.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; 405 | // 406 | // groupBox1 407 | // 408 | this.groupBox1.Controls.Add(this.label17); 409 | this.groupBox1.Controls.Add(this.groupBox2); 410 | this.groupBox1.Controls.Add(this.txtProductref); 411 | this.groupBox1.Controls.Add(this.label16); 412 | this.groupBox1.Controls.Add(this.label14); 413 | this.groupBox1.Controls.Add(this.txtAllowedInstalls); 414 | this.groupBox1.Controls.Add(this.label12); 415 | this.groupBox1.Controls.Add(this.txtKeyLicCreate); 416 | this.groupBox1.Controls.Add(this.label10); 417 | this.groupBox1.Controls.Add(this.txtCompany); 418 | this.groupBox1.Controls.Add(this.label8); 419 | this.groupBox1.Controls.Add(this.txtTransId); 420 | this.groupBox1.Controls.Add(this.label6); 421 | this.groupBox1.Controls.Add(this.label5); 422 | this.groupBox1.Controls.Add(this.label4); 423 | this.groupBox1.Controls.Add(this.txtEmail); 424 | this.groupBox1.Controls.Add(this.txtLastName); 425 | this.groupBox1.Controls.Add(this.txtFirstName); 426 | this.groupBox1.Controls.Add(this.btnCreateLicense); 427 | this.groupBox1.Location = new System.Drawing.Point(361, 5); 428 | this.groupBox1.Name = "groupBox1"; 429 | this.groupBox1.Size = new System.Drawing.Size(415, 581); 430 | this.groupBox1.TabIndex = 32; 431 | this.groupBox1.TabStop = false; 432 | this.groupBox1.Text = "LICENSE CREATE DEBUG : Should be done by Woo Commerce "; 433 | // 434 | // label17 435 | // 436 | this.label17.AutoSize = true; 437 | this.label17.Location = new System.Drawing.Point(44, 363); 438 | this.label17.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 439 | this.label17.Name = "label17"; 440 | this.label17.Size = new System.Drawing.Size(116, 21); 441 | this.label17.TabIndex = 35; 442 | this.label17.Text = "Use Web Store!"; 443 | // 444 | // groupBox2 445 | // 446 | this.groupBox2.Controls.Add(this.TxtDomain); 447 | this.groupBox2.Controls.Add(this.label3); 448 | this.groupBox2.Controls.Add(this.txtItem); 449 | this.groupBox2.Controls.Add(this.txtExpiry); 450 | this.groupBox2.Controls.Add(this.label7); 451 | this.groupBox2.Controls.Add(this.label9); 452 | this.groupBox2.Controls.Add(this.btnActivate); 453 | this.groupBox2.Location = new System.Drawing.Point(126, 408); 454 | this.groupBox2.Name = "groupBox2"; 455 | this.groupBox2.Size = new System.Drawing.Size(262, 162); 456 | this.groupBox2.TabIndex = 34; 457 | this.groupBox2.TabStop = false; 458 | this.groupBox2.Text = "Activate Install - Enter Details"; 459 | // 460 | // txtProductref 461 | // 462 | this.txtProductref.Location = new System.Drawing.Point(131, 317); 463 | this.txtProductref.Margin = new System.Windows.Forms.Padding(5); 464 | this.txtProductref.Name = "txtProductref"; 465 | this.txtProductref.Size = new System.Drawing.Size(215, 29); 466 | this.txtProductref.TabIndex = 32; 467 | this.txtProductref.Text = "Product Desc"; 468 | this.txtProductref.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; 469 | // 470 | // label16 471 | // 472 | this.label16.AutoSize = true; 473 | this.label16.Location = new System.Drawing.Point(30, 322); 474 | this.label16.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 475 | this.label16.Name = "label16"; 476 | this.label16.Size = new System.Drawing.Size(91, 21); 477 | this.label16.TabIndex = 33; 478 | this.label16.Text = "Product Ref"; 479 | // 480 | // listActivations 481 | // 482 | this.listActivations.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 483 | this.listActivations.FullRowSelect = true; 484 | this.listActivations.GridLines = true; 485 | this.listActivations.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; 486 | this.listActivations.LabelWrap = false; 487 | this.listActivations.Location = new System.Drawing.Point(12, 456); 488 | this.listActivations.Name = "listActivations"; 489 | this.listActivations.Size = new System.Drawing.Size(343, 113); 490 | this.listActivations.TabIndex = 32; 491 | this.listActivations.UseCompatibleStateImageBehavior = false; 492 | this.listActivations.View = System.Windows.Forms.View.Details; 493 | // 494 | // pictureBox1 495 | // 496 | this.pictureBox1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.BackgroundImage"))); 497 | this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; 498 | this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 499 | this.pictureBox1.Location = new System.Drawing.Point(11, 242); 500 | this.pictureBox1.Name = "pictureBox1"; 501 | this.pictureBox1.Size = new System.Drawing.Size(157, 187); 502 | this.pictureBox1.TabIndex = 33; 503 | this.pictureBox1.TabStop = false; 504 | // 505 | // label15 506 | // 507 | this.label15.AutoSize = true; 508 | this.label15.Location = new System.Drawing.Point(8, 432); 509 | this.label15.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); 510 | this.label15.Name = "label15"; 511 | this.label15.Size = new System.Drawing.Size(191, 21); 512 | this.label15.TabIndex = 34; 513 | this.label15.Text = "Activated Domains Report"; 514 | // 515 | // frmDiagnostics 516 | // 517 | this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 21F); 518 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 519 | this.ClientSize = new System.Drawing.Size(788, 683); 520 | this.Controls.Add(this.label15); 521 | this.Controls.Add(this.listActivations); 522 | this.Controls.Add(this.pictureBox1); 523 | this.Controls.Add(this.groupBox1); 524 | this.Controls.Add(this.label13); 525 | this.Controls.Add(this.txtKeyQuery); 526 | this.Controls.Add(this.btnDeactivate); 527 | this.Controls.Add(this.label11); 528 | this.Controls.Add(this.txtLicenseServer); 529 | this.Controls.Add(this.btnCheckKey); 530 | this.Controls.Add(this.lblResponse); 531 | this.Controls.Add(this.label2); 532 | this.Controls.Add(this.txtMyLicense); 533 | this.Controls.Add(this.label1); 534 | this.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 535 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 536 | this.Margin = new System.Windows.Forms.Padding(5); 537 | this.MaximizeBox = false; 538 | this.MinimizeBox = false; 539 | this.Name = "frmDiagnostics"; 540 | this.Text = "Woo Commerce - Software Manager License Diagnostics"; 541 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmDiagnostics_FormClosing); 542 | this.Load += new System.EventHandler(this.Form1_Load); 543 | this.groupBox1.ResumeLayout(false); 544 | this.groupBox1.PerformLayout(); 545 | this.groupBox2.ResumeLayout(false); 546 | this.groupBox2.PerformLayout(); 547 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 548 | this.ResumeLayout(false); 549 | this.PerformLayout(); 550 | 551 | } 552 | 553 | #endregion 554 | 555 | private System.Windows.Forms.Button btnCreateLicense; 556 | private System.Windows.Forms.Label label1; 557 | private System.Windows.Forms.TextBox txtMyLicense; 558 | private System.Windows.Forms.Label label2; 559 | private System.Windows.Forms.Label lblResponse; 560 | private System.Windows.Forms.Button btnCheckKey; 561 | private System.Windows.Forms.TextBox txtFirstName; 562 | private System.Windows.Forms.TextBox txtLastName; 563 | private System.Windows.Forms.TextBox txtEmail; 564 | private System.Windows.Forms.Label label4; 565 | private System.Windows.Forms.Label label5; 566 | private System.Windows.Forms.Label label6; 567 | private System.Windows.Forms.Button btnActivate; 568 | private System.Windows.Forms.Label label3; 569 | private System.Windows.Forms.Label label7; 570 | private System.Windows.Forms.TextBox txtItem; 571 | private System.Windows.Forms.TextBox TxtDomain; 572 | private System.Windows.Forms.Label label8; 573 | private System.Windows.Forms.TextBox txtTransId; 574 | private System.Windows.Forms.Label label9; 575 | private System.Windows.Forms.TextBox txtExpiry; 576 | private System.Windows.Forms.Button btnDeactivate; 577 | private System.Windows.Forms.Label label10; 578 | private System.Windows.Forms.TextBox txtCompany; 579 | private System.Windows.Forms.Label label11; 580 | private System.Windows.Forms.TextBox txtLicenseServer; 581 | private System.Windows.Forms.Label label12; 582 | private System.Windows.Forms.Label label13; 583 | private System.Windows.Forms.TextBox txtKeyLicCreate; 584 | private System.Windows.Forms.TextBox txtKeyQuery; 585 | private System.Windows.Forms.Label label14; 586 | private System.Windows.Forms.TextBox txtAllowedInstalls; 587 | private System.Windows.Forms.GroupBox groupBox1; 588 | private System.Windows.Forms.PictureBox pictureBox1; 589 | private System.Windows.Forms.ListView listActivations; 590 | private System.Windows.Forms.Label label15; 591 | private System.Windows.Forms.TextBox txtProductref; 592 | private System.Windows.Forms.Label label16; 593 | private System.Windows.Forms.GroupBox groupBox2; 594 | private System.Windows.Forms.Label label17; 595 | } 596 | } 597 | 598 | -------------------------------------------------------------------------------- /frmDiagnostics.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Text; 4 | using System.Windows.Forms; 5 | using System.Net; 6 | using System.Collections.Specialized; 7 | using System.Runtime.Serialization.Json; 8 | using System.IO; 9 | using System.Diagnostics; 10 | 11 | namespace License 12 | { 13 | public partial class frmDiagnostics : Form 14 | { 15 | public frmDiagnostics() 16 | { 17 | InitializeComponent(); 18 | } 19 | 20 | private void btnCreateLicense_Click(object sender, EventArgs e) 21 | { 22 | var retval = MessageBox.Show("This is a DEBUG order creation\r\n Create order via website in Woo Commerce(use Token 'test' to pay)\r\nUse Website instead of DEBUG", "Order DeBUG or online", MessageBoxButtons.YesNo); 23 | 24 | if(retval == DialogResult.Yes) 25 | { 26 | string url = "http://www.mydomain.com/product/install/"; //Link to woocommerce product cart/site, for debug purposes, if you buy from here it creates license and entries. 27 | try 28 | { 29 | Process.Start(url); 30 | } 31 | catch (Win32Exception) 32 | { 33 | Process.Start("IExplore.exe", url); 34 | } 35 | return; 36 | } 37 | //HTTP POST method. 38 | LicenseResponse License = new LicenseResponse(); 39 | using (WebClient client = new WebClient()) 40 | { 41 | var response = client.UploadValues(txtLicenseServer.Text, new NameValueCollection() 42 | { 43 | { "secret_key", txtKeyLicCreate.Text}, 44 | { "slm_action", "slm_create_new" }, 45 | 46 | { "first_name" , txtFirstName.Text }, 47 | { "last_name", txtLastName.Text }, 48 | { "email", txtEmail.Text }, 49 | { "company_name", txtCompany.Text}, 50 | { "txn_id", txtTransId.Text}, 51 | 52 | { "max_allowed_domains", "1" }, 53 | 54 | { "date_created", DateTime.Now.ToString("yyyy/MM/dd") }, 55 | { "date_renewed", (DateTime.Now.AddDays(1)).ToString("yyyy/MM/dd") }, //Dont work 56 | { "date_expiry", (DateTime.Now.AddYears(2)).ToString("yyyy/MM/dd") }, 57 | { "manual_reset_count", "0" }, 58 | 59 | { "registered_domain", TxtDomain.Text }, 60 | { "product_ref", txtItem.Text}, 61 | 62 | { "lic_status", "active" }, 63 | }); 64 | 65 | string result = System.Text.Encoding.UTF8.GetString(response); 66 | License = FromJson(result); 67 | 68 | } 69 | 70 | if (License != null) 71 | { 72 | lblResponse.Text = $"Result: {License.result} | Message: {License.message} | Key: {License.key}"; 73 | txtMyLicense.Text = License.key; 74 | } 75 | else 76 | { 77 | lblResponse.Text = "No Response?"; 78 | } 79 | } 80 | 81 | private void btnCheckKey_Click(object sender, EventArgs e) 82 | { 83 | CheckKey(); 84 | } 85 | 86 | void CheckKey() 87 | { 88 | ClearInfo(); 89 | 90 | LicenseResponse License = new LicenseResponse(); 91 | 92 | using (WebClient client = new WebClient()) 93 | { 94 | var response = client.UploadValues(txtLicenseServer.Text, new NameValueCollection() 95 | { 96 | { "secret_key", txtKeyQuery.Text}, 97 | { "slm_action", "slm_check" }, 98 | { "license_key" , txtMyLicense.Text } 99 | }); 100 | 101 | string result = System.Text.Encoding.UTF8.GetString(response); 102 | License = FromJson(result); 103 | } 104 | 105 | if (License != null) 106 | { 107 | lblResponse.Text = $"Result: {License.result} | Message: {License.message} | Key: {License.key}"; 108 | 109 | txtFirstName.Text = License.first_name; 110 | txtLastName.Text = License.last_name; 111 | txtEmail.Text = License.email; 112 | txtCompany.Text = License.company_name; 113 | txtTransId.Text = License.txn_id; 114 | txtAllowedInstalls.Text = License.max_allowed_domains; 115 | 116 | txtProductref.Text = License.product_ref; 117 | 118 | listActivations.Items.Clear(); 119 | if (License.registered_domains == null) 120 | return; 121 | 122 | foreach (RegDomains domain in License.registered_domains) 123 | { 124 | listActivations.Items.Add(new ListViewItem(new string[] { 125 | domain.id, 126 | domain.registered_domain, 127 | domain.item_reference, 128 | })); 129 | 130 | txtItem.Text = domain.item_reference; 131 | 132 | } 133 | 134 | listActivations.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); 135 | listActivations.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); 136 | listActivations.Refresh(); 137 | } 138 | else 139 | { 140 | lblResponse.Text = "No Response?"; 141 | } 142 | 143 | } 144 | 145 | 146 | public T FromJson(string json) 147 | { 148 | if (json == "") 149 | return default (T); //Nothing at this domain? Incorrect entry 150 | 151 | try 152 | { 153 | var serializer = new DataContractJsonSerializer(typeof(T)); 154 | using (var tempStream = new MemoryStream(Encoding.Unicode.GetBytes(json))) 155 | { 156 | return (T)serializer.ReadObject(tempStream); 157 | } 158 | } 159 | catch 160 | { 161 | return default(T); //Nothing at this domain? Incorrect entry 162 | } 163 | } 164 | 165 | 166 | /* 167 | - Create license keys in your system (license server) 168 | - Check the status of a license key from from your application (remotely) 169 | - Activate a license key from your application (remotely) 170 | - Deactivate a license key (remotely) 171 | - Check a license key (remotely) 172 | - Track where the license key is being used. 173 | */ 174 | //http://www.mydomain.com/?secret_key=%275b06a6205a97f1.60209273%27&slm_action=slm_check&license_key=%27123%27 175 | //http://www.mydomain.com/?secret_key='5b06a6205a97f1.60209273'&slm_action=slm_check&license_key='123' 176 | //{ "result":"error","message":"Verification API secret key is invalid","error_code":90} 177 | //{"result":"success","message":"License successfully created","key":"5580effe188d3"} 178 | public class LicenseResponse 179 | { 180 | public string result { get; set; } 181 | public string message { get; set; } 182 | public string key { get; set; } 183 | public string status { get; set; } 184 | public string max_allowed_domains { get; set; } 185 | public string email { get; set; } 186 | public RegDomains[] registered_domains { get; set; } 187 | public string date_created { get; set; } 188 | public string date_renewed { get; set; } 189 | public string date_expiry { get; set; } 190 | public string product_ref { get; set; } 191 | public string first_name { get; set; } 192 | public string last_name { get; set; } 193 | public string company_name { get; set; } 194 | public string txn_id { get; set; } 195 | 196 | } 197 | 198 | public class RegDomains 199 | { 200 | public string id { get; set; } 201 | public string lic_key_id { get; set; } 202 | public string lic_key { get; set; } 203 | public string registered_domain { get; set; } 204 | // public string item_reference { get; set; } 205 | public string item_reference { get; set; } 206 | 207 | } 208 | 209 | 210 | private void btnActivate_Click(object sender, EventArgs e) 211 | { 212 | if (TxtDomain.Text == "") 213 | TxtDomain.Text = "Domain"; 214 | 215 | if(txtItem.Text =="") 216 | { 217 | txtItem.Text = "v1.0"; 218 | } 219 | //Activate 220 | LicenseResponse License = new LicenseResponse(); 221 | using (WebClient client = new WebClient()) 222 | { 223 | var response = client.UploadValues(txtLicenseServer.Text, new NameValueCollection() 224 | { 225 | { "secret_key", txtKeyQuery.Text}, 226 | { "slm_action", "slm_activate" }, 227 | 228 | { "license_key" , txtMyLicense.Text }, 229 | { "registered_domain", TxtDomain.Text }, 230 | { "item_reference", txtItem.Text} 231 | 232 | }); 233 | 234 | string result = System.Text.Encoding.UTF8.GetString(response); 235 | License = FromJson(result); 236 | } 237 | 238 | if (License != null) 239 | { 240 | lblResponse.Text = $"Result: {License.result} | Message: {License.message} | Key: {License.key}"; 241 | // txtMyLicense.Text = License.key; 242 | } 243 | else 244 | { 245 | lblResponse.Text = "No Response?"; 246 | } 247 | 248 | if (License.result != "error") 249 | { 250 | CheckKey(); 251 | } 252 | } 253 | 254 | class DomainItem 255 | { 256 | 257 | public string id { get; set; } 258 | public string lic_key { get; set; } 259 | public string registered_domain { get; set; } 260 | public string product_ref { get; set; } 261 | 262 | } 263 | 264 | private void btnDeactivate_Click(object sender, EventArgs e) 265 | { 266 | 267 | DomainItem domain = new DomainItem(); 268 | if (listActivations.SelectedItems.Count == 0 ) 269 | return; 270 | domain.id = listActivations.SelectedItems[0].SubItems[0].Text; 271 | domain.registered_domain = listActivations.SelectedItems[0].SubItems[1].Text; 272 | domain.product_ref = listActivations.SelectedItems[0].SubItems[2].Text; 273 | 274 | 275 | //MultiSite 276 | LicenseResponse License = new LicenseResponse(); 277 | using (WebClient client = new WebClient()) 278 | { 279 | var response = client.UploadValues(txtLicenseServer.Text, new NameValueCollection() 280 | { 281 | { "secret_key", txtKeyQuery.Text}, 282 | { "slm_action", "slm_deactivate" }, 283 | 284 | { "license_key" , txtMyLicense.Text }, 285 | { "registered_domain", domain.registered_domain }, //TxtDomain.Text }, 286 | { "product_ref", domain.product_ref } //txtItem.Text} //item_reference 287 | }); 288 | 289 | string result = System.Text.Encoding.UTF8.GetString(response); 290 | License = FromJson(result); 291 | } 292 | 293 | if (License != null) 294 | { 295 | lblResponse.Text = $"Result: {License.result} | Message: {License.message} | Key: {License.key}"; 296 | // txtMyLicense.Text = License.key; 297 | } 298 | else 299 | { 300 | lblResponse.Text = "No Response?"; 301 | } 302 | 303 | CheckKey(); 304 | } 305 | 306 | void ClearInfo() 307 | { 308 | txtFirstName.Text = txtLastName.Text = txtEmail.Text = txtCompany.Text = txtTransId.Text = TxtDomain.Text = txtItem.Text = txtExpiry.Text = txtProductref.Text = txtAllowedInstalls.Text = ""; 309 | listActivations.Items.Clear(); 310 | 311 | } 312 | private void Form1_Load(object sender, EventArgs e) 313 | { 314 | txtLicenseServer.Text = Properties.Settings.Default.Domain; 315 | txtKeyQuery.Text = Properties.Settings.Default.secretKeyVerification; 316 | txtKeyLicCreate.Text = Properties.Settings.Default.secretKeyCreation; 317 | 318 | listActivations.Items.Clear(); 319 | listActivations.View = View.Details; 320 | listActivations.Columns.Add("id"); 321 | listActivations.Columns.Add("Domain"); 322 | listActivations.Columns.Add("Product"); 323 | 324 | listActivations.GridLines = true; 325 | CheckKey(); 326 | } 327 | 328 | private void frmDiagnostics_FormClosing(object sender, FormClosingEventArgs e) 329 | { 330 | Properties.Settings.Default.Domain = txtLicenseServer.Text; 331 | Properties.Settings.Default.secretKeyVerification = txtKeyQuery.Text; 332 | Properties.Settings.Default.secretKeyCreation = txtKeyLicCreate.Text; 333 | 334 | Properties.Settings.Default.Save(); 335 | 336 | } 337 | } 338 | } 339 | -------------------------------------------------------------------------------- /frmDiagnostics.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | 123 | 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 207 | 1Je1stoW5XW++n0uzV0tr8eMbW03dUkw+nWX9odaN2Vrz70mc1yTHIyerd5jdL96zaiPR2Ty0+qhTz7H 208 | dfHXtmiH4xHKe1u5dmSpP0tGi3jtfH1myusz1X4uXV/18cv1I9xnbbyvHcNck/ZG5bFUxjn6NXrWlNX6 209 | ud+W+Vt7VozKaz8uPW+39vxR6/BsbNz85H757T1jcO39R9I+7dBePZ/2c/6W9UrfafOavo2eL+p9+j1R 210 | rx2NSa5JvZG0yU+evV4foz7W+3Ht2hwiyQfXUDb65Wpp7NNP7snxCNdcKr/0HNVSX9bKaluUZ2x7GS7N 211 | XS2vx/xc0uumnyPcbzQea8+9ZtQWRs9W7zG6X71mqd2jMflp9dAnn+P6oaptsaHkq9LIh4Cfva36W3G9 212 | hvOo5y4ZLeLofeb+9Vwv5zc4zqXvS+1GH79svv23ENriHPeivJYxbtz32jHE1g/r6Fk4zrlROW0j75EA 213 | u2X+1tYWRv3N+Gx53m7t+aPW4Wed+zoevW7qXHqmjvq0AcY455nr0Xne1z71fvby2sd8y5JvVC5ZGq+0 214 | k36Nnpn3OTcqTz8vfR7quZFLc5D7pKzOIe1zfb0PdXt7yPqvY5dztHXps3nrZ7eiDnW5JucyJzwLP+sz 215 | p37O9fJ+n9oXyvhMpww8S+rXutRjn6p16Q/P2Ote2h8ytrkWo8R1i9HYLp2v858+1Psxh6NnT/kRmfy0 216 | esjkZ/PguH6oals55hoWC9fQLouJ49FC4t6UJ1hm8VOX93xwcrxmtIgji5063JsPLx/i3JP7o34Y0s+1 217 | dqOPH9fRPhsIz517pg+c4zjjmHG5ZQxz/5RTN+VVbSttY+lZOa79yXPkfpfmb21tgT5krNKHusFeet5u 218 | VL+rdeh7fX6OKcsYXLo/11An4z1ar2mD56rtZKz6+UvrlbL6Gex9zDPwnn5RTluU9ff9WvDsmYOcr+uA 219 | 9+l7AttoTiinn7RBe0ufB+rWPnWjPtb7rc1h7k19jrk/5Xmf9sC1XEd9jlO3tk05/alt5fN0qfzSc3SZ 220 | d64F7aTf166Rfp/aF8o4znz3ua11c5zPB/fP3NZy+pv70u+l/aGPH23V9qnXk6eR2sd6nnZr/3IPnjXl 221 | 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 375 | 7PUnHL7N4s+KW/+cNjuSOMbLb30kHZnJj55F/UZhVH5v+XcrIPEa/TsYfS5zxL9zOkoyJ0kjJj+SJOlU 376 | TH4kSdKpmPxIkqRTMfmRJEmnYvIjSZJOxeRHkiSdismPJEk6FZMfSZJ0KiY/kiTpVEx+JEnSqZj8SJKk 377 | UzH5kSRJp2LyI0mSTsXkR5IknYrJjyRJOhWTH0mSdComP5Ik6VRMfiRJ0qmY/EiSpFMx+ZEkSadi8iNJ 378 | kk7F5EeSJJ2KyY8kSToVkx9JknQqJj+SJOlUDpX8/Pa3v5UkSQczivm3MPmRJElTG8X8Wxwy+RmVSdJT 379 | uK+ci/M9l73mw+RHkla4r5yL8z2XvebD5EeSVrivnIvzPZe95sPkR5JWuK+ci/M9l73mw+RHkla4r5yL 380 | 8z2XvebD5EeSVrivnIvzPZe95sPkR5JWuK+ci/M9l73mw+RHkla4r5yL8z2XvebD5EeSVrivnIvzPZe9 381 | 5sPkR5JWuK+ci/M9l73mw+RHkla4r5yL8z2XvebD5EeSVrivnIvzPZe95sPkR5JWuK+ci/M9l73mw+RH 382 | kla4r5yL8z2XvebD5EeSVrivnIvzPZe95sPk55O3b99+fPHixdDr168//vLLL8PrbpH279H2hw8fPr5/ 383 | //7h56hc0tPduvnyGX/z5s3Hly9ffrG3/Pzzz8Nr9tT3i+x/9JH39InyPfa9b8Et831LLHn16tVDvZ9+ 384 | +mlYfla3fv6WmPx8kgXL4uRDDxbg999//3D+hx9+GF53i3wg7rHB9M1L0v3csvmSSHz33XcPn0+CG/sK 385 | +wt7TfaAH3/8cXjtXvp+QX84l6B79iB8y3zfEkvevXv3cP3XSIhndst8rDH5+WQpeWDRch71/D2kXZMf 386 | aW63bL5JJAh6/bNO0nPPfWCrS/uFyc/tyc9zxpKju2U+1pj8fLK0YMnas2DZnLIpJIvnZ67Pb3c5X7N3 387 | Fn79yjvXo7ZbN5t+jvbqddwvvynkHNInSffx1H2Fz2w+l0u/zWdf4HOc/aZ+hkfn2KfqfkMbaT/1Ka97 388 | DvsJe81ov6j7X/adWp7j3B9pmz2onj+Cp8436ljW81tiydY9v7ZZy8H9U34Ut8zHGpOfT0YLlr+HZzHy 389 | k3N1Y6Auv7nlWhYhizHvwSLPBpiFy8KuG9eW5Ie+cE3aQNqgPF+h56vWtCHpdk/dV/LNDnsDn/NRHfYR 390 | 6vB5T4Ckfsr7ub7f5B7sB7U++LaJ99TlPfdiL+n7Rd3/asClbd5nr0ngrXva0nN9y54637gllmzd8xl/ 391 | yjlOeZ1n2sq9j+CW+Vhj8vNJTVg6FhQLjXpZnHVhZ0GmDijnHO3W45SzuDmHLclP+sdmlfJ8WPg5+sBJ 392 | uo9b9xX2kFE5ap0kLrV+P0eg4xoCYOpQDvaS1GdfSmKS/SZt9P2iv+/7Ufaw/HuVvK/70ZE8db6RsRxh 393 | /NdiyTV7fuagJjpJiPhWLueO4Jb5WGPy80ldaGweVa3XN4VsNHWz6uf7NcE5bEl+ltqIvnlJup+n7isk 394 | Knwu14JRTSxG+0k/x36RBIh9gfOUoyY/a230/aK/7/tNvukB7/MnL9rl/dE8db7x1FjSz13a81O+JInv 395 | EdwyH2tMfj7Zmjz0BcmC5n3daPr5pUXMOZj8SHN76r6S38RRv6nhM5/3SST4DX60n/Rz/OQ9wTV/7uA9 396 | 9kp+kH5Sh5+8P1KArZ4633hqLOnnLu35l8qP5Jb5WGPy88ktC/bSn73Sdv36sm9YvV3OpV3O1fbSBu3l 397 | 3Nb+S7reLZtvPtv8zLl8XpNQ8Fln/xglLqnLuVE5ewXnsGfyQ3LGueCalB3NLfPdx3LJaIzruafs+awh 398 | 2qh/CjuCW+ZjjcnPJ7cs2FzLRsYmk00iGxqSyFDGtWxCvAcbVhZ1Nji+Ak859Wkj7/ltr96D3yDTB66r 399 | v2FKut0tm2/9/PP55vOMnEOCVf2cc47Per22lqedvpdck/xkv+j7X/Y5znPP3jcceZ+5Zb77WC65lPzU 400 | 8R7t+ZRnbVBe10Jt8whumY81Jj+f3LJgwfV1M6MeG07KWax1k+obFtI2SKTyW2Huxc+cA23kHvWDkA1O 401 | 0n3cuvny+WZvqXsExyQfOZcEqCY8yL6Qz3Uv5xen/PKUfafWRz/X94u+/7HX8L6eQ/rCz5w7olvm+17J 402 | D+/X9nz0uELdrKMjufXzt8TkR5JW7LmvkIgQMPk5Kp9JgjMJ2Kj8KIwjc9lrPkx+JGnF2fcVvmEg4cm3 403 | C3yTNap3FMaRuew1HyY/krTi7PtKvvHhT2VH/9YHxpG57DUfJj+StMJ95Vyc77nsNR8mP5K0wn3lXJzv 404 | uew1HyY/krTCfeVcnO+57DUfJj+StMJ95Vyc77nsNR8mP5K0wn3lXJzvuew1HyY/krTCfeVcnO+57DUf 405 | Jj+StMJ95Vyc77nsNR8mP5K0wn3lXJzvuew1HyY/krTCfeVcnO+57DUfJj+StMJ95Vyc77nsNR8mP5K0 406 | wn3lXJzvuew1HyY/krTCfeVcnO+57DUfJj+StMJ95Vyc77nsNR+HTH4kSdJxjGL+LUx+JEnS1EYx/xb+ 407 | 2UuSVrivnIvzPZe95sPkR5JWuK+ci/M9l73mw+RHkla4r5yL8z2XvebD5EeSVrivnIvzPZe95sPkR5JW 408 | uK+ci/M9l73mw+RHkla4r5yL8z2XvebD5EeSVrivnIvzPZe95sPkR5JWuK+ci/M9l73mw+RHkla4r5yL 409 | 8z2XvebD5EeSVrivnIvzPZe95sPkR5JWuK+ci/M9l73mw+RHkla4r5yL8z2XvebD5EeSVrivnIvzPZe9 410 | 5sPkR5JWuK+ci/M9l73mw+RHkla4r5zLPeb7/fv3H7///vthma6z1+fv9MnPmzdvPr548eLju3fvvij7 411 | 5ZdfHspYxL/5zW8ejn/66acv6nVv3759qMv1vOeD8OHDhy/q3eLVq1c3f7ju0QZ4Tp6xPu/WsZrFpT5T 412 | xloZlenY7rX58llzDc3vlvlmD/zhhx8e9gu8fPlyGFvAWtiy/7In0U7aJL7U8p9//vlhL085989efAT3 413 | +vx1p09+WDhZML2MRZvFRvLCT+r3eh2BlLpZgLRx701vpuSnJw7XjNUsTH605NbNl33gxx9/dA19I26Z 414 | b/ZTsP/xM4lQT4DYZ7777ruL+y97KdfTTuIK71lPqUNiRDu0yX1odxTPvlW3fv6W+GevT1g4LKh+Pgv3 415 | 1m9taONMyc+3yORHS27ZfBOswjU0v6fOd36RJgFhP8neyk/2Wo6zz8Sl/Zf1QjJTYxBtkfBwzH5FO3Xf 416 | ypq7NW7N4pbP3xqTn0/yW1nNzvltjXN90WaR8ZOFy7nUyzc9WXxpI7LQ+9eUnK/fknDu9evXv9ZJuxVl 417 | aS9945p8PcoHpj5Pv2faTxv1OPq5fBBr+/3DTJ0+VvSf+6UO19YPK+e4V+3fpSBR+9LrZ/xrHcaljjF1 418 | 6rNkDdR+Vf0e3aU57WNAYk2dPuaaz70230trSHN46nzzeWeO2UvYAy99tkd7bkc59eq57FUkN9njaoxI 419 | P+r+/y271+evM/n5pH61mHMsnCxk3teAzkJjwRHMOM+5fPVI3Zr85LrUzbXUzbUcpz7Xcwz6Q1t1YUf9 420 | 4OQetJuEpLaJ+tVoLU8bow9iPZcPWdrPt2Ic58PITz546U8SCdrh2tw716acY/CslCdJSHmX8c0mU+9f 421 | y/O8yJhTnvq5X95j6Z6ULQWuLXPKM4/GL33SvO61+a6tIc3jlvnO557PN3vuaO+O0Z7bjdYM+wfn2WeW 422 | 2jjSWrvX568z+XmUYFTfE6yyeOuCy3GCbcqTqCT45tq6EBNo61eS1OMc16U+i3rrByf9yfWgn5zjZ46p 423 | l/LcM22MPkT1HHVJSlLG9ZTzPHVsKKvvl34LoV2u55jyHCN9W/rw0lYde9T6Gf/6vJRxjrbrvXt5nqFb 424 | 68+lOa3HtbwmZJrXvTbftTWkedwy33yu+ZznG3gQSzjf69b9dclozdT9damNI621e33+OpOfRwRUFgw/ 425 | E6xYtCnvAZ4Fx3sCGElBrqMswTfvOc5CXFqs9Xytv6TW733r53p/orYx6lfOjdqvevmWe9fz/OzPOzoX 426 | XMN400b6WOuP7nnpfpeecXRNjMaunl9qe+k6zeVem+/aGtI87jHffOb5bOcXo7X9oZ+vRmum7idLbRxp 427 | rd3r89eZ/DxKUCThqYlQykcBjG81CKr51ihfc/bgy3EW4qVAyXGtv6TWH/WtnhslA6htjPqVc6P2q16+ 428 | 5d6XkpHRuaBPjDVtcK/cL/VH97x0v0vPOLomRmNXzy+1vXSd5nKvzXdtDWkeT51vPufsMznOZ5s5Z+7X 429 | 9t8llFOvnqvfNKftWu6/+dnG5KfIvzXhZ/97bQ1gLKq+IDmf8h58Oc6md+lPJL3+kvrBGQXXei7H9cPA 430 | PeufXfoHsZb3/iH/Topz/f71/dY/e/XnHZ3D6FnTv9Tv49/PcV/mN2W1vLZb1fa7p84pfahjrjnda/Nd 431 | W0Oax1Pnmz2OOc6/e8xnmzmv/4Qi+p47wrW0Wa/NdZxjv6K87lvZy+p+9C271+evM/kpspBQ/30LatDN 432 | Md/4cAyOWeAsuB58U5cPBeeoR+DLtSzkXJv6lzbJ+sFJf+oHoJ/LPdL/fFuVNpL4EcjXyvmA1z7ng04Z 433 | z80z9HvT17ynLG2lnOP+vKNzoH3KMva0QV9q/T7+/RzXcEw/aINn4lk4lz51lOWe3ZY5zSaW8evjq3nd 434 | a/Nlvi99rvX1PXW+6z7AfsPP/GLU4wlGyQ97Q/ZR3me/o27KeE+7uYb7gL0rexn7S8q/dff6/HUmP02C 435 | IAutnuc95xMca9AFx7mmB98Evix0EoYkBMjCpgycu7RJ1g9O79voHH1JwAXHXJ82KK994sPay5O0gPO1 436 | z7znPP0e3bteyweVD2muzXV5v3QuarKSttI+9+7jj36Oa7g2beT6OoYVZUto89KcUofnSb8zfxlfzete 437 | my/zfulzra/vlvlmH8heCD7v7D11L4q6h0f2qboPcZy9atRe33vYy5I8HcG9Pn+dyY/0DEiE+obEhnak 438 | 39COyn3lXO4x33ze/cXmPvb6/Jn8SM+AjZBkh9/i2BgvfdOkebivnMs95ptfdOqfpvR0e33+TH6kZ9C/ 439 | miYRqn/607zcV87F+Z7LXvNh8iNJK9xXzsX5nste82HyI0kr3FfOxfmey17zYfIjSSvcV87F+Z7LXvNh 440 | 8iNJK9xXzsX5nste82HyI0kr3FfOxfmey17zYfIjSSvcV87F+Z7LXvNh8iNJK9xXzsX5nste82HyI0kr 441 | 3FfOxfmey17zYfIjSSvcV87F+Z7LXvNh8iNJK9xXzsX5nste82HyI0kr3FfOxfmey17zYfIjSSvcV87F 442 | +Z7LXvNh8iNJK9xXzsX5nste83HI5EeSJB3HKObfwuRHkiRNbRTzb+GfvSRJemQcmcte82HyI0nSI+PI 443 | XPaaD5MfSZIeGUfmstd8mPxIkvTIODKXvebD5EeSpEfGkbnsNR8mP5IkPTKOzGWv+TD5kSTpkXFkLnvN 444 | h8mPJEmPjCNz2Ws+TH4kSXpkHJnLXvNh8iNJ0iPjyFz2mg+TH0mSHhlH5rLXfJj8SJL0yDgyl73mw+RH 445 | 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 489 | Pv7/udSGc9YJi7EAAAAASUVORK5CYII= 490 | 491 | 492 | -------------------------------------------------------------------------------- /packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | --------------------------------------------------------------------------------