dkim-query 0.2.2 → 0.2.3

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
  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