record_store 5.10.0 → 5.11.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 +1 -1
- data/CHANGELOG.md +3 -0
- data/lib/record_store.rb +1 -0
- data/lib/record_store/provider/dnsimple.rb +5 -1
- data/lib/record_store/provider/ns1.rb +6 -0
- data/lib/record_store/record/ptr.rb +42 -0
- data/lib/record_store/version.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: f7a361748d4f6dd8179730ba18eadc60890c4317df58730ffd23dbb15bef6230
|
4
|
+
data.tar.gz: b4a3c7ffaeceedde2621a580cd52534fbba8cd4b4052a0f8561008f8718e6d64
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95c9e88b0721f53f0212e5b97c852523a0864a6a191045a45083541a4ff3f3d25c5a179814519c651bcba4b4b857a4ab9b34e435ecffadb4f727af9c2f115c32
|
7
|
+
data.tar.gz: 6f418902506b12e6a5e58640ddc3efc21a2c790a2d0a315a97b284fa5ae2443bb9d76a6f623d641eae1b24eec2bd6971c3dafb0be5da6454b01a43faef50439c
|
data/CHANGELOG.md
CHANGED
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/ptr'
|
22
23
|
require 'record_store/record/sshfp'
|
23
24
|
require 'record_store/record/txt'
|
24
25
|
require 'record_store/record/spf'
|
@@ -4,7 +4,7 @@ module RecordStore
|
|
4
4
|
class Provider::DNSimple < Provider
|
5
5
|
class << self
|
6
6
|
def record_types
|
7
|
-
super | Set.new(
|
7
|
+
super | Set.new(%w(PTR SSHFP))
|
8
8
|
end
|
9
9
|
|
10
10
|
def supports_alias?
|
@@ -99,6 +99,8 @@ module RecordStore
|
|
99
99
|
record.merge!(preference: api_record.priority, exchange: api_record.content)
|
100
100
|
when 'NS'
|
101
101
|
record.merge!(nsdname: api_record.content)
|
102
|
+
when 'PTR'
|
103
|
+
record.merge!(ptrdname: api_record.content)
|
102
104
|
when 'SSHFP'
|
103
105
|
algorithm, fptype, fingerprint = api_record.content.split(' ')
|
104
106
|
record.merge!(
|
@@ -143,6 +145,8 @@ module RecordStore
|
|
143
145
|
record_hash[:content] = record.exchange.chomp('.')
|
144
146
|
when 'NS'
|
145
147
|
record_hash[:content] = record.nsdname.chomp('.')
|
148
|
+
when 'PTR'
|
149
|
+
record_hash[:content] = record.ptrdname.chomp('.')
|
146
150
|
when 'SSHFP'
|
147
151
|
record_hash[:content] = record.rdata_txt
|
148
152
|
when 'SPF', 'TXT'
|
@@ -41,6 +41,10 @@ module RecordStore
|
|
41
41
|
end
|
42
42
|
|
43
43
|
class << self
|
44
|
+
def record_types
|
45
|
+
super | Set.new(%w(PTR))
|
46
|
+
end
|
47
|
+
|
44
48
|
def client
|
45
49
|
Provider::NS1::Client.new(api_key: secrets['api_key'])
|
46
50
|
end
|
@@ -229,6 +233,8 @@ module RecordStore
|
|
229
233
|
)
|
230
234
|
when 'NS'
|
231
235
|
record.merge!(nsdname: answer.rrdata_string)
|
236
|
+
when 'PTR'
|
237
|
+
record.merge!(ptrdname: answer.rrdata_string)
|
232
238
|
when 'SPF', 'TXT'
|
233
239
|
record.merge!(txtdata: answer.rrdata_string.gsub(';', '\;'))
|
234
240
|
when 'SRV'
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module RecordStore
|
2
|
+
class Record::PTR < Record
|
3
|
+
attr_accessor :ptrdname
|
4
|
+
|
5
|
+
OCTET_LABEL_SEQUENCE_REGEX = /\A(?:([0-9]|[1-9][0-9]|[1-9][0-9][0-9])\.){1,4}/
|
6
|
+
IN_ADDR_ARPA_SUFFIX_REGEX = /in-addr\.arpa\.\z/
|
7
|
+
FQDN_FORMAT_REGEX = Regexp.new(OCTET_LABEL_SEQUENCE_REGEX.source + IN_ADDR_ARPA_SUFFIX_REGEX.source)
|
8
|
+
|
9
|
+
validates_format_of :fqdn, with: FQDN_FORMAT_REGEX
|
10
|
+
|
11
|
+
validate :validate_fqdn_octets_in_range
|
12
|
+
validate :validate_fqdn_is_in_addr_arpa_subzone
|
13
|
+
|
14
|
+
def initialize(record)
|
15
|
+
super
|
16
|
+
|
17
|
+
@ptrdname = Record.ensure_ends_with_dot(record.fetch(:ptrdname))
|
18
|
+
end
|
19
|
+
|
20
|
+
def rdata
|
21
|
+
{ ptrdname: ptrdname }
|
22
|
+
end
|
23
|
+
|
24
|
+
def rdata_txt
|
25
|
+
ptrdname.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
def validate_fqdn_octets_in_range
|
29
|
+
OCTET_LABEL_SEQUENCE_REGEX.match(fqdn) do |m|
|
30
|
+
unless m.captures.all? { |o| o.to_d.between?(0, 255) }
|
31
|
+
errors.add(:fqdn, 'octet labels must be within the range 0-255')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def validate_fqdn_is_in_addr_arpa_subzone
|
37
|
+
unless IN_ADDR_ARPA_SUFFIX_REGEX.match?(fqdn)
|
38
|
+
errors.add(:fqdn, 'PTR records may only exist in the in-addr.arpa zone')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/record_store/version.rb
CHANGED
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.11.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-04-
|
12
|
+
date: 2020-04-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -369,6 +369,7 @@ files:
|
|
369
369
|
- lib/record_store/record/cname.rb
|
370
370
|
- lib/record_store/record/mx.rb
|
371
371
|
- lib/record_store/record/ns.rb
|
372
|
+
- lib/record_store/record/ptr.rb
|
372
373
|
- lib/record_store/record/spf.rb
|
373
374
|
- lib/record_store/record/srv.rb
|
374
375
|
- lib/record_store/record/sshfp.rb
|
@@ -411,7 +412,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
411
412
|
- !ruby/object:Gem::Version
|
412
413
|
version: '0'
|
413
414
|
requirements: []
|
414
|
-
rubygems_version: 3.0.
|
415
|
+
rubygems_version: 3.0.2
|
415
416
|
signing_key:
|
416
417
|
specification_version: 4
|
417
418
|
summary: Manage DNS using git
|