module AppleCertsInfo
Constants
- VERSION
Public Class Methods
certificate_development_list()
click to toggle source
All iPhone Developer and Apple Development List
# File lib/apple_certs_info.rb, line 51 def self.certificate_development_list list = [] iphone_list = certificate_list_for(name: "iPhone Developer") apple_list = certificate_list_for(name: "Apple Development") list.concat(iphone_list) unless iphone_list.nil? list.concat(apple_list) unless apple_list.nil? return list end
certificate_development_list_limit_days_for(days:)
click to toggle source
Check Certificate file for iPhone Developer /Apple Development in the KeyChain @param days: limit days @return:
expire_datetime: deadline limit_days: limit days cname: CN
# File lib/apple_certs_info.rb, line 22 def self.certificate_development_list_limit_days_for(days:) raise "do not set days param" if days.nil? filtering_limit_days_for(list: certificate_development_list.uniq, days: days) end
certificate_distribution_list()
click to toggle source
All iPhone Distribution and Apple Distribution List
# File lib/apple_certs_info.rb, line 61 def self.certificate_distribution_list list = [] iphone_list = certificate_list_for(name: "iPhone Distribution") apple_list = certificate_list_for(name: "Apple Distribution") list.concat(iphone_list) unless iphone_list.nil? list.concat(apple_list) unless apple_list.nil? return list end
certificate_distribution_list_limit_days_for(days:)
click to toggle source
Check Certificate file for iPhone/Apple Distribution in the KeyChain @param days: limit days @return:
expire_datetime: deadline limit_days: limit days cname: CN
# File lib/apple_certs_info.rb, line 33 def self.certificate_distribution_list_limit_days_for(days:) raise "do not set days param" if days.nil? filtering_limit_days_for(list: certificate_distribution_list.uniq, days: days) end
certificate_info_for(name:)
click to toggle source
Certificate Information for target name @return
expire_datetime: deadline limit_days: limit days cname: CN
# File lib/apple_certs_info.rb, line 114 def self.certificate_info_for(name:) raise "do not set name param" if name.nil? info = [] begin temp_pem_file = certificate_exchange_pem_file_for(name: name) result = `openssl crl2pkcs7 -nocrl -certfile #{temp_pem_file.path} | openssl pkcs7 -print_certs -text -noout` expire_datetime_match = result.scan(/.*Not After :(.*)/) raise "not exits expire date" if expire_datetime_match.nil? cname_match = result.match(/Subject: .* CN=(.*), OU=.*/) raise "not exists cname:#{result}" if cname_match.nil? expire_datetime_match.each do |original_datetime| expire_datetime = Time.parse(original_datetime.first) limit_days = calc_limit_days(datetime: expire_datetime) cname = cname_match[1] # cname is same info << { :expire_datetime => expire_datetime, :limit_days => limit_days, :cname => cname, } end rescue StandardError => e raise(e.message) ensure temp_pem_file.close && temp_pem_file.unlink end return info end
debug_log()
click to toggle source
# File lib/apple_certs_info.rb, line 12 def self.debug_log @debug_log end
provisioning_profile_list(dir: "~/Library/MobileDevice/Provisioning\\ Profiles/*.mobileprovision")
click to toggle source
Provisioning Profile List
# File lib/apple_certs_info.rb, line 71 def self.provisioning_profile_list(dir: "~/Library/MobileDevice/Provisioning\\ Profiles/*.mobileprovision") list = [] Dir.glob("#{File.expand_path(dir)}") do |file| file_name_match = file.match(/.*\/(.*)\.mobileprovision/) raise "not exists Provisioning Profile" if file_name_match.nil? file_name = file_name_match[1] temp_plist_file = Tempfile.new(::File.basename(file_name)) plist_file = temp_plist_file.path begin # exchange plist file system("security cms -D -i '#{file}' > #{plist_file}") # checking plist file expire_datetime = Time.parse(`/usr/libexec/PlistBuddy -c 'Print ExpirationDate' #{plist_file}`) app_identifier = `/usr/libexec/PlistBuddy -c 'Print Entitlements:application-identifier' #{plist_file}`.chomp app_id_name = `/usr/libexec/PlistBuddy -c 'Print AppIDName' #{plist_file}`.chomp limit_days = calc_limit_days(datetime: expire_datetime) rescue StandardError => e raise(e.message) ensure temp_plist_file.close && temp_plist_file.unlink end list << { :expire_datetime => expire_datetime, :limit_days => limit_days, :app_identifier => app_identifier, :app_id_name => app_id_name, :file_path => file_name_match[0] } end return list end
provisioning_profile_list_limit_days_for(days:)
click to toggle source
Check Provisioning Profiles in the Directory that is ~/Library/MobileDevice/Provisioning Profiles/ @param days: limit days @return:
expire_datetime: deadline limit_days: limit days app_identifier: Bundle Identifier app_id_name => App ID Name
# File lib/apple_certs_info.rb, line 45 def self.provisioning_profile_list_limit_days_for(days:) raise "do not set days param" if days.nil? filtering_limit_days_for(list: provisioning_profile_list.uniq, days: days) end
set_debug_log(flag)
click to toggle source
# File lib/apple_certs_info.rb, line 9 def self.set_debug_log(flag) @debug_log = flag end
Private Class Methods
calc_limit_days(datetime:)
click to toggle source
# File lib/apple_certs_info.rb, line 182 def self.calc_limit_days(datetime:) ((datetime - Time.now)/(24*60*60)).ceil end
certificate_exchange_pem_file_for(name:)
click to toggle source
exchange pem file @param name: unique name
# File lib/apple_certs_info.rb, line 175 def self.certificate_exchange_pem_file_for(name:) temp_pem_file = Tempfile.new(::File.basename("temp_pem")) `security find-certificate -a -c "#{name}" -p > #{temp_pem_file.path}` temp_pem_file end
certificate_list_for(name:)
click to toggle source
# File lib/apple_certs_info.rb, line 150 def self.certificate_list_for(name:) result = `security find-certificate -a -c "#{name}" -Z` name_match_list = result.scan(/.*alis".*=\"(.*)\".*/) puts(name_match_list) if @debug_log == true info = [] name_match_list.uniq.each do|name_match| info << certificate_info_for(name:name_match[0]) end info.flatten! end
filtering_limit_days_for(list:, days:)
click to toggle source
filtering list
# File lib/apple_certs_info.rb, line 164 def self.filtering_limit_days_for(list:, days:) danger_list = [] list.each do |info| danger_list << info if info[:limit_days].to_i <= days.to_i end danger_list end