apple_certs_info 0.1.5 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2118d6405e0a0a575a7d4e0d7df3926941ea4e416c3840621b436f4106016884
4
- data.tar.gz: e1b5edff1ae416471f37d99faaaa8189f4ad9cfc5581459d373c69b26a2e2bc1
3
+ metadata.gz: d832e03b2b9b9bc4258931131ac30b37cc98fff25e42566adcecae71b48634c0
4
+ data.tar.gz: ff2ca0720578dc99224e3740e75b9a4d97dff1e4d4694ade8e347f17dfa0b392
5
5
  SHA512:
6
- metadata.gz: a482ce9fe6c5495db9fb48aa617fd1c232fd805e5837aa4bb390539c1f6976d8c983563df9900e67b7b9958a65609316553a797e3f39b967eb8ed2a152d5f7d2
7
- data.tar.gz: 2568a6a3a46043bd9bfc140ac94888acf98b7df74803d7f12c06acc844b130291a2eeec0da3a2d9233abf69f1f8e7d3c72397bf641b220f0f3ac80ecab0772c4
6
+ metadata.gz: 16c615e264bc2867d2cd579dd6e80093b19677cef36747853c01286dfcf3319969d154fbb2e2a203724b6e9c8bd3582c0e609edf9a0c5231efe74130cbc9b9d6
7
+ data.tar.gz: a143ac10d7c70e5ebe9f8f957f83c13b204feac3bbec525c1465fc7b25d2b28f43fa5937b94a29221725597a3d86f63b6a77535ba2a1e3ef1237520463022242
data/CODE_OF_CONDUCT.md CHANGED
@@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
55
55
  ## Enforcement
56
56
 
57
57
  Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
- reported by contacting the project team at toshiyuki.hirata@dena.com. All
58
+ reported by contacting the project team at tarappo@gmail.com. All
59
59
  complaints will be reviewed and investigated and will result in a response that
60
60
  is deemed necessary and appropriate to the circumstances. The project team is
61
61
  obligated to maintain confidentiality with regard to the reporter of an incident.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- apple_certs_info (0.1.5)
4
+ apple_certs_info (0.2.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -17,10 +17,10 @@ GEM
17
17
  rspec-expectations (3.10.1)
18
18
  diff-lcs (>= 1.2.0, < 2.0)
19
19
  rspec-support (~> 3.10.0)
20
- rspec-mocks (3.10.1)
20
+ rspec-mocks (3.10.2)
21
21
  diff-lcs (>= 1.2.0, < 2.0)
22
22
  rspec-support (~> 3.10.0)
23
- rspec-support (3.10.1)
23
+ rspec-support (3.10.2)
24
24
 
25
25
  PLATFORMS
26
26
  ruby
data/README.md CHANGED
@@ -30,17 +30,17 @@ AppleCertsInfo.provisioning_profile_list_limit_days_for(days: 10)
30
30
 
31
31
 
32
32
  ```
33
- # Development
33
+ # iPhone Developer / Apple Development
34
34
  AppleCertsInfo.certificate_development_list_limit_days_for(days: 10)
35
35
 
36
- # Distribution
36
+ # iPhone / Apple Distribution
37
37
  AppleCertsInfo.certificate_distribution_list_limit_days_for(days: 10)
38
38
  ```
39
39
 
40
40
 
41
41
  ## Contributing
42
42
 
43
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/apple_certs_info. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/apple_certs_info/blob/master/CODE_OF_CONDUCT.md).
43
+ Bug reports and pull requests are welcome on GitHub at https://github.com/tarappo/apple_certs_info. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/tarappo/apple_certs_info/blob/master/CODE_OF_CONDUCT.md).
44
44
 
45
45
 
46
46
  ## License
@@ -49,4 +49,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
49
49
 
50
50
  ## Code of Conduct
51
51
 
52
- Everyone interacting in the AppleCertsInfo project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/apple_certs_info/blob/master/CODE_OF_CONDUCT.md).
52
+ Everyone interacting in the AppleCertsInfo project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/tarappo/apple_certs_info/blob/master/CODE_OF_CONDUCT.md).
@@ -3,8 +3,8 @@ require_relative 'lib/apple_certs_info/version'
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "apple_certs_info"
5
5
  spec.version = AppleCertsInfo::VERSION
6
- spec.authors = ["Toshiyuki Hirata"]
7
- spec.email = ["toshiyuki.hirata@dena.com"]
6
+ spec.authors = ["tarappo"]
7
+ spec.email = ["tarappo@gmail.com"]
8
8
 
