dkim-query 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2d9f9098c1e030f0a2a1c2fba560c7401e141f59
4
- data.tar.gz: 59f563536960ccf6971cd19c185bad31826edfef
3
+ metadata.gz: 1044c31de0b41b92f7bef616f018efd5214ba8e1
4
+ data.tar.gz: 6ed8cc2e233929018e7a464457436674f25a1f33
5
5
  SHA512:
6
- metadata.gz: 089538eaa322ce4398a6d7bf93bd8ace4835031f1ce33cee74b70f62b3384961053d7fbb63f18a06e01f91875647771230c8d8260cdf3ecbb3a95710caeab4ae
7
- data.tar.gz: 3b32e90b1df9e12058207bb28ede74a056f029522b072a44806c7ff13f7c20218aa34cae5a2bad30c62c1a9d2e91adc4f64a1955ada1ee682aeee876517f07e6
6
+ metadata.gz: 7d0bf4acd647b16c40291120e8f172dfe529cec4dd9e0cd65f607871548684a4b8d737134981e15d001b158d885d8ee795bf9d81dfa4f078e35995309dc5a910
7
+ data.tar.gz: b3422596b4b3dc22ba95561eb22368bdd7de929db4b9a086679c14f6ea16d38d8a155c556799bc965e3774d454f3d3dce94b45f132f8c6be61530873db6bae96
data/ChangeLog.md CHANGED
@@ -1,3 +1,9 @@
1
+ ### 0.2.3 / 2015-07-22
2
+
3
+ * Fixed a typo in the `dkim-query` util.
4
+ * Convert all text into Strings.
5
+ * Convert `t=y` or `t=s` values to Symbols.
6
+
1
7
  ### 0.2.2 / 2015-07-04
2
8
 
3
9
  * Fixed {DKIM::Query::MalformedKey#to_s}.
data/README.md CHANGED
@@ -29,10 +29,10 @@ Parse a DKIM record:
29
29
  # => :rsa
30
30
 
31
31
  key.n
32
- # => "A 1024 bit key"@230
32
+ # => "A 1024 bit key"
33
33
 
34
34
  key.p
35
- # => "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB"@10
35
+ # => "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB"
36
36
 
37
37
  key.s
38
38
  # => nil
@@ -42,8 +42,15 @@ Parse a DKIM record:
42
42
 
43
43
  Query all keys for a domain:
44
44
 
45
- DKIM::Query::Domain.query('yahoo.com')
46
- # => #<DKIM::Query::Domain:0x0000000315c950 @name="yahoo.com", @keys={"s1024"=>#<DKIM::Query::Key:0x0000000315c9f0 @v=nil, @g=nil, @h=nil, @k=:rsa, @n="A 1024 bit key;"@230, @p="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB"@10, @s=nil, @t=nil>}>
45
+ domain = DKIM::Query::Domain.query('yahoo.com')
46
+ # => #<DKIM::Query::Domain:0x0000000315c950 @name="yahoo.com", @keys={"s1024"=>#<DKIM::Query::Key:0x0000000315c9f0 @v=nil, @g=nil, @h=nil, @k=:rsa, @n="A 1024 bit key;", @p="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB", @s=nil, @t=nil>}>
47
+
48
+ domain['s1024']
49
+ # => #<DKIM::Query::Key:0x0000000315c9f0 @v=nil, @g=nil, @h=nil, @k=:rsa, @n="A 1024 bit key;", @p="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB", @s=nil, @t=nil>
50
+
51
+ domain.each do |key|
52
+ # ...
53
+ end
47
54
 
48
55
  ## Synopsis
49
56
 
@@ -87,7 +94,7 @@ Query multiple domains:
87
94
 
88
95
  ## Install
89
96
 
90
- rake install
97
+ $ gem install dkim-query
91
98
 
92
99
  ## License
93
100
 
data/bin/dkim-query CHANGED
@@ -3,7 +3,7 @@
3
3
  lib_dir = File.expand_path('../../lib',__FILE__)
4
4
  $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
5
5
 
6
- require 'dkim-query'
6
+ require 'dkim/query'
7
7
 
8
8
  unless ARGV[0]
9
9
  warn "Please supply at least one host name"
@@ -5,6 +5,9 @@ require 'resolv'
5
5
 
6
6
  module DKIM
7
7
  module Query
8
+ #
9
+ # Represents the DKIM keys of a domain.
10
+ #
8
11
  class Domain
9
12
 
10
13
  include Enumerable
@@ -4,29 +4,56 @@ require 'dkim/query/malformed_key'
4
4
 
5
5
  module DKIM
6
6
  module Query
7
+ #
8
+ # Represents an individual DKIM signing key.
9
+ #
7
10
  class Key
8
11
 
12
+ # DKIM version.
13
+ #
14
+ # @return [:DKIM1]
9
15
  attr_reader :v
10
16
  alias version v
11
17
 
18
+ # `g=` tag.
19
+ #
20
+ # @return [String, nil]
12
21
  attr_reader :g
13
22
  alias granularity g
14
23
 
24
+ # `h=` tag.
25
+ #
26
+ # @return [:sha1, :sha256, Array<:sha1, :sha256, String>, nil]
15
27
  attr_reader :h
16
28
  alias hash h
17
29
 
30
+ # `k=` tag.
31
+ #
32
+ # @return [:rsa, String]
18
33
  attr_reader :k
19
34
  alias key k
20
35
 
36
+ # `n=` tag.
37
+ #
38
+ # @return [String, nil]
21
39
  attr_reader :n
22
40
  alias notes n
23
41
 
42
+ # `p=` tag.
43
+ #
44
+ # @return [String, nil]
24
45
  attr_reader :p
25
46
  alias public_key p
26
47
 
48
+ # `s=` tag.
49
+ #
50
+ # @return [:email, :*, String, Array<:email, :*, String>, nil]
27
51
  attr_reader :s
28
52
  alias service_type s
29
53
 
54
+ # `t=` tag.
55
+ #
56
+ # @return [:y, :s, String, nil]
30
57
  attr_reader :t
31
58
  alias flags t
32
59
 
@@ -1,5 +1,8 @@
1
1
  module DKIM
2
2
  module Query
3
+ #
4
+ # Represents a unparsable DKIM key.
5
+ #
3
6
  class MalformedKey
4
7
 
5
8
  # Raw value of the DKIM key.
@@ -31,6 +31,8 @@ module DKIM
31
31
  ).as(:tag)
