inwx-domrobot 3.1

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/inwx-domrobot.rb +135 -0
  3. metadata +104 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 646bcc694e29190bc33199e879ba6758682226c257f978761e54b18c7854f164
4
+ data.tar.gz: 39b3db19453c60afad9d0c85d471bd16e51ef59cff6700d9a0b449b71b0fb4f7
5
+ SHA512:
6
+ metadata.gz: 69e608e764a8acb3dd44667a720e7146090faf8c05030a418696a02ef1e5cffbb571dcd9123cad1173cc860011e3f8b82a49bf0fc985e12ed0a8f8eab2678f8c
7
+ data.tar.gz: 748460b3b4b55333d4d009e80dd5bb0427a6dd02e1d4a3fa602a5b9982f7002b42bda89d4fc0d9030f1a04fec2de6b51eb516d6883ca95e77d6af1c975837270
@@ -0,0 +1,135 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'xmlrpc/client'
4
+ require 'json'
5
+ require 'net/http'
6
+ require 'net/https'
7
+ require 'rotp'
8
+
9
+ module INWX
10
+ class Domrobot
11
+ attr_accessor :client, :cookie, :language, :api_type, :url, :debug
12
+ URL_LIVE = 'api.domrobot.com'
13
+ URL_OTE = 'api.ote.domrobot.com'
14
+ TYPE_JSON = '/jsonrpc/'
15
+ TYPE_XML = '/xmlrpc/'
16
+ private_constant :TYPE_JSON, :TYPE_XML, :URL_OTE, :URL_LIVE
17
+
18
+ def initialize
19
+ self.cookie = ''
20
+ self.debug = false
21
+ self.url = URL_OTE
22
+ self.api_type = TYPE_JSON
23
+ end
24
+
25
+ def set_language(language = 'en')
26
+ self.language = language
27
+ self
28
+ end
29
+
30
+ def use_ote
31
+ self.url = URL_OTE
32
+ self
33
+ end
34
+
35
+ def use_live
36
+ self.url = URL_LIVE
37
+ self
38
+ end
39
+
40
+ def use_json
41
+ self.api_type = TYPE_JSON
42
+ self
43
+ end
44
+
45
+ def use_xml
46
+ self.api_type = TYPE_XML
47
+ self
48
+ end
49
+
50
+ def set_debug(value)
51
+ self.debug = value
52
+ self
53
+ end
54
+
55
+ def create_client
56
+ if api_type == TYPE_XML
57
+ self.client = XMLRPC::Client.new(url, api_type, '443', nil, nil, nil, nil, true, 100)
58
+ else
59
+ self.client = Net::HTTP.new(url, 443)
60
+ client.use_ssl = true
61
+ end
62
+ end
63
+
64
+ def login(username = false, password = false, shared_secret = nil)
65
+ create_client
66
+
67
+ params = { user: username, pass: password, lang: language }
68
+ ret = call('account', 'login', params)
69
+
70
+ unless shared_secret.nil?
71
+ secret_code = get_secret_code(shared_secret)
72
+ ret = call('account', 'unlock', tan: secret_code)
73
+ end
74
+
75
+ ret
76
+ end
77
+
78
+ def logout
79
+ call('account', 'logout')
80
+ end
81
+
82
+ def call(object, method, params = {})
83
+ if api_type == TYPE_XML
84
+ call_xml(object, method, params)
85
+ else
86
+ call_json(object, method, params)
87
+ end
88
+ end
89
+
90
+ def call_xml(object, method, params = {})
91
+ client.cookie = cookie
92
+ res = client.call(object + '.' + method, params)
93
+
94
+ save_cookie(client.cookie)
95
+ debug_sent = { method: object + '.' + method, params: params }
96
+ output_debug(debug_sent.to_json, res.to_json)
97
+
98
+ res
99
+ end
100
+
101
+ def call_json(object, method, params = {})
102
+ req = Net::HTTP::Post.new(api_type)
103
+
104
+ json_params = { method: object + '.' + method, params: params }
105
+
106
+ req.body = json_params.to_json
107
+ req['Cookie'] = cookie
108
+ res = client.request(req)
109
+
110
+ save_cookie(res.response['set-cookie'])
111
+ output_debug(req.body, res.body)
112
+
113
+ JSON.parse(res.body)
114
+ end
115
+
116
+ def save_cookie(cookie)
117
+ self.cookie = cookie unless cookie.nil?
118
+ end
119
+
120
+ def output_debug(sent, received)
121
+ if debug
122
+ puts 'Sent:'
123
+ puts JSON.pretty_generate(JSON.parse(sent))
124
+ puts 'Received:'
125
+ puts JSON.pretty_generate(JSON.parse(received))
126
+ puts '-------------------------'
127
+ end
128
+ end
129
+
130
+ def get_secret_code(shared_secret)
131
+ totp = ROTP::TOTP.new(shared_secret)
132
+ totp.now
133
+ end
134
+ end
135
+ end
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: inwx-domrobot
3
+ version: !ruby/object:Gem::Version
4
+ version: '3.1'
5
+ platform: ruby
6
+ authors:
7
+ - INWX
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-09-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.1.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.1.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: xmlrpc
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.3'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.3.0
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.3'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.3.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: rotp
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '5.1'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 5.1.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '5.1'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 5.1.0
73
+ description: Ruby Client to easily use the Domrobot API of INWX
74
+ email: support@inwx.de
75
+ executables: []
76
+ extensions: []
77
+ extra_rdoc_files: []
78
+ files:
79
+ - lib/inwx-domrobot.rb
80
+ homepage: https://rubygems.org/gems/inwx-domrobot
81
+ licenses:
82
+ - MIT
83
+ metadata: {}
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubyforge_project:
100
+ rubygems_version: 2.7.6
101
+ signing_key:
102
+ specification_version: 4
103
+ summary: INWX Domrobot
104
+ test_files: []