Module: SignValidator
- Defined in:
- lib/SignValidator.rb,
lib/SignValidator/version.rb
Constant Summary collapse
- VERSION =
"0.1.0"
Class Method Summary collapse
-
.run ⇒ Object
Your code goes here…
- .to_utf8(str) ⇒ Object
Class Method Details
.run ⇒ Object
Your code goes here…
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/SignValidator.rb', line 8 def self.run @options = {} option_parser = OptionParser.new do |opts| opts. = "signvalidator -c [cert] -p [provision] -u [udid] 校验证书和配置文件是否匹配" @options[:cert] = "" @options[:provision] = "" @options[:udid] = "" @options[:password] = "123" opts.on('-c cert','--cert p12_cert','用于签名的证书') do |value| @options[:cert] = value end opts.on('-m mobileprovision', '--provision mobileprovision', '用于签名的配置文件') do |value| @options[:provision] = value end opts.on('-u udid', '--udid device_udid', '用于检测配置文件是否匹配该设备') do |value| @options[:udid] = value end opts.on('-p password', '--password p12_password', 'p12密码') do |value| @options[:password] = value end end.parse! temp_dir = "#{Dir.home}/Library/SignValidator" p12_temp_pem = temp_dir + "/cert.pem" provision_temp_cert = temp_dir + "/provision_cert" p12_temp_cert = temp_dir + "/p12_cert" if !Dir.exist? temp_dir Dir.mkdir temp_dir end #get p12 cert data isok = system "openssl pkcs12 -in #{@options[:cert]} -clcerts -nokeys -out #{p12_temp_pem} -passin pass:#{@options[:password]}" if !isok puts "#{code}提取p12内容失败".colorize(:red) end pem_content = File.read p12_temp_pem start_marker = "-----BEGIN CERTIFICATE-----" end_marker = "-----END CERTIFICATE-----" pem_cert_data = pem_content[/#{start_marker}(.*?)#{end_marker}/m , 1] pem_cert_data = pem_cert_data.gsub /[\n\r ]/,"" f = File.new p12_temp_cert,"w" f.write pem_cert_data f.close #get provision cert data provision_content = File.read @options[:provision] provision_content = to_utf8 provision_content plist_start_marker = '<\?xml version="1.0" encoding="UTF-8"\?>' plist_end_marker = '<\/plist>' plist_content = provision_content[/#{plist_start_marker}.*#{plist_end_marker}/m] provision_plist = Plist::parse_xml plist_content provision_certs = provision_plist["DeveloperCertificates"] is_valid = false provision_certs.each do |cert_data| cert_data = Base64.encode64(cert_data.string).gsub /[\n\r ]/,"" if cert_data == pem_cert_data is_valid = true break else file = File.new provision_temp_cert,"w" file.write content file.close end end is_device_ok = true if !@options[:udid].empty? provision_devices = provision_plist["ProvisionedDevices"] is_device_ok = provision_devices.include? @options[:udid] end if is_valid && is_device_ok puts "证书和配置文件匹配,校验成功!".colorize(:green) elsif is_valid && !is_device_ok puts "设备列表:\n".colorize(:yellow) provision_devices.each do |udid| puts udid end puts "证书和配置文件匹配,但与该设备不匹配,校验失败!".colorize(:red) else puts "证书和配置文件不匹配,校验失败!".colorize(:red) end end |
.to_utf8(str) ⇒ Object
110 111 112 113 114 |
# File 'lib/SignValidator.rb', line 110 def self.to_utf8(str) str = str.force_encoding('UTF-8') return str if str.valid_encoding? str.encode("UTF-8", 'binary', invalid: :replace, undef: :replace, replace: '') end |