32
32
  end
33
33
 
34
+ private
35
+
34
36
  def self.key_tag_rule(name,&block)
35
37
  rule(:"key_#{name}_tag") do
36
38
  str(name).as(:name) >>
@@ -43,37 +45,43 @@ module DKIM
43
45
  str(name).as(:symbol)
44
46
  end
45
47
 
48
+ public
49
+
46
50
  key_tag_rule('v') { symbol('DKIM1') }
47
51
  key_tag_rule('g') { key_g_tag_lpart }
48
52
  rule(:key_g_tag_lpart) do
49
- dot_atom_text.maybe >> (str('*') >> dot_atom_text.maybe).maybe
53
+ (
54
+ dot_atom_text.maybe >>
55
+ (str('*') >> dot_atom_text.maybe).maybe
56
+ ).as(:string)
57
+ end
58
+ rule(:dot_atom_text) do
59
+ atext.repeat(1) >> (str('.') >> atext.repeat(1)).repeat(0)
50
60
  end
51
- rule(:dot_atom_text) { atext.repeat(1) >> (str('.') >> atext.repeat(1)).repeat(0) }
52
61
 
53
62
  key_tag_rule('h') do
54
- key_h_tag_alg >>
55
- (fws? >> str(':') >> fws? >> key_h_tag_alg).repeat(0)
63
+ key_h_tag_alg >> (fws? >> str(':') >> fws? >> key_h_tag_alg).repeat(0)
56
64
  end
57
65
  rule(:key_h_tag_alg) { symbol('sha1') | symbol('sha256') | x_key_h_tag_alg }
58
- rule(:x_key_h_tag_alg) { hyphenated_word }
66
+ rule(:x_key_h_tag_alg) { hyphenated_word.as(:string) }
59
67
 
60
68
  key_tag_rule('k') { key_k_tag_type }
61
69
  rule(:key_k_tag_type) { symbol('rsa') | x_key_k_tag_type }
62
- rule(:x_key_k_tag_type) { hyphenated_word }
70
+ rule(:x_key_k_tag_type) { hyphenated_word.as(:string) }
63
71
 
64
- key_tag_rule('n') { qp_section }
72
+ key_tag_rule('n') { qp_section.as(:string) }
65
73
  key_tag_rule('p') { base64string.as(:asn1).maybe }
66
74
  key_tag_rule('s') do
67
75
  key_s_tag_type >> (fws? >> str(':') >> fws? >> key_s_tag_type).repeat(0)
68
76
  end
69
77
  rule(:key_s_tag_type) { symbol('email') | symbol('*') | x_key_s_tag_type }
70
- rule(:x_key_s_tag_type) { hyphenated_word }
78
+ rule(:x_key_s_tag_type) { hyphenated_word.as(:string) }
71
79
 
72
80
  key_tag_rule('t') do
73
81
  key_t_tag_flag >> (fws? >> str(':') >> fws? >> key_t_tag_flag).repeat(0)
74
82
  end
75
- rule(:key_t_tag_flag) { match['ys'] | x_key_t_tag_flag }
76
- rule(:x_key_t_tag_flag) { hyphenated_word }
83
+ rule(:key_t_tag_flag) { match['ys'].as(:symbol) | x_key_t_tag_flag }
84
+ rule(:x_key_t_tag_flag) { hyphenated_word.as(:string) }
77
85
 
78
86
  #
79
87
  # Section 2.6: DKIM-Quoted-Printable
@@ -130,6 +138,7 @@ module DKIM
130
138
  class Transform < Parslet::Transform
131
139
 
