Archive: ComponentOwl Rails app, DB backups, go redirect script
This commit is contained in:
161
app/models/multiple_license_generator.rb
Normal file
161
app/models/multiple_license_generator.rb
Normal file
@@ -0,0 +1,161 @@
|
||||
class MultipleLicenseGenerator
|
||||
|
||||
#require 'net/http'
|
||||
#require 'uri'
|
||||
|
||||
attr_accessor :license_key, :generated_licenses
|
||||
|
||||
LICENSE_KEY_XML = <<eos
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<request>
|
||||
<registrationkey>
|
||||
<keycount>1</keycount>
|
||||
<orderid>%{time}</orderid>
|
||||
<ordernumber>%{time}</ordernumber>
|
||||
<customer>
|
||||
<billing>
|
||||
<company>Component Owl</company>
|
||||
<lastname>Component</lastname>
|
||||
<firstname>Owl</firstname>
|
||||
<email>support@componentowl.com</email>
|
||||
</billing>
|
||||
<shipping>
|
||||
<company>Component Owl</company>
|
||||
<lastname>Component</lastname>
|
||||
<firstname>Owl</firstname>
|
||||
<email>support@componentowl.com</email>
|
||||
</shipping>
|
||||
<registername>Component Owl</registername>
|
||||
</customer>
|
||||
<orderitem>
|
||||
<productid>%{bmt_id}</productid>
|
||||
<quantity>1</quantity>
|
||||
</orderitem>
|
||||
<ipaddress>127.0.0.1</ipaddress>
|
||||
<source>Internal Generator</source>
|
||||
</registrationkey>
|
||||
</request>
|
||||
eos
|
||||
|
||||
ORDER_XML = <<eos
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<request>
|
||||
<ordernotification>
|
||||
<orderid>%{time}</orderid>
|
||||
<ordernumber>%{time}</ordernumber>
|
||||
<customer>
|
||||
<billing>
|
||||
<company>Component Owl</company>
|
||||
<lastname>Component</lastname>
|
||||
<firstname>Owl</firstname>
|
||||
<email>support@componentowl.com</email>
|
||||
</billing>
|
||||
<shipping>
|
||||
<company>Component Owl</company>
|
||||
<lastname>Component</lastname>
|
||||
<firstname>Owl</firstname>
|
||||
<email>support@componentowl.com</email>
|
||||
</shipping>
|
||||
<registername>Component Owl</registername>
|
||||
</customer>
|
||||
<orderitem>
|
||||
<itemnumber>%{time}</itemnumber>
|
||||
<productid>%{bmt_id}</productid>
|
||||
<productname>%{product_name}</productname>
|
||||
<quantity>1</quantity>
|
||||
<registrationkeys>
|
||||
<keydata keynumber="1" keypart="1">%{license_key}</keydata>
|
||||
</registrationkeys>
|
||||
</orderitem>
|
||||
<orderdate>%{today}</orderdate>
|
||||
<ipaddress>127.0.0.1</ipaddress>
|
||||
</ordernotification>
|
||||
</request>
|
||||
eos
|
||||
|
||||
def initialize(*args)
|
||||
@licenses_per_product = args.first
|
||||
self.generated_licenses = []
|
||||
end
|
||||
|
||||
def self.generate(licenses_per_product = 51)
|
||||
inst = new(licenses_per_product)
|
||||
inst.generate_and_deliver
|
||||
end
|
||||
|
||||
def generate_and_deliver
|
||||
ProductEdition.ordered.each do |product_edition|
|
||||
@product = product_edition
|
||||
license = { :product => @product, :license_keys => [] }
|
||||
@licenses_per_product.times { license[:license_keys] << request_key }
|
||||
generated_licenses << license
|
||||
end
|
||||
|
||||
deliver_licenses!
|
||||
end
|
||||
|
||||
def request_key
|
||||
bmt_license_key = BmtLicenseKey.new
|
||||
self.license_key = bmt_license_key.generate!
|
||||
|
||||
params = Hash.from_xml(format(ORDER_XML)).with_indifferent_access
|
||||
bmt_order = BmtOrder.new(params[:request])
|
||||
bmt_order.save
|
||||
|
||||
license_key
|
||||
end
|
||||
|
||||
=begin
|
||||
def request_key
|
||||
url = URI.parse('http://localhost:3000/products/generate_license?t=' + Settings.api_token)
|
||||
request = Net::HTTP::Post.new(url.path + '?' + url.query)
|
||||
request.content_type = "application/xml"
|
||||
request.body = format(LICENSE_KEY_XML)
|
||||
response = Net::HTTP.start(url.host, url.port) { |http| http.request(request) }
|
||||
doc = Nokogiri::XML(response.body)
|
||||
error_node = doc.search("//errormessage").first
|
||||
if error_node
|
||||
raise "Multiple license generator failed with message (#{@product.id}): #{error_node.content}"
|
||||
else
|
||||
keydata_node = doc.search("//keydata").first
|
||||
if keydata_node
|
||||
return keydata_node.content
|
||||
else
|
||||
raise "License key is missing (#{@product.id})"
|
||||
end
|
||||
end
|
||||
end
|
||||
=end
|
||||
|
||||
def format(text)
|
||||
formatted_text = "#{text}"
|
||||
text.scan(/%\{([^\}]+)\}/).each do |interpolation|
|
||||
method = interpolation.first
|
||||
formatted_text.gsub!("%{#{method}}", send(method)) if respond_to?(method)
|
||||
end
|
||||
formatted_text
|
||||
end
|
||||
|
||||
def time
|
||||
(rand(1<<64) + Time.now.to_i).to_s
|
||||
end
|
||||
|
||||
def today
|
||||
Date.today.to_s
|
||||
end
|
||||
|
||||
def bmt_id
|
||||
@product.bmtID.to_s
|
||||
end
|
||||
|
||||
def product_name
|
||||
@product.name
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def deliver_licenses!
|
||||
Notifier.deliver_licenses!(generated_licenses)
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user