9
9
  spec.summary = %q{Apple Certificate files and Provisioning Profile information.}
10
10
  spec.homepage = "https://github.com/tarappo/apple_certs_info"
@@ -15,70 +15,61 @@ module AppleCertsInfo
15
15
 
16
16
  # Check Certificate file for iPhone Developer /Apple Development in the KeyChain
17
17
  # @param days: limit days
18
+ # @return:
19
+ # expire_datetime: deadline
20
+ # limit_days: limit days
21
+ # cname: CN
18
22
  def self.certificate_development_list_limit_days_for(days:)
19
23
  raise "do not set days param" if days.nil?
20
- limit_days_for(days: days, type: "certificate_development")
24
+ filtering_limit_days_for(list: certificate_development_list.uniq, days: days)
21
25
  end
22
26
 
23
27
  # Check Certificate file for iPhone/Apple Distribution in the KeyChain
28
+ # @param days: limit days
29
+ # @return:
30
+ # expire_datetime: deadline
31
+ # limit_days: limit days
32
+ # cname: CN
24
33
  def self.certificate_distribution_list_limit_days_for(days:)
25
34
  raise "do not set days param" if days.nil?
26
- limit_days_for(days: days, type: "certificate_distribution")
35
+ filtering_limit_days_for(list: certificate_distribution_list.uniq, days: days)
27
36
  end
28
37
 
29
38
  # Check Provisioning Profiles in the Directory that is ~/Library/MobileDevice/Provisioning Profiles/
39
+ # @param days: limit days
40
+ # @return:
41
+ # expire_datetime: deadline
42
+ # limit_days: limit days
43
+ # app_identifier: Bundle Identifier
44
+ # app_id_name => App ID Name
30
45
  def self.provisioning_profile_list_limit_days_for(days:)
31
46
  raise "do not set days param" if days.nil?
32
- limit_days_for(days: days, type: "provisioning_profile")
47
+ filtering_limit_days_for(list: provisioning_profile_list.uniq, days: days)
33
48
  end
34
49
 
50
+ # All iPhone Developer and Apple Development List
35
51
  def self.certificate_development_list
36
52
  list = []
37
- list = certificate_list_for(name: "iPhone Developer")
38
- list << certificate_list_for(name: "Apple Development")
53
+ iphone_list = certificate_list_for(name: "iPhone Developer")
54
+ apple_list = certificate_list_for(name: "Apple Development")
55
+ list.concat(iphone_list)
56
+ list.concat(apple_list)
57
+ return list
39
58
  end
40
59
 
60
+ # All iPhone Distribution and Apple Distribution List
41
61
  def self.certificate_distribution_list
42
62
  list = []
43
- list = certificate_list_for(name: "iPhone Distribution")
44
- list << certificate_list_for(name: "Apple Distribution")
63
+ iphone_list = certificate_list_for(name: "iPhone Distribution")
64
+ apple_list = certificate_list_for(name: "Apple Distribution")
65
+ list.concat(iphone_list)
66
+ list.concat(apple_list)
67
+ return list
45
68
  end
46
69
 
47
- def self.certificate_info_for(name:)
48
- raise "do not set name param" if name.nil?
49
-
50
- temp_pem_file = Tempfile.new(::File.basename("temp_pem"))
51
-
52
- begin
53
- `security find-certificate -a -c "#{name}" -p > #{temp_pem_file.path}`
54
- result = `openssl x509 -text -fingerprint -noout -in #{temp_pem_file.path}`
55
-
56
- expire_datetime_match = result.match(/.*Not After :(.*)/)
57
- raise "not exits expire date" if expire_datetime_match.nil?
58
-
59
- expire_datetime = Time.parse(expire_datetime_match[1])
60
-
61
- cname_match = result.match(/Subject: .* CN=(.*), OU=.*/)
62
- raise "not exists cname:#{result}" if cname_match.nil?
63
- cname = cname_match[1]
64
-
65
- limit_days = calc_limit_days(datetime: expire_datetime)
66
-
67
- rescue StandardError => e
68
- raise(e.message)
69
- ensure
70
- temp_pem_file.close && temp_pem_file.unlink
71
- end
72
-
73
- return {
74
- :expire_datetime => expire_datetime,
75
- :limit_days => limit_days,
76
- :cname => cname
77
- }
78
- end
79
-
80
- def self.provisioning_profile_list_info(dir: "~/Library/MobileDevice/Provisioning\\ Profiles/*.mobileprovision")
81
- info = []
70
+ # Provisioning Profile List
71
+ def self.provisioning_profile_list(dir: "~/Library/MobileDevice/Provisioning\\ Profiles/*.mobileprovision")
72
+ list = []
82
73
  Dir.glob("#{File.expand_path(dir)}") do |file|