132
140
  rule(:symbol => simple(:name)) { name.to_sym }
141
+ rule(:string => simple(:text)) { text.to_s }
133
142
  # XXX: temporarily disable ASN1 decoding, due to an OpenSSL bug.
134
143
  # rule(:asn1 => simple(:blob)) { OpenSSL::ASN1.decode(blob) }
135
144
  rule(:asn1 => simple(:blob)) { blob }
@@ -42,6 +42,12 @@ module DKIM
42
42
  # Default known selectors
43
43
  SELECTORS = %w[default dkim s1024 c1211]
44
44
 
45
+ #
46
+ # DKIM query selectors for the host.
47
+ #
48
+ # @param [String] host
49
+ #
50
+ # @return [Array<String>]
45
51
  #
46
52
  # @api private
47
53
  #
@@ -49,6 +55,12 @@ module DKIM
49
55
  SELECTORS + [host_without_tld(host)]
50
56
  end
51
57
 
58
+ #
59
+ # Removes the TLD from the hostname.
60
+ #
61
+ # @param [String] host
62
+ #
63
+ # @return [String]
52
64
  #
53
65
  # @api private
54
66
  #
@@ -1,5 +1,6 @@
1
1
  module DKIM
2
2
  module Query
3
- VERSION = '0.2.2'
3
+ # dkim-query version
4
+ VERSION = '0.2.3'
4
5
  end
5
6
  end
data/spec/key_spec.rb CHANGED
@@ -4,12 +4,14 @@ require 'dkim/query/key'
4
4
  describe Key do
5
5
  let(:k) { :rsa }
6
6
  let(:p) { "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB" }
7
+ let(:t) { :s }
7
8
  let(:n) { "A 1024 bit key;" }
8
9
 
9
10
  subject do
10
11
  described_class.new(
11
12
  k: k,
12
13
  p: p,
14
+ t: t,
13
15
  n: n
14
16
  )
15
17
  end
@@ -23,12 +25,16 @@ describe Key do
23
25
  expect(subject.p).to be p
24
26
  end
25
27
 
28
+ it "should set @t" do
29
+ expect(subject.t).to be t
30
+ end
31
+
26
32
  it "should set @n" do
27
33
  expect(subject.n).to be n
28
34
  end
29
35
  end
30
36
 
31
- let(:record) { %{k=#{k}; p=#{p}; n=#{n}} }
37
+ let(:record) { %{k=#{k}; p=#{p}; t=#{t}; n=#{n}} }
32
38
  let(:invalid_record) { "v=spf1" }
33
39
 
34
40
  describe ".parse!" do
@@ -38,6 +44,22 @@ describe Key do
38
44
  it "should return a Key" do
39
45
  expect(subject).to be_kind_of(described_class)
40
46
  end
47
+
48
+ it "should parse k" do
49
+ expect(subject.k).to be k
50
+ end
51
+
52
+ it "should parse p" do
53
+ expect(subject.p).to be == p
54
+ end
55
+
56
+ it "should parse t" do
57
+ expect(subject.t).to be t
58
+ end
59
+
60
+ it "should parse n" do
61
+ expect(subject.n).to be == n
62
+ end
41
63
  end
42
64
 
43
65
  context "when parsing an invalid DKIM Key record" do
@@ -78,6 +100,10 @@ describe Key do
78
100
  expect(subject[:p]).to be == p
79
101
  end
80
102
 
103
+
104
+ it "should include :t" do
105
+ expect(subject[:t]).to be == t
106
+ end
81
107
  it "should include :n" do
82
108
  expect(subject[:n]).to be == n
83
109
  end
@@ -85,7 +111,7 @@ describe Key do
85
111
 
86
112
  describe "#to_s" do
87
113
  it "should return a semicolon deliminited string" do
88
- expect(subject.to_s).to be == "k=#{k}; p=#{p}; n=#{n}"
114
+ expect(subject.to_s).to be == "k=#{k}; p=#{p}; t=#{t}; n=#{n}"
89
115
  end
90
116
  end
91
117
  end
data/spec/parser_spec.rb CHANGED
@@ -81,7 +81,7 @@ describe Parser do
81
81
  it "should parse n=..." do
82
82
  expect(subject.parse("n=#{notes}")).to be == {
83
83
  name: 'n',
84
- value: notes
84
+ value: {string: notes}
85
85
  }
86
86
  end
87
87
  end
@@ -130,14 +130,14 @@ describe Parser do
130
130
  it "should parse t=y" do
131
131
  expect(subject.parse('t=y')).to be == {
132
132
  name: 't',
133
- value: 'y'
133
+ value: {symbol: 'y'}
134
134
  }
135
135
  end
136
136
 
137
137
  it "should parse t=s" do
138
138
  expect(subject.parse('t=s')).to be == {
139
139
  name: 't',
140
- value: 's'
140
+ value: {symbol: 's'}
141
141
  }
142
142
  end
143
143
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dkim-query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - nicktitle
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-04 00:00:00.000000000 Z
11
+ date: 2015-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parslet