Archive: ComponentOwl Rails app, DB backups, go redirect script
This commit is contained in:
146
app/models/activation.rb
Normal file
146
app/models/activation.rb
Normal file
@@ -0,0 +1,146 @@
|
||||
class Activation < ActiveRecord::Base
|
||||
|
||||
belongs_to :order
|
||||
|
||||
attr_accessor :result
|
||||
|
||||
validate :validate_serial_key, :validate_attributes, :validate_limit
|
||||
|
||||
after_create :generate_final_judgement
|
||||
|
||||
named_scope :by_computer_id, lambda { |computer_id| { :conditions => { :computer_id => computer_id } } }
|
||||
named_scope :group_computer_id_except, lambda { |computer_id| { :group => "computer_id", :conditions => ["computer_id != ?", computer_id] } }
|
||||
|
||||
GENERATOR_DIR = "#{Rails.root}/#{Settings.private_dir}"
|
||||
GENERATOR = "BLVLicenseGenerator.exe"
|
||||
|
||||
RESULTS = {
|
||||
"success" => {
|
||||
:response => 0,
|
||||
:message => :success
|
||||
},
|
||||
"invalid_serial_key" => {
|
||||
:response => 1,
|
||||
:message => :invalid_serial_key,
|
||||
:message_url => :support_url
|
||||
},
|
||||
"limit_reached" => {
|
||||
:response => 2,
|
||||
:message => :limit_reached,
|
||||
:message_url => :buy_url
|
||||
},
|
||||
"missing_attributes" => {
|
||||
:response => 3,
|
||||
:message => :other_error_missing_attributes,
|
||||
:message_url => :support_url
|
||||
},
|
||||
"generator_error" => {
|
||||
:response => 3,
|
||||
:message => :other_error_generator_error,
|
||||
:message_url => :support_url
|
||||
}
|
||||
}
|
||||
|
||||
def before_validation
|
||||
self.result = "success"
|
||||
self.order = Order.find_by_license_key(serial_key)
|
||||
end
|
||||
|
||||
def validate_attributes
|
||||
missing_attributes! if missing_attributes?
|
||||
end
|
||||
|
||||
def validate_serial_key
|
||||
@valid_serial_key = order.present?
|
||||
invalid_serial_key! unless @valid_serial_key
|
||||
end
|
||||
|
||||
def validate_limit
|
||||
unless invalid_serial_key?
|
||||
@within_limit = within_limit?
|
||||
limit_reached! unless @within_limit
|
||||
end
|
||||
end
|
||||
|
||||
def computer_ids_within_limit?
|
||||
computer_ids_limit = Settings.activation_limits["activations_#{BmtOrder.find(order.id).bmtID}"].to_i
|
||||
order.activations.group_computer_id_except(computer_id).count("DISTINCT computer_id") < computer_ids_limit
|
||||
end
|
||||
|
||||
def within_limit?
|
||||
!new_record? || (!invalid_serial_key? && computer_ids_within_limit?)
|
||||
end
|
||||
|
||||
def missing_attributes?
|
||||
serial_key.nil? || build.blank? || product.blank? || computer_id.blank?
|
||||
end
|
||||
|
||||
def missing_attributes!
|
||||
self.result = "missing_attributes"
|
||||
errors.add_to_base "Missing attributes"
|
||||
end
|
||||
|
||||
def limit_reached!
|
||||
self.result = "limit_reached"
|
||||
errors.add_to_base "Limit reached."
|
||||
end
|
||||
|
||||
def invalid_serial_key!
|
||||
self.result = "invalid_serial_key"
|
||||
errors.add_to_base "Invalid serial key."
|
||||
end
|
||||
|
||||
def invalid_serial_key?
|
||||
@valid_serial_key == false
|
||||
end
|
||||
|
||||
def to_xml(options = {})
|
||||
h = RESULTS[result]
|
||||
h = h.merge({
|
||||
:message => I18n.t("txt.activation.#{h[:message]}"),
|
||||
:message_url => (options.delete(h[:message_url]) || ""),
|
||||
:final_judgement => (final_judgement || "")
|
||||
})
|
||||
|
||||
h.to_xml(:root => "activation", :dasherize => false)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def generate_final_judgement
|
||||
#Format:
|
||||
# ### license generator source file ###
|
||||
# [1] Serial key , eg. "ABCDEF123456"
|
||||
# [2] Computer ID , eg. "f54f1525a456ad867b65ee9ec8b0c83de44b3dc7"
|
||||
# [3] IP Address , eg. "127.0.0.1"
|
||||
# [4] Activation ID , eg. "5"
|
||||
# [5] Product , eg. "BLV"
|
||||
# [6] Build , eg. "1"
|
||||
source_file_data = ["### license generator source file ###"]
|
||||
source_file_data << serial_key
|
||||
source_file_data << computer_id
|
||||
source_file_data << ip
|
||||
source_file_data << id
|
||||
source_file_data << product
|
||||
source_file_data << build
|
||||
|
||||
@source_file_name = "license_source_file_#{id}.txt"
|
||||
@source_file_path = File.join(GENERATOR_DIR, @source_file_name)
|
||||
File.open(@source_file_path, 'a') {|f| f.write(source_file_data.join("\n")) }
|
||||
|
||||
generator_path = File.join(GENERATOR_DIR, GENERATOR)
|
||||
key = `mono #{generator_path} #{@source_file_path}`
|
||||
FileUtils.rm_r(@source_file_path)
|
||||
|
||||
match = key.match /^(ok:\s*)(.+)/i
|
||||
if match
|
||||
update_attribute(:final_judgement, match[2].strip)
|
||||
else
|
||||
self.final_judgement = key.strip
|
||||
self.result = "generator_error"
|
||||
destroy
|
||||
FailedActivation.create_from_activation(self)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user