83
74
  file_name_match = file.match(/.*\/(.*)\.mobileprovision/)
84
75
  raise "not exists Provisioning Profile" if file_name_match.nil?
@@ -104,47 +95,87 @@ module AppleCertsInfo
104
95
  temp_plist_file.close && temp_plist_file.unlink
105
96
  end
106
97
 
107
- info << {
98
+ list << {
108
99
  :expire_datetime => expire_datetime,
109
100
  :limit_days => limit_days,
110
101
  :app_identifier => app_identifier,
111
102
  :app_id_name => app_id_name
112
103
  }
113
104
  end
114
- return info
105
+ return list
115
106
  end
116
107
 
117
- private
118
- def self.limit_days_for(days:, type:)
119
- case type
120
- when "certificate_development" then
121
- list = certificate_development_list
122
- when "certificate_distribution" then
123
- list = certificate_distribution_list
124
- when "provisioning_profile" then
125
- list = provisioning_profile_list_info
126
- end
127
- puts(list) if @debug_log == true
108
+ # Certificate Information for target name
109
+ # @return
110
+ # expire_datetime: deadline
111
+ # limit_days: limit days
112
+ # cname: CN
113
+ def self.certificate_info_for(name:)
114
+ raise "do not set name param" if name.nil?
128
115
 
129
- danger_list = []
130
- list.each do |info|
131
- danger_list << info if info[:limit_days] <= days
116
+ info = []
117
+ begin
118
+ temp_pem_file = certificate_exchange_pem_file_for(name: name)
119
+ result = `openssl crl2pkcs7 -nocrl -certfile #{temp_pem_file.path} | openssl pkcs7 -print_certs -text -noout`
120
+
121
+ expire_datetime_match = result.scan(/.*Not After :(.*)/)
122
+ raise "not exits expire date" if expire_datetime_match.nil?
123
+
124
+ cname_match = result.match(/Subject: .* CN=(.*), OU=.*/)
125
+ raise "not exists cname:#{result}" if cname_match.nil?
126
+
127
+ expire_datetime_match.each do |original_datetime|
128
+ expire_datetime = Time.parse(original_datetime.first)
129
+ limit_days = calc_limit_days(datetime: expire_datetime)
130
+ cname = cname_match[1]
131
+
132
+ info << {
133
+ :expire_datetime => expire_datetime,
134
+ :limit_days => limit_days,
135
+ :cname => cname
136
+ }
137
+ end
138
+ rescue StandardError => e
139
+ raise(e.message)
140
+ ensure
141
+ temp_pem_file.close && temp_pem_file.unlink
132
142
  end
133
143
 
134
- danger_list
144
+ return info
135
145
  end
136
146
 
147
+
148
+ private
137
149
  def self.certificate_list_for(name:)
138
150
  result = `security find-certificate -a -c "#{name}"`
139
151
  name_match_list = result.scan(/.*alis".*=\"(.*)\".*/)
140
152
  puts(name_match_list) if @debug_log == true
141
153
 
142
154
  info = []
143
- name_match_list.each do|name_match|
155
+ name_match_list.uniq.each do|name_match|
144
156
  info << certificate_info_for(name:name_match[0])
145
157
  end
146
158
 
147
- info
159
+ info.flatten!
160
+ end
161
+
162
+ # filtering list
163
+ def self.filtering_limit_days_for(list:, days:)
164
+ danger_list = []
165
+ list.each do |info|
166
+ danger_list << info if info[:limit_days].to_i <= days.to_i
167
+ end
168
+
169
+ danger_list
170
+ end
171
+
172
+ # exchange pem file
173
+ # @param name: unique name
174
+ def self.certificate_exchange_pem_file_for(name:)
175
+ temp_pem_file = Tempfile.new(::File.basename("temp_pem"))
176
+ `security find-certificate -a -c "#{name}" -p > #{temp_pem_file.path}`
177
+
178
+ temp_pem_file
148
179
  end
149
180
 
150
181
  def self.calc_limit_days(datetime:)
@@ -1,3 +1,3 @@
1
1
  module AppleCertsInfo
2
- VERSION = "0.1.5"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,18 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apple_certs_info
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
- - Toshiyuki Hirata
7
+ - tarappo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-13 00:00:00.000000000 Z
11
+ date: 2021-02-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
15
- - toshiyuki.hirata@dena.com
15
+ - tarappo@gmail.com
16
16
  executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []