/**
* License Verification System
* Product: {{product}}
* Generated: {{date}}
*/
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace LicenseVerifier
{
public class LicenseVerifier
{
private readonly string _apiUrl = "{{license_api_url}}";
private readonly string _productSlug = "{{product_slug}}";
private readonly string _verificationKey = "{{verification_key}}";
private readonly string _apiToken = "{{api_token}}";
private readonly HttpClient _httpClient;
public LicenseVerifier()
{
_httpClient = new HttpClient();
_httpClient.DefaultRequestHeaders.Add("User-Agent", "LicenseVerifier/1.0");
}
///
/// Verify license with purchase code
/// This method sends a single request to our system which handles both Envato and database verification
///
public async Task VerifyLicenseAsync(string purchaseCode, string domain = null)
{
try
{
// Send single request to our system
return await VerifyWithOurSystemAsync(purchaseCode, domain);
}
catch (Exception ex)
{
return CreateLicenseResponse(false, $"Verification failed: {ex.Message}");
}
}
///
/// Verify with our license system
///
private async Task VerifyWithOurSystemAsync(string purchaseCode, string domain = null)
{
try
{
var data = new
{
purchase_code = purchaseCode,
product_slug = _productSlug,
domain = domain,
verification_key = _verificationKey
};
var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync(_apiUrl, content);
if (response.IsSuccessStatusCode)
{
var responseContent = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject(responseContent);
return CreateLicenseResponse(
(bool)result.valid,
(string)result.message,
result
);
}
return CreateLicenseResponse(false, "Unable to verify license");
}
catch (Exception ex)
{
return CreateLicenseResponse(false, $"Network error: {ex.Message}");
}
}
///
/// Create standardized response
///
private LicenseResponse CreateLicenseResponse(bool valid, string message, dynamic data = null)
{
return new LicenseResponse
{
Valid = valid,
Message = message,
Data = data,
VerifiedAt = DateTime.UtcNow,
Product = _productSlug
};
}
}
public class LicenseResponse
{
public bool Valid { get; set; }
public string Message { get; set; }
public dynamic Data { get; set; }
public DateTime VerifiedAt { get; set; }
public string Product { get; set; }
}
public class EnvatoResult
{
public bool Valid { get; set; }
public dynamic Data { get; set; }
}
}
// Usage example:
/*
var verifier = new LicenseVerifier();
var result = await verifier.VerifyLicenseAsync("YOUR_PURCHASE_CODE", "yourdomain.com");
if (result.Valid)
{
Console.WriteLine("License is valid!");
}
else
{
Console.WriteLine($"License verification failed: {result.Message}");
}
*/