inwxupdate 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/inwxupdate +1 -26
- data/lib/inwx.rb +3 -1
- data/lib/inwxupdate.rb +76 -10
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01e732ecc8b4eb0888b1b0c12a5961c141f55819
|
4
|
+
data.tar.gz: 2fdcfc0a819ff787be13a67348874b38651f7a39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94821898e8e59d13f57f92eeaae5e78e7bfea95c38ce97b6dc317bdf6835d8d7308c1c388f1388194dfca85278c75536cd406258606fe6249a467cb1062beae6
|
7
|
+
data.tar.gz: 59a006f5174f0037691b162ddbef67f7e43feef574bcccc74fa9c9136843e347e099b5b55052a5c7f75e92351017d4a9622252374e94586570b89fbee31d2dff
|
data/bin/inwxupdate
CHANGED
@@ -2,29 +2,4 @@
|
|
2
2
|
|
3
3
|
require 'inwxupdate'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
Account.login(user: CONFIG[:inwx_user], pass: CONFIG[:inwx_pass], lang: 'en')
|
8
|
-
|
9
|
-
JOBS = CONFIG[:jobs]
|
10
|
-
JOBS.each do |job|
|
11
|
-
records_to_update = job[:records]
|
12
|
-
|
13
|
-
records_to_update.each do |record_to_update|
|
14
|
-
domains = Nameserver.list['domains']
|
15
|
-
domain = domains.find do |entry|
|
16
|
-
record_to_update[:name].end_with?(entry['domain'])
|
17
|
-
end
|
18
|
-
|
19
|
-
records = Nameserver.info(roId: domain['roId'])['record']
|
20
|
-
matching_record = records.find do |record|
|
21
|
-
record['name'] == record_to_update[:name] && record['type'] == record_to_update[:type]
|
22
|
-
end
|
23
|
-
|
24
|
-
next unless matching_record
|
25
|
-
|
26
|
-
detector = Detector.setup(job[:detector])
|
27
|
-
ip = detector.detect
|
28
|
-
Nameserver.updateRecord(id: matching_record['id'], content: ip)
|
29
|
-
end
|
30
|
-
end
|
5
|
+
Inwxupdate.new.run
|
data/lib/inwx.rb
CHANGED
@@ -10,7 +10,9 @@ class INWX
|
|
10
10
|
|
11
11
|
def initialize
|
12
12
|
# Create a new client instance
|
13
|
-
@client = XMLRPC::Client.new(
|
13
|
+
@client = XMLRPC::Client.new(
|
14
|
+
CONFIG[:inwx_api], '/xmlrpc/', '443', nil, nil, nil, nil, true, 100
|
15
|
+
)
|
14
16
|
end
|
15
17
|
|
16
18
|
def call(object, method, params = {})
|
data/lib/inwxupdate.rb
CHANGED
@@ -1,19 +1,85 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require_relative 'inwx.rb'
|
3
4
|
require_relative 'detectors/detector.rb'
|
4
5
|
require_relative 'detectors/ifconfig.rb'
|
5
6
|
require_relative 'detectors/ipify.rb'
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
require 'simpleidn'
|
9
|
+
|
10
|
+
class Inwxupdate
|
11
|
+
def run
|
12
|
+
find_config!
|
13
|
+
|
14
|
+
login
|
15
|
+
|
16
|
+
CONFIG[:jobs].each do |job|
|
17
|
+
process_job(job)
|
18
|
+
end
|
16
19
|
end
|
17
20
|
|
18
|
-
|
21
|
+
private
|
22
|
+
|
23
|
+
def find_config!
|
24
|
+
[
|
25
|
+
'/etc/inwxupdate.config.rb',
|
26
|
+
'/usr/local/etc/inwxupdate.config.rb',
|
27
|
+
ENV['HOME'] + '/inwxupdate.config.rb',
|
28
|
+
'./inwxupdate.config.rb'
|
29
|
+
].each do |path|
|
30
|
+
return require(path) if File.exist?(path)
|
31
|
+
next
|
32
|
+
end
|
33
|
+
|
34
|
+
raise 'no config found'
|
35
|
+
end
|
36
|
+
|
37
|
+
def login
|
38
|
+
Account.login(
|
39
|
+
user: CONFIG[:inwx_user],
|
40
|
+
pass: CONFIG[:inwx_pass],
|
41
|
+
lang: 'en'
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
def process_job(job)
|
46
|
+
job[:records].each do |config_record|
|
47
|
+
matching_record = get_dns_record(config_record)
|
48
|
+
|
49
|
+
next unless matching_record
|
50
|
+
|
51
|
+
ip = Detector.setup(job[:detector]).detect
|
52
|
+
Nameserver.updateRecord(id: matching_record['id'], content: ip)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def get_dns_record(config_record)
|
57
|
+
domain = get_domain_from_name(config_record[:name])
|
58
|
+
|
59
|
+
inwx_records = Nameserver.info(roId: domain['roId'])['record']
|
60
|
+
inwx_records.find do |inwx_record|
|
61
|
+
match?(inwx_record, config_record)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def get_domain_from_name(name)
|
66
|
+
domainlist = Nameserver.list
|
67
|
+
|
68
|
+
raise 'no domainlist from inwx' unless domainlist
|
69
|
+
|
70
|
+
domainlist['domains'].find do |entry|
|
71
|
+
ace(name).end_with?(ace(entry['domain']))
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def match?(inwx_record, config_record)
|
76
|
+
return false if ace(inwx_record['name']) != ace(config_record[:name])
|
77
|
+
return false if inwx_record['type'] != config_record[:type]
|
78
|
+
|
79
|
+
true
|
80
|
+
end
|
81
|
+
|
82
|
+
def ace(string)
|
83
|
+
SimpleIDN.to_ascii(string)
|
84
|
+
end
|
19
85
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inwxupdate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steffen Schröder
|
@@ -9,7 +9,21 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2016-10-16 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: simpleidn
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.7
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.7
|
13
27
|
description: Updates your inwx-DNS records with the local IPv4/v6 address
|
14
28
|
email: steffen@schröder.xyz
|
15
29
|
executables:
|