Spaces:
Sleeping
Sleeping
| --[[ | |
| 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 |