ruby_gpg2 0.1.0.pre.6 → 0.1.0.pre.7

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: ae329dd0d835adcc4c63cf46ecd8096bbb6ac3f078e7e4086fb7b09a4286f3fc
4
- data.tar.gz: 1b677593919f3ad60db2e2f2d9d131705737ba5c7da490cbdbd96eab742aade9
3
+ metadata.gz: fb0849638a19aa4b0403c24df4b3c7bc7f395a2d6d1b7f0eec28e0c87acdac4f
4
+ data.tar.gz: 6c5f98a82c15e4974c062f2aa606a1f908cc5454b1fc9a1869f79540ad557476
5
5
  SHA512:
6
- metadata.gz: c55c420f5f178b499884846e2c858f0d467f4a5fa20e71aaf154239400e56295a06673047bf19ec94ab637756b436bf6d4ffe26770270aec022d34c2d1ac2ec3
7
- data.tar.gz: acff64a40f09f97cf1f742aece11b89554f3f25a258a3070e885702511d582c552eb13ec46e3b440d2efc426e37c6cb8b830849e3b4d87b13c2640271eb57ee9
6
+ metadata.gz: bbfb0b48c99ae4390987ff2a7ae7907745facb6a0fa677055eb9f83dbff03ab210a7772f0a35444a82c23a2f0867e96cdfc6f16346e3e74bffac39aafddc023e
7
+ data.tar.gz: bc23189fc6f9984a33f0bd956301c05767ecb9e4adbd72ba7c8f3541dab758c6b68dc50c9fe831c8ca2db93cfc1a13797c00024dc3904973da21fffa7062cd4e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby_gpg2 (0.1.0.pre.6)
4
+ ruby_gpg2 (0.1.0.pre.7)
5
5
  lino (= 1.3.0)
6
6
 
7
7
  GEM
@@ -1,4 +1,5 @@
1
1
  require_relative './colon_record'
2
+ require_relative './key'
2
3
 
3
4
  module RubyGPG2
4
5
  class ColonOutput
@@ -9,14 +10,63 @@ module RubyGPG2
9
10
  .collect { |record| ColonRecord.parse(record) })
10
11
  end
11
12
 
12
- include Enumerable
13
-
14
13
  def initialize(records)
15
14
  @records = records
16
15
  end
17
16
 
18
- def each(&block)
19
- @records.each(&block)
17
+ def public_keys
18
+ public_key_indices = @records
19
+ .each_with_index
20
+ .collect { |record, index|
21
+ record.type == :public_key ? index : nil
22
+ }
23
+ .compact << @records.count
24
+
25
+ public_key_record_groups = []
26
+ public_key_indices.each_cons(2) do |index_pair|
27
+ public_key_record_groups <<
28
+ @records[index_pair[0]...index_pair[1]]
29
+ end
30
+
31
+ public_key_record_groups.map do |record_group|
32
+ records_in_group = record_group.count
33
+ public_key_record = record_group[0]
34
+
35
+ fingerprint_record =
36
+ (records_in_group > 1 && record_group[1].fingerprint_record?) ?
37
+ record_group[1] :
38
+ nil
39
+ fingerprint = fingerprint_record&.fingerprint
40
+
41
+ user_id_records = record_group
42
+ .drop_while { |r| !r.user_id_record? }
43
+ .take_while { |r| r.user_id_record? }
44
+ user_ids = user_id_records.map do |record|
45
+ UserID.new(
46
+ name: record.user_name,
47
+ comment: record.user_comment,
48
+ email: record.user_email,
49
+ validity: record.validity,
50
+ creation_date: record.creation_date,
51
+ expiration_date: record.expiration_date,
52
+ hash: record.user_id_hash,
53
+ origin: record.origin)
54
+ end
55
+
56
+ Key.new(
57
+ type: :public,
58
+ validity: public_key_record.validity,
59
+ length: public_key_record.key_length,
60
+ algorithm: public_key_record.key_algorithm,
61
+ id: public_key_record.key_id,
62
+ creation_date: public_key_record.creation_date,
63
+ owner_trust: public_key_record.owner_trust,
64
+ capabilities: public_key_record.key_capabilities,
65
+ compliance_modes: public_key_record.compliance_modes,
66
+ origin: public_key_record.origin,
67
+ fingerprint: fingerprint,
68
+ user_ids: user_ids)
69
+ end
20
70
  end
21
71
 
22
72
  def ==(other)
@@ -2,6 +2,8 @@ require 'date'
2
2
 
3
3
  module RubyGPG2
4
4
  class ColonRecord
