inwxupdate 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/inwxupdate +30 -0
- data/lib/detectors/detector.rb +11 -0
- data/lib/detectors/ifconfig.rb +17 -0
- data/lib/detectors/ipify.rb +19 -0
- data/lib/inwx.rb +45 -0
- data/lib/inwxupdate.rb +19 -0
- metadata +50 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5c06f99f473dbae0b1bc04925bc1517b199f674a
|
4
|
+
data.tar.gz: 421da2c7128419f5bb3bb46b4a0c9312679dd373
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3379f90c591b310755134b9f6c84dce0cc53d6edd020e4feded40a33c75faa2c88e3e1b87e1a358cd3a38cd65360fe471c28898dc94a3f562eea2ec6230d4fcc
|
7
|
+
data.tar.gz: fbe9b6a2004703345fb3eceee7c0aa4d7a44f80f034162044da7f95760d601348f4228ffd0c5236d998e2cd78fdfd5b4f06100ff11e448ac581b3928ef8f90be
|
data/bin/inwxupdate
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'inwxupdate'
|
4
|
+
|
5
|
+
find_config!
|
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
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Detector
|
2
|
+
def self.setup(paramters)
|
3
|
+
if paramters[:type] == 'ifconfig' && paramters[:version] == 6
|
4
|
+
return Ifconfig.new(paramters[:network_interface], paramters[:version])
|
5
|
+
end
|
6
|
+
|
7
|
+
if paramters[:type] == 'ipify'
|
8
|
+
return Ipify.new(paramters[:network_interface], paramters[:version])
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Detects your current IP via `ifconfig`
|
4
|
+
class Ifconfig
|
5
|
+
def initialize(network_interface, _version)
|
6
|
+
@network_interface = network_interface
|
7
|
+
end
|
8
|
+
|
9
|
+
def detect
|
10
|
+
raw = `ifconfig #{@network_interface} inet6 | grep inet6 | grep -v fe80 | grep -v deprecated`
|
11
|
+
ip = raw.lstrip.split(' ')[1]
|
12
|
+
|
13
|
+
raise 'no ip detected' unless ip
|
14
|
+
|
15
|
+
ip
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Detects your current IP via `ifconfig`
|
4
|
+
class Ipify
|
5
|
+
def initialize(network_interface, version)
|
6
|
+
@network_interface = network_interface
|
7
|
+
@version = version == 6 ? 6 : 4
|
8
|
+
|
9
|
+
raise 'Ipify supports only IPv4 yet' if version == 6
|
10
|
+
end
|
11
|
+
|
12
|
+
def detect
|
13
|
+
ip = `curl -#{@version} --interface #{@network_interface} 'https://api.ipify.org?format=text' -s`
|
14
|
+
|
15
|
+
raise 'no ip detected' unless ip
|
16
|
+
|
17
|
+
ip
|
18
|
+
end
|
19
|
+
end
|
data/lib/inwx.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'singleton'
|
4
|
+
require 'xmlrpc/client'
|
5
|
+
require 'yaml'
|
6
|
+
|
7
|
+
# Wrapper for the INWX XMLRPC Client
|
8
|
+
class INWX
|
9
|
+
include Singleton
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
# Create a new client instance
|
13
|
+
@client = XMLRPC::Client.new(CONFIG[:inwx_api], '/xmlrpc/', '443', nil, nil, nil, nil, true, 100)
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(object, method, params = {})
|
17
|
+
@client.call("#{object}.#{method}", params)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Implements the convienience
|
22
|
+
class APIObject
|
23
|
+
def self.method_missing(*args)
|
24
|
+
args = [name.downcase] + args
|
25
|
+
|
26
|
+
result = INWX.instance.call(*args)
|
27
|
+
|
28
|
+
puts YAML.dump(result) if CONFIG[:debug]
|
29
|
+
|
30
|
+
result['resData']
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class Account < APIObject; end
|
35
|
+
class Accounting < APIObject; end
|
36
|
+
class Application < APIObject; end
|
37
|
+
class Contact < APIObject; end
|
38
|
+
class Domain < APIObject; end
|
39
|
+
class Host < APIObject; end
|
40
|
+
class Hosting < APIObject; end
|
41
|
+
class Message < APIObject; end
|
42
|
+
class Nameserver < APIObject; end
|
43
|
+
class NameserverSet < APIObject; end
|
44
|
+
class Pdf < APIObject; end
|
45
|
+
class Tag < APIObject; end
|
data/lib/inwxupdate.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative 'inwx.rb'
|
3
|
+
require_relative 'detectors/detector.rb'
|
4
|
+
require_relative 'detectors/ifconfig.rb'
|
5
|
+
require_relative 'detectors/ipify.rb'
|
6
|
+
|
7
|
+
def find_config!
|
8
|
+
[
|
9
|
+
'/etc/inwxupdate.config.rb',
|
10
|
+
'/usr/local/etc/inwxupdate.config.rb',
|
11
|
+
'~/inwxupdate.config.rb',
|
12
|
+
'./inwxupdate.config.rb'
|
13
|
+
].each do |path|
|
14
|
+
return require(path) if File.exist?(path)
|
15
|
+
next
|
16
|
+
end
|
17
|
+
|
18
|
+
raise 'no config found'
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: inwxupdate
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Steffen Schröder
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-16 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Updates your inwx-DNS records with the local IPv4/v6 address
|
14
|
+
email: steffen@schröder.xyz
|
15
|
+
executables:
|
16
|
+
- inwxupdate
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- bin/inwxupdate
|
21
|
+
- lib/detectors/detector.rb
|
22
|
+
- lib/detectors/ifconfig.rb
|
23
|
+
- lib/detectors/ipify.rb
|
24
|
+
- lib/inwx.rb
|
25
|
+
- lib/inwxupdate.rb
|
26
|
+
homepage: https://github.com/ChaosSteffen/inwxupdate
|
27
|
+
licenses:
|
28
|
+
- BSD
|
29
|
+
metadata: {}
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options: []
|
32
|
+
require_paths:
|
33
|
+
- lib
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
requirements: []
|
45
|
+
rubyforge_project:
|
46
|
+
rubygems_version: 2.4.5.1
|
47
|
+
signing_key:
|
48
|
+
specification_version: 4
|
49
|
+
summary: inwxupdate
|
50
|
+
test_files: []
|