Files
componentowl-rails-archive/app/models/multiple_license_generator.rb

161 lines
4.4 KiB
Ruby
Raw Normal View History

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