record_store 5.7.4 → 5.8.0
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/.rubocop-https---shopify-github-io-ruby-style-guide-rubocop-yml +0 -3
- data/lib/record_store.rb +1 -0
- data/lib/record_store/cli.rb +9 -2
- data/lib/record_store/provider.rb +4 -4
- data/lib/record_store/provider/dnsimple.rb +13 -0
- data/lib/record_store/provider/ns1.rb +5 -1
- data/lib/record_store/record/sshfp.rb +56 -0
- data/lib/record_store/version.rb +1 -1
- data/lib/record_store/zone.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3b33376f7cc95cbaab9a9d6e1c7bc635085a91578709b78e498c7e3719eef07a
|
|
4
|
+
data.tar.gz: 363acd2374cca032b28ea6dd4f9a6976176803f54f7cbad5a1206e5b0b7018bc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d25cc0344334dbc59f1493a33568d660bdfee9797652f302f72aa0b8d8225daff4ab09216c5de2050475d75252a841af4dde39331b89389f426e5bd8391ded29
|
|
7
|
+
data.tar.gz: 76431cfa62e96ce5a362ff129cd28aeec3f198f89749952ef643eeeb6e12a1ec3fe5bf8b64bfba4fcbc84400888acdd270dc44ee3d331afd0f573ecb69381f56
|
data/lib/record_store.rb
CHANGED
|
@@ -19,6 +19,7 @@ require 'record_store/record/caa'
|
|
|
19
19
|
require 'record_store/record/cname'
|
|
20
20
|
require 'record_store/record/mx'
|
|
21
21
|
require 'record_store/record/ns'
|
|
22
|
+
require 'record_store/record/sshfp'
|
|
22
23
|
require 'record_store/record/txt'
|
|
23
24
|
require 'record_store/record/spf'
|
|
24
25
|
require 'record_store/record/srv'
|
data/lib/record_store/cli.rb
CHANGED
|
@@ -103,9 +103,16 @@ module RecordStore
|
|
|
103
103
|
exit
|
|
104
104
|
end
|
|
105
105
|
|
|
106
|
-
zones.
|
|
107
|
-
|
|
106
|
+
invalid_zones = zones.select(&:invalid?)
|
|
107
|
+
unless invalid_zones.empty?
|
|
108
|
+
error_message = invalid_zones
|
|
109
|
+
.map { |z| "Attempted to apply invalid zone: #{z.name}: #{z.errors.full_messages.join(',')}" }
|
|
110
|
+
.join("\n")
|
|
111
|
+
|
|
112
|
+
abort(error_message)
|
|
113
|
+
end
|
|
108
114
|
|
|
115
|
+
zones.each do |zone|
|
|
109
116
|
changesets = zone.build_changesets
|
|
110
117
|
changesets.each(&:apply)
|
|
111
118
|
end
|
|
@@ -54,7 +54,7 @@ module RecordStore
|
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
# returns an array of Record objects that match the records which exist in the provider
|
|
57
|
-
def retrieve_current_records(zone:, stdout: $stdout)
|
|
57
|
+
def retrieve_current_records(zone:, stdout: $stdout)
|
|
58
58
|
raise NotImplementedError
|
|
59
59
|
end
|
|
60
60
|
|
|
@@ -104,15 +104,15 @@ module RecordStore
|
|
|
104
104
|
|
|
105
105
|
private
|
|
106
106
|
|
|
107
|
-
def add(record)
|
|
107
|
+
def add(record)
|
|
108
108
|
raise NotImplementedError
|
|
109
109
|
end
|
|
110
110
|
|
|
111
|
-
def remove(record)
|
|
111
|
+
def remove(record)
|
|
112
112
|
raise NotImplementedError
|
|
113
113
|
end
|
|
114
114
|
|
|
115
|
-
def update(id, record)
|
|
115
|
+
def update(id, record)
|
|
116
116
|
raise NotImplementedError
|
|
117
117
|
end
|
|
118
118
|
end
|
|
@@ -3,6 +3,10 @@ require 'dnsimple'
|
|
|
3
3
|
module RecordStore
|
|
4
4
|
class Provider::DNSimple < Provider
|
|
5
5
|
class << self
|
|
6
|
+
def record_types
|
|
7
|
+
super | Set.new(['SSHFP'])
|
|
8
|
+
end
|
|
9
|
+
|
|
6
10
|
def supports_alias?
|
|
7
11
|
true
|
|
8
12
|
end
|
|
@@ -95,6 +99,13 @@ module RecordStore
|
|
|
95
99
|
record.merge!(preference: api_record.priority, exchange: api_record.content)
|
|
96
100
|
when 'NS'
|
|
97
101
|
record.merge!(nsdname: api_record.content)
|
|
102
|
+
when 'SSHFP'
|
|
103
|
+
algorithm, fptype, fingerprint = api_record.content.split(' ')
|
|
104
|
+
record.merge!(
|
|
105
|
+
algorithm: algorithm.to_i,
|
|
106
|
+
fptype: fptype.to_i,
|
|
107
|
+
fingerprint: fingerprint,
|
|
108
|
+
)
|
|
98
109
|
when 'SPF', 'TXT'
|
|
99
110
|
record.merge!(txtdata: Record.unescape(api_record.content).gsub(';', '\;'))
|
|
100
111
|
when 'SRV'
|
|
@@ -132,6 +143,8 @@ module RecordStore
|
|
|
132
143
|
record_hash[:content] = record.exchange.chomp('.')
|
|
133
144
|
when 'NS'
|
|
134
145
|
record_hash[:content] = record.nsdname.chomp('.')
|
|
146
|
+
when 'SSHFP'
|
|
147
|
+
record_hash[:content] = record.rdata_txt
|
|
135
148
|
when 'SPF', 'TXT'
|
|
136
149
|
record_hash[:content] = Record.escape(record.txtdata).gsub('\;', ';')
|
|
137
150
|
when 'SRV'
|
|
@@ -86,7 +86,11 @@ module RecordStore
|
|
|
86
86
|
zone: zone,
|
|
87
87
|
fqdn: record_fqdn,
|
|
88
88
|
type: record.type,
|
|
89
|
-
params: {
|
|
89
|
+
params: {
|
|
90
|
+
answers: new_answers,
|
|
91
|
+
ttl: record.ttl,
|
|
92
|
+
use_client_subnet: false, # only required for filter chains that are not supported by record_store
|
|
93
|
+
}
|
|
90
94
|
)
|
|
91
95
|
return
|
|
92
96
|
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
module RecordStore
|
|
2
|
+
class Record::SSHFP < Record
|
|
3
|
+
attr_accessor :algorithm, :fptype, :fingerprint
|
|
4
|
+
|
|
5
|
+
# https://www.iana.org/assignments/dns-sshfp-rr-parameters/dns-sshfp-rr-parameters.xhtml
|
|
6
|
+
module Algorithms
|
|
7
|
+
RESERVED = 0
|
|
8
|
+
RSA = 1
|
|
9
|
+
DSA = 2
|
|
10
|
+
ECDSA = 3
|
|
11
|
+
ED25519 = 4
|
|
12
|
+
UNASSIGNED = 5
|
|
13
|
+
ED448 = 6
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
module FingerprintTypes
|
|
17
|
+
RESERVED = 0
|
|
18
|
+
SHA_1 = 1
|
|
19
|
+
SHA_256 = 2
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
FINGERPRINT_REGEX = /\A[[:xdigit:]]+\z/
|
|
23
|
+
|
|
24
|
+
class << self
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def constants_defined_in(mod)
|
|
28
|
+
mod.constants(false).map(&mod.method(:const_get))
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
validates :algorithm, presence: true, inclusion: { in: constants_defined_in(Algorithms) }
|
|
33
|
+
validates :fingerprint, presence: true, format: { with: FINGERPRINT_REGEX }
|
|
34
|
+
validates :fptype, presence: true, inclusion: { in: constants_defined_in(FingerprintTypes) }
|
|
35
|
+
|
|
36
|
+
def initialize(record)
|
|
37
|
+
super
|
|
38
|
+
|
|
39
|
+
@algorithm = record.fetch(:algorithm)
|
|
40
|
+
@fptype = record.fetch(:fptype)
|
|
41
|
+
@fingerprint = record.fetch(:fingerprint)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def rdata
|
|
45
|
+
{
|
|
46
|
+
algorithm: algorithm,
|
|
47
|
+
fingerprint: fingerprint,
|
|
48
|
+
fptype: fptype,
|
|
49
|
+
}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def rdata_txt
|
|
53
|
+
"#{algorithm} #{fptype} #{fingerprint}"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
data/lib/record_store/version.rb
CHANGED
data/lib/record_store/zone.rb
CHANGED
|
@@ -181,7 +181,7 @@ module RecordStore
|
|
|
181
181
|
|
|
182
182
|
providers.each do |provider|
|
|
183
183
|
(record_types - provider.record_types).each do |record_type|
|
|
184
|
-
errors.add(:records, "#{record_type} is
|
|
184
|
+
errors.add(:records, "#{record_type} is not a supported record type in #{provider}")
|
|
185
185
|
end
|
|
186
186
|
end
|
|
187
187
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: record_store
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.
|
|
4
|
+
version: 5.8.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Willem van Bergen
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2020-
|
|
12
|
+
date: 2020-04-01 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: thor
|
|
@@ -371,6 +371,7 @@ files:
|
|
|
371
371
|
- lib/record_store/record/ns.rb
|
|
372
372
|
- lib/record_store/record/spf.rb
|
|
373
373
|
- lib/record_store/record/srv.rb
|
|
374
|
+
- lib/record_store/record/sshfp.rb
|
|
374
375
|
- lib/record_store/record/txt.rb
|
|
375
376
|
- lib/record_store/version.rb
|
|
376
377
|
- lib/record_store/zone.rb
|
|
@@ -409,7 +410,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
409
410
|
- !ruby/object:Gem::Version
|
|
410
411
|
version: '0'
|
|
411
412
|
requirements: []
|
|
412
|
-
rubygems_version: 3.0.
|
|
413
|
+
rubygems_version: 3.0.2
|
|
413
414
|
signing_key:
|
|
414
415
|
specification_version: 4
|
|
415
416
|
summary: Manage DNS using git
|