ssl_labs 0.0.1 → 0.0.2
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 +4 -4
- data/README.md +15 -0
- data/lib/ssl_labs/endpoint.rb +5 -6
- data/lib/ssl_labs/endpoint_data/details/cert.rb +2 -5
- data/lib/ssl_labs/endpoint_data/details/chain.rb +1 -2
- data/lib/ssl_labs/endpoint_data/details/key.rb +2 -2
- data/lib/ssl_labs/endpoint_data/details/protocol.rb +4 -2
- data/lib/ssl_labs/endpoint_data/details/sim/client.rb +2 -2
- data/lib/ssl_labs/endpoint_data/details/sim.rb +3 -3
- data/lib/ssl_labs/endpoint_data/details/suite.rb +2 -2
- data/lib/ssl_labs/endpoint_data/details.rb +17 -12
- data/lib/ssl_labs/endpoint_data.rb +10 -12
- data/lib/ssl_labs/host.rb +12 -10
- data/lib/ssl_labs/info.rb +8 -7
- data/lib/ssl_labs.rb +8 -7
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf7eb84ab8a2af805d670dc1dabc82ffd511c889
|
4
|
+
data.tar.gz: 25699a813d19b158d8438e0ce635e42818ad7c52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8691a86faa72742401114c35e0ab27fe1e18fc807a9cfbfab1e6404155bd908466cb9011029b7935168ca53e840e620b04c2681b571bfb9023ed04d86b5aad76
|
7
|
+
data.tar.gz: a8498e9f3b63e761a9c674e9a1b67941b82a1b6a09951839c5ae72a356ec0acbc395c4bfc5d05cb603ac7d5cf444b2e2e3614b7df39cddba08ffb4cf902c95ae
|
data/README.md
CHANGED
@@ -11,3 +11,18 @@ The reference client is at https://github.com/ssllabs/ssllabs-scan
|
|
11
11
|
|
12
12
|
* Tests
|
13
13
|
|
14
|
+
* Weirdness: #analyze and #analyze! return different things
|
15
|
+
|
16
|
+
* Helper #methods? for boolean attributes
|
17
|
+
|
18
|
+
* SslLabs constructor must take a URI string _with a scheme_
|
19
|
+
|
20
|
+
* Gem version is hardcoded twice
|
21
|
+
|
22
|
+
* `endpoint_data.details.foo` is annoying; remove `details`
|
23
|
+
|
24
|
+
* Configurable poll delay
|
25
|
+
|
26
|
+
* Cert and ChainCert are melded
|
27
|
+
|
28
|
+
* Suites.preference is MIA
|
data/lib/ssl_labs/endpoint.rb
CHANGED
@@ -28,12 +28,11 @@ class SslLabs
|
|
28
28
|
endpoint = self.new
|
29
29
|
hash.each do |k, v|
|
30
30
|
sym = Util.underscore(k).to_sym
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
31
|
+
case sym
|
32
|
+
when :ip_address
|
33
|
+
endpoint.ip_address = IPAddr.new(v)
|
34
|
+
when *ATTRS
|
35
|
+
endpoint.send("#{sym}=", v)
|
37
36
|
else
|
38
37
|
raise ArgumentError, "Unknown key #{k.inspect} (#{sym})"
|
39
38
|
end
|
@@ -22,7 +22,7 @@ class SslLabs
|
|
22
22
|
:raw,
|
23
23
|
:revocation_info,
|
24
24
|
:revocation_status,
|
25
|
-
:
|
25
|
+
:scg,
|
26
26
|
:sig_alg,
|
27
27
|
:subject,
|
28
28
|
:validation_type
|
@@ -33,8 +33,7 @@ class SslLabs
|
|
33
33
|
def self.from_hash(hash)
|
34
34
|
cert = self.new
|
35
35
|
hash.each do |k, v|
|
36
|
-
sym = Util.underscore(k).to_sym
|
37
|
-
case sym
|
36
|
+
case sym = Util.underscore(k).to_sym
|
38
37
|
when :crl_ur_is
|
39
38
|
cert.crl_uris = v
|
40
39
|
when :not_after
|
@@ -43,8 +42,6 @@ class SslLabs
|
|
43
42
|
cert.not_before = Time.at(v / 1000.0)
|
44
43
|
when :ocsp_ur_is
|
45
44
|
cert.ocsp_uris = v
|
46
|
-
when :scg
|
47
|
-
cert.sgc = v
|
48
45
|
when *ATTRS
|
49
46
|
cert.send("#{sym}=", v)
|
50
47
|
else
|
@@ -21,8 +21,8 @@ class SslLabs
|
|
21
21
|
def self.from_hash(hash)
|
22
22
|
key = self.new
|
23
23
|
hash.each do |k, v|
|
24
|
-
sym = Util.underscore(k).to_sym
|
25
|
-
|
24
|
+
case sym = Util.underscore(k).to_sym
|
25
|
+
when *ATTRS
|
26
26
|
key.send("#{sym}=", v)
|
27
27
|
else
|
28
28
|
raise ArgumentError, "Unknown key #{k.inspect} (#{sym.inspect})"
|
@@ -11,6 +11,8 @@ class SslLabs
|
|
11
11
|
ATTRS = [
|
12
12
|
:id,
|
13
13
|
:name,
|
14
|
+
:q,
|
15
|
+
:v2_suites_disabled,
|
14
16
|
:version
|
15
17
|
]
|
16
18
|
|
@@ -19,8 +21,8 @@ class SslLabs
|
|
19
21
|
def self.from_hash(hash)
|
20
22
|
protocol = self.new
|
21
23
|
hash.each do |k, v|
|
22
|
-
sym = Util.underscore(k).to_sym
|
23
|
-
|
24
|
+
case sym = Util.underscore(k).to_sym
|
25
|
+
when *ATTRS
|
24
26
|
protocol.send("#{sym}=", v)
|
25
27
|
else
|
26
28
|
raise ArgumentError, "Unknown key #{k.inspect} (#{sym.inspect})"
|
@@ -22,8 +22,8 @@ class SslLabs
|
|
22
22
|
def self.from_hash(hash)
|
23
23
|
client = self.new
|
24
24
|
hash.each do |k, v|
|
25
|
-
sym = Util.underscore(k).to_sym
|
26
|
-
|
25
|
+
case sym = Util.underscore(k).to_sym
|
26
|
+
when *ATTRS
|
27
27
|
client.send("#{sym}=", v)
|
28
28
|
else
|
29
29
|
raise ArgumentError, "Unknown key #{k.inspect} (#{sym.inspect})"
|
@@ -22,10 +22,10 @@ class SslLabs
|
|
22
22
|
def self.from_hash(hash)
|
23
23
|
sim = self.new
|
24
24
|
hash.each do |k, v|
|
25
|
-
sym = Util.underscore(k).to_sym
|
26
|
-
|
25
|
+
case sym = Util.underscore(k).to_sym
|
26
|
+
when :client
|
27
27
|
sim.client = Sim::Client.from_hash(v)
|
28
|
-
|
28
|
+
when *ATTRS
|
29
29
|
sim.send("#{sym}=", v)
|
30
30
|
else
|
31
31
|
raise ArgumentError, "Unknown key #{k.inspect} (#{sym.inspect})"
|
@@ -24,8 +24,8 @@ class SslLabs
|
|
24
24
|
def self.from_hash(hash)
|
25
25
|
suite = self.new
|
26
26
|
hash.each do |k, v|
|
27
|
-
sym = Util.underscore(k).to_sym
|
28
|
-
|
27
|
+
case sym = Util.underscore(k).to_sym
|
28
|
+
when *ATTRS
|
29
29
|
suite.send("#{sym}=", v)
|
30
30
|
else
|
31
31
|
raise ArgumentError, "Unknown key #{k.inspect} (#{sym.inspect})"
|
@@ -16,28 +16,34 @@ class SslLabs
|
|
16
16
|
:cert,
|
17
17
|
:chain,
|
18
18
|
:compression_methods,
|
19
|
+
:forward_secrecy,
|
20
|
+
:heartbeat,
|
21
|
+
:heartbleed,
|
19
22
|
:host_start_time,
|
23
|
+
:http_forwarding,
|
24
|
+
:http_status_code,
|
20
25
|
:key,
|
21
26
|
:non_prefix_delegation,
|
27
|
+
:npn_protocols,
|
28
|
+
:ocsp_stapling,
|
29
|
+
:open_ssl_ccs,
|
30
|
+
:pkp_response_header,
|
22
31
|
:prefix_delegation,
|
23
32
|
:protocols,
|
33
|
+
:rc4_with_modern,
|
24
34
|
:reneg_support,
|
25
35
|
:server_signature,
|
26
36
|
:session_resumption,
|
27
|
-
:suites,
|
28
|
-
:vuln_beast,
|
29
|
-
:heartbleed,
|
30
|
-
:heartbeat,
|
31
|
-
:open_ssl_ccs,
|
32
37
|
:session_tickets,
|
38
|
+
:sims,
|
33
39
|
:sni_required,
|
34
|
-
:
|
40
|
+
:sts_response_header,
|
41
|
+
:sts_max_age,
|
42
|
+
:sts_sub_domains,
|
43
|
+
:suites,
|
35
44
|
:supports_npn,
|
36
45
|
:supports_rc4,
|
37
|
-
:
|
38
|
-
:rc4_with_modern,
|
39
|
-
:http_status_code,
|
40
|
-
:sims
|
46
|
+
:vuln_beast,
|
41
47
|
]
|
42
48
|
|
43
49
|
attr_accessor(*ATTRS)
|
@@ -45,8 +51,7 @@ class SslLabs
|
|
45
51
|
def self.from_hash(hash)
|
46
52
|
details = self.new
|
47
53
|
hash.each do |k, v|
|
48
|
-
sym = Util.underscore(k).to_sym
|
49
|
-
case sym
|
54
|
+
case sym = Util.underscore(k).to_sym
|
50
55
|
when :cert
|
51
56
|
details.cert = Cert.from_hash(v)
|
52
57
|
when :chain
|
@@ -24,19 +24,17 @@ class SslLabs
|
|
24
24
|
|
25
25
|
attr_accessor(*ATTRS)
|
26
26
|
|
27
|
-
def self.
|
27
|
+
def self.from_json(str)
|
28
|
+
json = JSON.parse(str)
|
28
29
|
endpoint = self.new
|
29
|
-
|
30
|
-
sym = Util.underscore(k).to_sym
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
else
|
38
|
-
endpoint.send("#{sym}=", v)
|
39
|
-
end
|
30
|
+
json.each do |k, v|
|
31
|
+
case sym = Util.underscore(k).to_sym
|
32
|
+
when :ip_address
|
33
|
+
endpoint.ip_address = IPAddr.new(v)
|
34
|
+
when :details
|
35
|
+
endpoint.details = EndpointData::Details.from_hash(v)
|
36
|
+
when *ATTRS
|
37
|
+
endpoint.send("#{sym}=", v)
|
40
38
|
else
|
41
39
|
raise ArgumentError, "Unknown key #{k.inspect} (#{sym})"
|
42
40
|
end
|
data/lib/ssl_labs/host.rb
CHANGED
@@ -6,6 +6,7 @@ class SslLabs
|
|
6
6
|
class Host
|
7
7
|
|
8
8
|
ATTRS = [
|
9
|
+
:cache_expiry_time,
|
9
10
|
:criteria_version,
|
10
11
|
:delegation,
|
11
12
|
:duration,
|
@@ -36,16 +37,17 @@ class SslLabs
|
|
36
37
|
json = JSON.parse(str)
|
37
38
|
host = self.new
|
38
39
|
json.each do |k, v|
|
39
|
-
sym = Util.underscore(k).to_sym
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
40
|
+
case sym = Util.underscore(k).to_sym
|
41
|
+
when :cache_expiry_time
|
42
|
+
host.cache_expiry_time = Time.at(v / 1000.0)
|
43
|
+
when :start_time
|
44
|
+
host.start_time = Time.at(v / 1000.0)
|
45
|
+
when :test_time
|
46
|
+
host.test_time = Time.at(v / 1000.0)
|
47
|
+
when :endpoints
|
48
|
+
host.endpoints = v.map { |ep| Endpoint.from_hash(ep) }
|
49
|
+
when *ATTRS
|
50
|
+
host.send("#{sym}=", v)
|
49
51
|
else
|
50
52
|
raise ArgumentError, "Unknown JSON key #{k.inspect} (#{sym.inspect})"
|
51
53
|
end
|
data/lib/ssl_labs/info.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'json'
|
2
2
|
|
3
|
+
require 'ssl_labs/util'
|
4
|
+
|
3
5
|
class SslLabs
|
4
6
|
|
5
7
|
class Info
|
@@ -7,7 +9,8 @@ class SslLabs
|
|
7
9
|
ATTRS = [
|
8
10
|
:engine_version,
|
9
11
|
:criteria_version,
|
10
|
-
:client_max_assessments
|
12
|
+
:client_max_assessments,
|
13
|
+
:notice
|
11
14
|
]
|
12
15
|
|
13
16
|
attr_accessor(*ATTRS)
|
@@ -17,13 +20,11 @@ class SslLabs
|
|
17
20
|
json = JSON.parse(str)
|
18
21
|
info = self.new
|
19
22
|
json.each do |k, v|
|
20
|
-
case k
|
21
|
-
when
|
22
|
-
info.engine_version = v
|
23
|
-
when 'criteriaVersion'
|
24
|
-
info.criteria_version = v
|
25
|
-
when 'clientMaxAssessments'
|
23
|
+
case sym = Util.underscore(k).to_sym
|
24
|
+
when :client_max_assessments
|
26
25
|
info.client_max_assessments = v.to_i
|
26
|
+
when *ATTRS
|
27
|
+
info.send("#{sym}=", v)
|
27
28
|
else
|
28
29
|
raise ArgumentError, "Unknown key #{k.inspect}"
|
29
30
|
end
|
data/lib/ssl_labs.rb
CHANGED
@@ -9,7 +9,7 @@ require 'ssl_labs/info'
|
|
9
9
|
class SslLabs
|
10
10
|
|
11
11
|
# Gem version.
|
12
|
-
VERSION = '0.0.
|
12
|
+
VERSION = '0.0.2'
|
13
13
|
|
14
14
|
# User agent for client.
|
15
15
|
USER_AGENT = "ssl_labs.rb #{VERSION}"
|
@@ -33,14 +33,15 @@ class SslLabs
|
|
33
33
|
opts_a = opts.flat_map do |k, v|
|
34
34
|
case k
|
35
35
|
when :publish, :clear_cache, :from_cache
|
36
|
-
[k, v ?
|
36
|
+
[k, v ? :on : :off]
|
37
37
|
when :all
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
case v
|
39
|
+
when true
|
40
|
+
[k, :on]
|
41
|
+
when :done
|
41
42
|
[k, v]
|
42
43
|
else
|
43
|
-
raise ArgumentError, "Invalid value for option #{k.inspect}"
|
44
|
+
raise ArgumentError, "Invalid value #{v.inspect} for option #{k.inspect}"
|
44
45
|
end
|
45
46
|
else
|
46
47
|
raise ArgumentError, "Invalid option #{k.inspect}"
|
@@ -67,7 +68,7 @@ class SslLabs
|
|
67
68
|
body = invoke(:get_endpoint_data,
|
68
69
|
:host => uri.host,
|
69
70
|
:s => ep.ip_address,
|
70
|
-
:from_cache => from_cache ?
|
71
|
+
:from_cache => from_cache ? :on : :off)
|
71
72
|
EndpointData.from_json(body)
|
72
73
|
end
|
73
74
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ssl_labs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Carpenter
|
@@ -10,6 +10,20 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2014-10-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.0.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.0.1
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: mechanize
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|