5
+ USER_ID_REGEX = /^(.*?) (?:\((.*)\) )?<(.*)>$/
6
+
5
7
  TYPES = {
6
8
  'pub' => :public_key,
7
9
  'crt' => :x509_certificate,
@@ -173,6 +175,32 @@ module RubyGPG2
173
175
  @maximum_certificate_chain_depth = opts[:maximum_certificate_chain_depth]
174
176
  end
175
177
 
178
+ def fingerprint_record?
179
+ type == :fingerprint
180
+ end
181
+
182
+ def user_id_record?
183
+ type == :user_id
184
+ end
185
+
186
+ def user_name
187
+ if (match = user_id&.match(USER_ID_REGEX))
188
+ match[1]
189
+ end
190
+ end
191
+
192
+ def user_comment
193
+ if (match = user_id&.match(USER_ID_REGEX))
194
+ match[2]
195
+ end
196
+ end
197
+
198
+ def user_email
199
+ if (match = user_id&.match(USER_ID_REGEX))
200
+ match[3]
201
+ end
202
+ end
203
+
176
204
  def ==(other)
177
205
  other.class == self.class && other.state == state
178
206
  end
@@ -0,0 +1,58 @@
1
+ module RubyGPG2
2
+ class Key
3
+ attr_reader(
4
+ :type,
5
+ :validity,
6
+ :length,
7
+ :algorithm,
8
+ :id,
9
+ :creation_date,
10
+ :owner_trust,
11
+ :capabilities,
12
+ :compliance_modes,
13
+ :origin,
14
+ :fingerprint,
15
+ :user_ids)
16
+
17
+ def initialize(opts)
18
+ @type = opts[:type]
19
+ @validity = opts[:validity]
20
+ @length = opts[:length]
21
+ @algorithm = opts[:algorithm]
22
+ @id = opts[:id]
23
+ @creation_date = opts[:creation_date]
24
+ @owner_trust = opts[:owner_trust]
25
+ @capabilities = opts[:capabilities]
26
+ @compliance_modes = opts[:compliance_modes]
27
+ @origin = opts[:origin]
28
+ @fingerprint = opts[:fingerprint]
29
+ @user_ids = opts[:user_ids]
30
+ end
31
+
32
+ def primary_user_id
33
+ @user_ids&.first
34
+ end
35
+
36
+ def ==(other)
37
+ other.class == self.class && other.state == state
38
+ end
39
+
40
+ protected
41
+
42
+ def state
43
+ [
44
+ @type,
45
+ @validity,
46
+ @length,
47
+ @algorithm,
48
+ @id,
49
+ @creation_date,
50
+ @owner_trust,
51
+ @capabilities,
52
+ @compliance_modes,
53
+ @origin,
54
+ @fingerprint
55
+ ]
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,43 @@
1
+ module RubyGPG2
2
+ class UserID
3
+ attr_reader(
4
+ :name,
5
+ :comment,
6
+ :email,
7
+ :validity,
8
+ :creation_date,
9
+ :expiration_date,
10
+ :hash,
11
+ :origin)
12
+
13
+ def initialize(opts)
14
+ @name = opts[:name]
15
+ @comment = opts[:comment]
16
+ @email = opts[:email]
17
+ @validity = opts[:validity]
18
+ @creation_date = opts[:creation_date]
19
+ @expiration_date = opts[:expiration_date]
20
+ @hash = opts[:hash]
21
+ @origin = opts[:origin]
22
+ end
23
+
24
+ def ==(other)
25
+ other.class == self.class && other.state == state
26
+ end
27
+
28
+ protected
29
+
30
+ def state
31
+ [
32
+ @name,
33
+ @comment,
34
+ @email,
35
+ @validity,
36
+ @creation_date,
37
+ @expiration_date,
38
+ @hash,
39
+ @origin
40
+ ]
41
+ end
42
+ end
43
+ end
@@ -1,3 +1,3 @@
1
1
  module RubyGPG2
2
- VERSION = '0.1.0.pre.6'
2
+ VERSION = '0.1.0.pre.7'
3
3
  end
data/lib/ruby_gpg2.rb CHANGED
@@ -2,6 +2,8 @@ require 'ruby_gpg2/version'
2
2
  require 'ruby_gpg2/commands'
3
3
  require 'ruby_gpg2/parameter_file'
4
4
  require 'ruby_gpg2/colon_output'
5
+ require 'ruby_gpg2/key'
6
+ require 'ruby_gpg2/user_id'
5
7
 
6
8
  module RubyGPG2
7
9
  class << self
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_gpg2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre.6
4
+ version: 0.1.0.pre.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toby Clemson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-30 00:00:00.000000000 Z
11
+ date: 2020-05-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lino
@@ -170,7 +170,9 @@ files:
170
170
  - lib/ruby_gpg2/commands/mixins/colon_config.rb
171
171
  - lib/ruby_gpg2/commands/mixins/global_config.rb
172
172
  - lib/ruby_gpg2/commands/mixins/with_captured_output.rb
173
+ - lib/ruby_gpg2/key.rb
173
174
  - lib/ruby_gpg2/parameter_file.rb
175
+ - lib/ruby_gpg2/user_id.rb
174
176
  - lib/ruby_gpg2/version.rb
175
177
  - ruby_gpg2.gemspec
176
178
  - scripts/ci/common/configure-git.sh