161 lines
4.4 KiB
Ruby
161 lines
4.4 KiB
Ruby
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 |