Lua Projects

SunLicense Integration Guide for Lua Projects

Prerequisites

  • Lua 5.1 or higher

  • LuaSocket library

  • JSON library (dkjson or similar)

  • SunLicense API credentials

Integration Steps

1. Create License Validator

local socket = require("socket")
local http = require("socket.http")
local ltn12 = require("ltn12")
local json = require("dkjson")

local SunLicenseValidator = {}
SunLicenseValidator.__index = SunLicenseValidator

function SunLicenseValidator.new(licenseKey, productId, version)
    local self = setmetatable({}, SunLicenseValidator)
    self.licenseKey = licenseKey
    self.productId = productId
    self.version = version or "1.0.0"
    self.apiUrl = "YOUR_API_URL/api/v1/validate"
    return self
end

function SunLicenseValidator:validate()
    local payload = {
        licenseKey = self.licenseKey,
        productId = self.productId,
        productVersion = self.version,
        hwid = self:getHWID() -- Optional
    }

    local jsonPayload = json.encode(payload)
    local response = {}

    local _, code = http.request{
        url = self.apiUrl,
        method = "POST",
        headers = {
            ["Content-Type"] = "application/json",
            ["Content-Length"] = #jsonPayload
        },
        source = ltn12.source.string(jsonPayload),
        sink = ltn12.sink.table(response)
    }

    if code ~= 200 then
        error("License validation failed with code: " .. tostring(code))
    end

    return true
end

function SunLicenseValidator:getHWID()
    -- Implement your HWID generation logic here
    return "YOUR-HWID"
end

2. Basic Implementation

local function main()
    local validator = SunLicenseValidator.new(
        "YOUR-LICENSE-KEY",
        YOUR_PRODUCT_ID,
        "1.0.0"
    )

    local success, err = pcall(function()
        return validator:validate()
    end)

    if success then
        print("License is valid!")
        -- Continue with your application
    else
        print("License validation failed: " .. tostring(err))
        os.exit(1)
    end
end

main()

3. Integration with LOVE2D (Game Framework)

function love.load()
    validator = SunLicenseValidator.new(
        "YOUR-LICENSE-KEY",
        YOUR_PRODUCT_ID
    )
    
    success, err = pcall(function()
        return validator:validate()
    end)
    
    if not success then
        error_message = err
        love.event.quit()
    end
end

function love.draw()
    if error_message then
        love.graphics.print("License Error: " .. error_message, 10, 10)
    end
end

Best Practices

  1. Error Handling

    • Use pcall for error handling

    • Implement proper logging

    • Handle network timeouts

  2. Security

    • Secure storage of license key

    • Implement HTTPS communication

    • Handle sensitive data carefully

  3. Performance

    • Cache validation results

    • Implement retry logic

    • Handle offline scenarios

Common Issues

  1. Network Problems

    • Implement timeout handling

    • Add retry logic

    • Handle connection errors

  2. SSL/HTTPS Issues

    • Configure proper SSL certificates

    • Handle HTTPS requirements

    • Verify API endpoint security

  3. JSON Parsing

    • Handle malformed responses

    • Validate response format

    • Proper error handling

Last updated