class AppleCert::Provisioning
Constants
- FOLDER_PATH
Public Instance Methods
getAllProfileInfo(path)
click to toggle source
# File lib/AppleCert/Core/Provision/provisioning.rb, line 95 def getAllProfileInfo(path) result = {} list = Dir["#{path}/*"] list.each do |profilePath| obj = get_profile_info(profilePath) app_id = obj['application-identifier'] cert_type_dict = {} if !result[app_id].nil? cert_type_dict = result[app_id] end arr = Array.new() cert_type = obj[:cert_type] if !cert_type_dict[cert_type].nil? arr = cert_type_dict[cert_type] end arr.push(obj) cert_type_dict[cert_type] = arr result[app_id] = cert_type_dict end return result end
get_profile_info(provisioning_profile_path)
click to toggle source
# File lib/AppleCert/Core/Provision/provisioning.rb, line 23 def get_profile_info(provisioning_profile_path) profile_contents = File.open(provisioning_profile_path).read profile_contents = profile_contents.slice(profile_contents.index('<?'), profile_contents.length) info = {} keys = ['UUID','application-identifier','Name','CreationDate','aps-environment','ExpirationDate'] doc = Nokogiri.XML(profile_contents) # puts "#{doc}" keys.each do |key| value = doc.xpath("\/\/key[text()=\"#{key}\"]")[0] if value.to_s.length>0 value = value.next_element.text info[key] = value end end keys = ['ProvisionedDevices','DeveloperCertificates'] keys.each do |key| node = doc.xpath("\/\/key[text()=\"#{key}\"]")[0] arr = Array.new() if node.to_s.length>0 node.next_element.children.each do |nodes| if nodes.text.strip.to_s.length > 0 arr.push(nodes.text.strip) end end end info[key] = arr end isEnterprise = false key = 'ProvisionsAllDevices' if node = doc.xpath("\/\/key[text()=\"#{key}\"]")[0] if node.to_s.length>0 if node.next_element.name.downcase == 'true' isEnterprise = true end end end certlist = Array.new() if !info['DeveloperCertificates'].nil? values = info['DeveloperCertificates'] index = 0 values.each do |item| decode_base64_content = Base64.decode64(item) cert = OpenSSL::X509::Certificate.new(decode_base64_content) certlist.push(cert.subject.to_s) if index == 0 if cert.subject.to_s.match('/CN=iPhone Developer') info[:cert_type] = PROV_TYPE::DEV elsif !info['ProvisionedDevices'].nil? && info['ProvisionedDevices'].length > 0 info[:cert_type] = PROV_TYPE::ADHOC elsif isEnterprise info[:cert_type] = PROV_TYPE::INHOUSE else info[:cert_type] = PROV_TYPE::APPSTORE end regex = /\/O=(.*)\/C/ name = cert.subject.to_s.scan(regex) if name.length > 0 && name[0].length > 0 info[:team_name] = name.first.first else info[:team_name] = "" end end index += 1 end info['DeveloperCertificates'] = certlist end return info end
list()
click to toggle source
# File lib/AppleCert/Core/Provision/provisioning.rb, line 17 def list result = self.getAllProfileInfo(FOLDER_PATH) self.printlist(result) end
printAProvision(info)
click to toggle source
# File lib/AppleCert/Core/Provision/provisioning.rb, line 176 def printAProvision(info) puts "=====================================".green puts "UUID: #{info["UUID"]}" puts "AppId: #{info['application-identifier']}" puts "Provisioning Name: #{info['Name']}" puts "Team Name: #{info[:team_name]}" puts "Cert Type: #{info[:cert_type]}" puts "ExpirationDate: #{info['ExpirationDate']}" has_push = false if info["aps-environment"].to_s.length>0 has_push = true end puts "Has Push: #{has_push}" puts "DeveloperCertificates: " info['DeveloperCertificates'].each do |item| puts " #{item}" end if !info['ProvisionedDevices'].nil? puts "ProvisionedDevices: " info['ProvisionedDevices'].each do |item| puts " #{item}" end end end
printlist(result)
click to toggle source
# File lib/AppleCert/Core/Provision/provisioning.rb, line 158 def printlist(result) result.keys.sort.each.each do |app_id| cert_type_dict = result[app_id] puts "=========== #{app_id} ===========".green cert_type_dict.each do |type, arr| puts "#{type} :: #{arr[0][:team_name]}" arr = arr.sort {|a,b| a["ExpirationDate"] <=> b["ExpirationDate"]} arr.each do |info| if info["aps-environment"].to_s.length>0 has_push = "[HAS_PUSH]" end puts " #{info["ExpirationDate"]}\t #{info["UUID"]}\t#{info["Name"]} #{has_push}" end end puts "" end end
removeExpired()
click to toggle source
# File lib/AppleCert/Core/Provision/provisioning.rb, line 128 def removeExpired() expiredlist = Array.new() result = getAllProfileInfo(FOLDER_PATH) result.keys.sort.each.each do |app_id| cert_type_dict = result[app_id] cert_type_dict.each do |type, arr| arr.each do |info| dateStr = info['ExpirationDate'] if DateTime.now > DateTime.parse(dateStr) expiredlist.push(info) end end end end expiredlist.each do |info| puts "#{info["ExpirationDate"]}\t#{info["application-identifier"]}\t#{info[:cert_type]}\t#{info["UUID"]}\t#{info["Name"]}\t#{info[:team_name]}" self.removefile(info["UUID"]) end end
removefile(uuid)
click to toggle source
# File lib/AppleCert/Core/Provision/provisioning.rb, line 148 def removefile(uuid) profilePath = "#{FOLDER_PATH}/#{uuid.downcase}.mobileprovision" if File.exist? profilePath File.delete(profilePath) else puts "provisioning for #{uuid} not exist".red abort("") end end
showInfo(uuid)
click to toggle source
# File lib/AppleCert/Core/Provision/provisioning.rb, line 117 def showInfo(uuid) profilePath = "#{FOLDER_PATH}/#{uuid.downcase}.mobileprovision" if File.exist? profilePath obj = get_profile_info(profilePath) self.printAProvision(obj) else puts "provisioning for #{uuid} not exist".red abort("") end end