--[[ ReaSpeechProductActivation.lua - Product key entry and activation checks ]]-- ReaSpeechProductActivation = Polo { ACTIVATION_URL = "https://techaud.io/ProductActivationDeveloper.php", PRODUCT_ID = 79004057, PRODUCT_CHECK_COUNT = 4, PRODUCT_NAME = "ReaSpeech", config = nil, -- nil = not activated -- 'pending' = activation in process -- 'activated' = activation complete state = nil, activation_message ="" } function ReaSpeechProductActivation:init() self:init_config() self:activation_state_check() end function ReaSpeechProductActivation:init_config() self.config = OptionsConfig:new { section = 'ReaSpeech', options = { product_run_check_count = {'number', 0}, product_license = {'string', ''}, product_license_value = {'string', ''}, eula_signed = {'boolean', false}, } } end function ReaSpeechProductActivation:is_activated() return self.state == 'activated' and self.config:get('eula_signed') end function ReaSpeechProductActivation:activation_state_check() local has_l = self.config:exists('product_license') local has_lv = self.config:exists('product_license_value') if has_l and has_lv then local count = self.config:get('product_run_check_count') if count > self.PRODUCT_CHECK_COUNT then self.state = 'pending' self:handle_product_activation_recheck() else self.state = 'activated' self.config:set('product_run_check_count', count + 1) end else self.state = nil end end function ReaSpeechProductActivation:handle_product_activation(product_key) product_key = string.gsub(product_key, "%s+", "") if #product_key == 0 then self.state = nil return end local process_result = self:send_activation_request(product_key, false) if process_result then self:process_activation_reply(product_key, process_result) end end function ReaSpeechProductActivation:handle_product_activation_recheck() local process_result = self:send_activation_request(self.config:get('product_license'), true) if process_result then if string.find(process_result, "SUCCESS") then self.state = 'activated' self.config:set('product_run_check_count', 0) elseif string.find(process_result, "FAILURE") then self.state = nil self.config:delete('product_license') self.config:delete('product_license_value') else -- Connection failed, silently ignore self.state = 'activated' end else -- Command failed, silently ignore self.state = 'activated' end end function ReaSpeechProductActivation:send_activation_request(product_key, is_recheck) local curl = "curl" if not reaper.GetOS():find("Win") then curl = "/usr/bin/curl" end local cmd_data_id = "user_product_id=" .. self.PRODUCT_ID local cmd_data_license = "user_license=" .. product_key local cmd_data_p_n = "user_product_name=" .. self.PRODUCT_NAME local cmd_data_p_v = "user_product_version=" .. ReaSpeechUI.VERSION local cmd_data_recheck = "recheck=" .. tostring(is_recheck) local cmd_args = ( curl.." -X POST" .. " -d " .. cmd_data_id .. " -d " .. cmd_data_license .. " -d " .. cmd_data_p_n .. " -d " .. cmd_data_p_v .. " -d " .. cmd_data_recheck .. " \"" .. self.ACTIVATION_URL .. "\"" ) local process_result = reaper.ExecProcess(cmd_args, 8000) if process_result then return process_result else self.activation_message = "Activation failed: Connection Error" reaper.ShowConsoleMsg("Failed CURL at activation request" .. '\n') return nil end end function ReaSpeechProductActivation:process_activation_reply(product_key, process_result) process_result = string.gsub(process_result, "%s+", "") if string.find(process_result, "SUCCESS") then self.config:set('product_run_check_count', 1) self.config:set('product_license', product_key) self.config:set('product_license_value', process_result) self.state = 'activated' self.activation_message = "Thanks for your support! Enjoy :)" elseif string.find(process_result, "FAILURE") then self.state = nil if string.find(process_result, "Invalid_License") then self.activation_message = "Activation failed: Sorry, we didn't find a valid license :(" else self.activation_message = "Activation failed: Sorry, you are out of activations :(" end end end