inwx-domrobot 3.1

Sign up to get free protection for your applications and to get access to all the features.
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: []