├── 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 | kqRHxpG57DUfJj+SJD0yjsxlr/kw+ZEk6dE94sj79+8/fv/998MyXWevuG7y8+inn356WKwvXrz4Fe9Z
446 | xKP6I2/fvn247s2bN8Ny/Pzzzw9t/vLLL8PyEepf0w/qpv+jcknS2C1xhH39hx9++DWGvHz58uO7d++G
447 | dYkTW/ZoYhPtpE3iTC0nprx69erXcu5/TXyZ3S3zscbk55MkC999993DQuU9C4z3nGfxja7rtiQ/WaRb
448 | 2wT1sXVBm/xI0tPcEmzZc0Es4GcSoZ4Asf8TXy7t0R8+fHi4nnYSl3j/448//lqHxIh2aJP70C71azvf
449 | slvmY43JzydLCzQLbetCMvmRpG/bU+MI38Cw7+YX6Oy//GTf5zh7c1zao4klJDMkQTlHWyQ8HBNHaKfG
450 | k8Shes237KnzcYnJzydJSGo2DZINFit4nwVbk5B6LouOhZlvjcB56uY+kSSJhVu/1uTaLOZaHzmfD0XO
451 | cz0fPsp68sN7+tCTO0nS554aR5L8EEfYcy8lNsSDS3Vq4hS0z31IbhIHakyqSVi97lv11Pm4xOTnExYJ
452 | iwUstCzeXi91LiU/4JhEhcWb9yzKvOcevE+ikoSHviSp4X3KwTELPvehLc7lw8B19CnX5INV66ffkqQv
453 | 3RJss7/z1wJ+Ia2xotuS/NBW/0tC9nfiw1Ibo+u+VbfMxxqTn0csJBZs/TYFnMsCzrlLyQ8LMnWyUPM1
454 | JWW85368H/3JjbK0w3uOkTapm2Qq19Q6PfmRJG1zSxxJHKjf5NcYUpn8bHPLfKwx+RkgqeDblCxgFi/n
455 | OUZdyPVckp++6GqdnvzUsqVreh1+JgHK4q91TH4k6WnuEUfYg9l/8638aC82+dnmXnG9O33yQ6LDAhot
456 | lJ541OPUqeeeK/lhsfP+9evXD0lQPgypY/IjSU/z1GDLvksMyHH2X+JB3b9jS/JDOfXquSRU+Tc/HNdy
457 | Yhrn6l8TvmVPnY9LTp/8sIBYKKPFmcQj/6Cs1+tJR5KffFNU62SR9+Tn2j97jRKb3rdRHUnSZU8Ntuzh
458 | 7Lv5t5zZf0lQEkNq/S3JzyhxynWcS6xIPEHikP+11zr/7PVJEhD+zJVvUvjJAuN8vsnJn8H4xoXFlnKw
459 | ELPock2tk+QmyQ91WZxJVEB91H/wzDW1PFl9rd/70ZMf3nO/mmBJkr701DjC3sveTZxgv+VnvqUhZvT6
460 | o+Qne3USl/xyTt2U8Z52cw33AbGAPZ4+1F/Av3VPnY9LTH4+SeKS5CZYmCwyyqlH4lHrJJFBTX5qHY7r
461 | QmWBpixJFef6NTVRSfaPusBzjg8WOM6HhON8sNKv/kGTJH3ulmBLjGCfzd7MPs3+mxhSjZKf7NXs8zlX
462 | 48OoPe5ZYxGx4Cjf+uCW+Vhj8iNJ0qN7xBF+AfWXzfvYK66b/EiS9OgecYRvXuo3/nq6veK6yY8kSY+M
463 | I3PZaz5MfiRJemQcmcte82HyI0nSI+PIXPaaD5MfSZIeGUfmstd8mPxIkvTIODKXvebD5EeSpEfGkbns
464 | NR8mP5IkPTKOzGWv+TD5kSTpkXFkLnvNh8mPJEmPjCNz2Ws+TH4kSXpkHJnLXvNh8iNJ0iPjyFz2mg+T
465 | H0mSHhlH5rLXfJj8SJL0yDgyl73mw+RHkqRHxpG57DUfh0x+JEnScYxi/i1MfiRJ0tRGMf8W/tlLkqRH
466 | xpG57DUfJj+SJD0yjsxlr/kw+ZEk6ZFxZC57zYfJjyRJj4wjc9lrPkx+JEl6ZByZy17zYfIjSdIj48hc
467 | 9poPkx9Jkh4ZR+ay13yY/EiS9Mg4Mpe95sPkR5KkR8aRuew1HyY/kiQ9Mo7MZa/5MPmRJOmRcWQue82H
468 | yY8kSY+MI3PZaz5MfiRJemQcmcte82HyI0nSI+PIXPaaD5MfSZIe7RVH3r59+/HNmzfDMi3baz5Mfj55
469 | 9erVxxcvXnzh5cuXH9+9e/drvffv3z+c//777z+7fmY///zzQ79/+eWXYbkk6S/dO9iyBxMzEleIN+zJ
470 | o7rU25Ig/fTTTw/xKW2SWF1T/i2593yEyc8nSX5+/PHHh0UJkp7vvvvu4fzr168f6n348OFhEVGvtzGr
471 | PBsfhlG5JOkv3TPYEjOIIz/88MNDHOFnEiHKUo9fTokrnL+U/HAd9WiLWEVM4n3i0qXyb80956My+flk
472 | KUEgY+c8OK5l3wqTH0na7p7BNglNfnEmsSHR4Vy+jUlyEpeSH8pJqGryxD7PNz1byr8195yPyuTnk7UE
473 | IVk6C4osmuP82YtFTDafb4hAW/kTEz/JvlOGurD7V5O0U/uQ82mvn8uHhjZqH3KPPFc9nw9hPniSpL90
474 | z2Cb5Idfntlz6/4/UvfvJcQf9vZ6riZZl8rr+W/BPeejMvn5ZC35SYLBgurJT8pIgChj0dZyfvKeerSd
475 | 9yzEtJWEp/6ZLf3gGJeSH+QetY36t2buyfvcF7VdSdJ9gy3JBnsyiDP8MjyqF+zLT0mQsq+z718qr+e/
476 | Bfecj8rk55OnJj+5jsSi1k8ikrpJMriea/K3X8rrP6jONdThPce4lPykPpKAZfGvPZsk6XP3DrYkQP0v
477 | BOzdo7p1714yqmPycz2Tn0/WEoSaYPTkJwsNLGwWOMlMTUyWFnKu69++1POjOvXc6B79nMmPJG331DiS
478 | vTf63k85MQKjciydr0Z1TH6uZ/LzyVqCkD8bsXB78gOSEBIeFlv+/Q4/ec/x0kKmDCY/kjSPp8YRvuEh
479 | RgT/zIDYkG/32ZuzLxNDahyJvp+PcB37ej3nv/m5nsnPJ0sJQpId1H8vk0XLdX2RUUadZPe1nA9Bzj3l
480 | z161PyY/knR/9wy2+XMXxz356bEDfT8foTwxIOdoizY5d6k8574V95yPyuTnkyQILM5k7SQl+Rst56k3
481 | Sn54n/89hVwDMux8E8RiJPlIe9SriQxltTyJSq7nA8S5JFa4NvnhPH0Cx3kmSdJfumewzT7PPsw+TqzI
482 | L8b1F9/o+zloI/s37/mZNlPG+/zb00vl35p7zkdl8vNJEoSOZKMu0CzkJD8kIMns6zXUo5xvi2rbJDN1
483 | AZLQJMFJeb0f19fy2tbW5Id75BrO5RnwLf4WIEl7unewZU9f2+er7NP1XPb0/FKMGjuIP9Sp+/ml8m/J
484 | vecjTH4kSXq0VxwhAemJjS7baz5MfiRJerRXHOFb9/rtjbbZaz5MfiRJemQcmcte82HyI0nSI+PIXPaa
485 | D5MfSZIeGUfmstd8mPxIkvTIODKXvebD5EeSpEfGkbnsNR8mP5IkPTKOzGWv+TD5kSTpkXFkLnvNh8mP
486 | JEmPjCNz2Ws+TH4kSXpkHJnLXvNh8iNJ0iPjyFz2mg+TH0mSHhlH5rLXfJj8SJL0yDgyl73mw+RHkqRH
487 | xpG57DUfJj+SJD0yjsxlr/k4ZPIjSZKOYxTzb2HyI0mSpjaK+bfwz16SJD0yjsxlr/kw+ZEk6ZFxZC57
488 | zYfJjyRJj4wjc9lrPkx+JEl6ZByZy17zYfIjSdIj48hc9poPkx9Jkh4ZR+ay13yY/EiS9Mg4Mpd95uMv
489 | Pv7/udSGc9YJi7EAAAAASUVORK5CYII=
490 |
491 |
492 |
--------------------------------------------------------------------------------
/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------