domainshare 0.0.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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/README.md +45 -0
- data/Rakefile +1 -0
- data/disclaimer.txt +26 -0
- data/domainshare.gemspec +23 -0
- data/lib/domainshare.rb +10 -0
- data/lib/domainshare/apifunc.rb +41 -0
- data/lib/domainshare/client.rb +106 -0
- data/lib/domainshare/version.rb +3 -0
- metadata +82 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: b1e0b76f27282acdaf9af3b0af603cd48fac9e23
|
|
4
|
+
data.tar.gz: 5dffdedc88f2f0a7a7b62c72380803ff90db4e85
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 854cc9f0156d792c615279abf24431b905fae2e123590320d8accf7764b9398b2f0289c6d531265bd68006b037d17d6f26da6ab18b79abbf16c15e3a2294a47c
|
|
7
|
+
data.tar.gz: b45a7831d038bb2589d6194b925ae3c87e77b21280c00dc4f1922613d1fa9e8530029fff9a65d9606618b29ae0944be2b9d65ee4ba2ad1dcaf4d068f32ccc769
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Domainshare
|
|
2
|
+
|
|
3
|
+
Gem for .tk DomainShare API. Basically the (pretty messy) domainshare lib code.
|
|
4
|
+
Help me refactoring if you like ;-)
|
|
5
|
+
|
|
6
|
+
You can find the original code at http://www.nic.tk/en/domainsharelibs.html
|
|
7
|
+
|
|
8
|
+
## Installation
|
|
9
|
+
|
|
10
|
+
Add this line to your application's Gemfile:
|
|
11
|
+
|
|
12
|
+
gem 'domainshare'
|
|
13
|
+
|
|
14
|
+
And then execute:
|
|
15
|
+
|
|
16
|
+
$ bundle
|
|
17
|
+
|
|
18
|
+
Or install it yourself as:
|
|
19
|
+
|
|
20
|
+
$ gem install domainshare
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
Test connection
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
conn = DSCLIENT::API.new(username, password)
|
|
28
|
+
puts conn.ping()
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Register a domain:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
puts conn.register({"domainname" => "sld",
|
|
35
|
+
"enduseremail" => "user-email@example.com",
|
|
36
|
+
"nameserver" => ["ns1.example.com", "ns2.example.com"] })
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Contributing
|
|
40
|
+
|
|
41
|
+
1. Fork it
|
|
42
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
43
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
44
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
|
45
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "bundler/gem_tasks"
|
data/disclaimer.txt
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
******************************************
|
|
2
|
+
|
|
3
|
+
DISCLAIMER
|
|
4
|
+
|
|
5
|
+
******************************************
|
|
6
|
+
|
|
7
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
|
|
8
|
+
HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
|
9
|
+
EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
|
|
10
|
+
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
11
|
+
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
12
|
+
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
13
|
+
THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
14
|
+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
15
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
16
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
|
17
|
+
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
18
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
19
|
+
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
20
|
+
WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
|
21
|
+
TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
22
|
+
ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
23
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
|
24
|
+
OF SUCH DAMAGE.
|
|
25
|
+
|
|
26
|
+
(C) 2010 Dot TK Limited
|
data/domainshare.gemspec
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'domainshare/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "domainshare"
|
|
8
|
+
spec.version = Domainshare::VERSION
|
|
9
|
+
spec.authors = ["Phillipp Röll"]
|
|
10
|
+
spec.email = ["phillipp.roell@trafficplex.de"]
|
|
11
|
+
spec.description = %q{.tk Domainshare API as rubygem}
|
|
12
|
+
spec.summary = %q{.tk Domainshare API as rubygem}
|
|
13
|
+
spec.homepage = "https://github.com/phillipp/domainshare"
|
|
14
|
+
spec.license = ""
|
|
15
|
+
|
|
16
|
+
spec.files = `git ls-files`.split($/)
|
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
|
+
spec.require_paths = ["lib"]
|
|
20
|
+
|
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
|
22
|
+
spec.add_development_dependency "rake"
|
|
23
|
+
end
|
data/lib/domainshare.rb
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Domainshare
|
|
2
|
+
class APIFUNC
|
|
3
|
+
def initialize( name , args = [], opt_args = [])
|
|
4
|
+
@name = name
|
|
5
|
+
@args = args
|
|
6
|
+
@opt_args = opt_args
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def args
|
|
10
|
+
@args
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def opt_args
|
|
14
|
+
@opt_args
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def has_arg(value)
|
|
18
|
+
@args.include(value)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def encode_kvpair(req, k, vs)
|
|
22
|
+
Array(vs).map {|v| "#{URI::encode(k.to_s)}=#{URI::encode(v.to_s)}" }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def set_form_data(req, params, sep = '&')
|
|
26
|
+
req.body = params.map {|k, v| encode_kvpair(req, k, v) }.flatten.join(sep)
|
|
27
|
+
req.content_type = 'application/x-www-form-urlencoded'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def call( params = {}, type = "xml" )
|
|
31
|
+
http = Net::HTTP.new("api.domainshare.tk", 443)
|
|
32
|
+
http.use_ssl = true
|
|
33
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl?
|
|
34
|
+
|
|
35
|
+
req = Net::HTTP::Post.new("/" + @name + "." + type)
|
|
36
|
+
set_form_data( req, params, ';')
|
|
37
|
+
resp = http.start {|http| http.request(req) }
|
|
38
|
+
resp.body
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
module Domainshare
|
|
2
|
+
class Client
|
|
3
|
+
@@WARN = false
|
|
4
|
+
def initialize(email, password)
|
|
5
|
+
if (email.empty? or password.empty?) and @@WARN
|
|
6
|
+
puts "Either email or password is empty. Most of the functions will not work, unless those are added to each funtion calls"
|
|
7
|
+
end
|
|
8
|
+
@email = email
|
|
9
|
+
@password = password
|
|
10
|
+
@function_list = { "ping" => {},
|
|
11
|
+
"availability_check" => {:args => ["email", "password", "domainname"] },
|
|
12
|
+
"register" => {:args => ["email", "password", "domainname", "enduseremail"], :opt_args => [ "monthsofregistration", "nameserver", "forwardurl" ] },
|
|
13
|
+
"renew" => { :args => ["email", "password", "domainname"], :opt_args => ["monthsofregistration"] },
|
|
14
|
+
"host_registration" => { :args => ["email", "password", "hostname", "ipaddress"] },
|
|
15
|
+
"host_removal" => { :args => ["email", "password", "hostname"] },
|
|
16
|
+
"host_list" => { :args => ["email", "password", "domainname"] },
|
|
17
|
+
"modify" => { :args => ["email", "password", "domainname"], :opt_args => ["nameserver", "forwardurl"] },
|
|
18
|
+
"resend_email" => { :args => ["email", "password", "domainname"], :opt_args => ["enduseremail"] },
|
|
19
|
+
"domain_deactivate" => { :args => ["email", "password", "domainname", "reason"] },
|
|
20
|
+
"domain_reactivate" => { :args => ["email", "password", "domainname"] },
|
|
21
|
+
"update_parking" => { :args => ["email", "password", "domainname"], :opt_args => ["category", "keyword"]} }
|
|
22
|
+
# Extend function_list to add new API functions.
|
|
23
|
+
# :args -> Mandatory arguments,
|
|
24
|
+
# :opt_args -> Optional arguments.
|
|
25
|
+
|
|
26
|
+
init_functions()
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def init_functions
|
|
30
|
+
@functions = {}
|
|
31
|
+
@function_list.each do |name, value|
|
|
32
|
+
@functions[name] = APIFUNC.new( name, args = value[:args] ? value[:args] : {}, opt_args = value[:opt_args] ? value[:opt_args] : {} )
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def list_functions(detail = true)
|
|
37
|
+
# Lists all the supported functions along with mandatory and optional
|
|
38
|
+
# arguments, where relevant.
|
|
39
|
+
i=0
|
|
40
|
+
puts "Available API functions are"
|
|
41
|
+
@functions.each do |key, value|
|
|
42
|
+
i += 1
|
|
43
|
+
print i, ". ",key, "\n"
|
|
44
|
+
print "\tArguments:- ", value.args, "\n" if not value.args.empty?
|
|
45
|
+
print "\tOptional Arguments:- ", value.opt_args, "\n" if not value.opt_args.empty? and detail
|
|
46
|
+
puts
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def call_function(name, type, params = {})
|
|
51
|
+
# Searches in function lists for function 'name' and calls the
|
|
52
|
+
# API function with params.
|
|
53
|
+
|
|
54
|
+
params = {} if not params.is_a? Hash
|
|
55
|
+
params["email"] = @email if not params.has_key?("email")
|
|
56
|
+
params["password"] = @password if not params.has_key?("password")
|
|
57
|
+
|
|
58
|
+
return error_msg(type, ["Function not defined ", name] ) if not @functions.has_key?(name)
|
|
59
|
+
|
|
60
|
+
function = @functions[name]
|
|
61
|
+
|
|
62
|
+
function.args.each do |value|
|
|
63
|
+
if not params.has_key?(value)
|
|
64
|
+
return error_msg(type, [value, " not defined in input; Mandatory parameters are ", function.args.join(",")] )
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
function.call(params, type=type)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def error_msg(type, str)
|
|
71
|
+
# Generates and returns the client side error messages in
|
|
72
|
+
# user-specified format
|
|
73
|
+
if type == 'json'
|
|
74
|
+
return '{"status":"NOT OK","reason":"'.concat(str.join()).concat('"}')
|
|
75
|
+
else
|
|
76
|
+
xml = <<EOS
|
|
77
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
78
|
+
<dottk>
|
|
79
|
+
<status>NOT OK</status>
|
|
80
|
+
<reason></reason>
|
|
81
|
+
</dottk>
|
|
82
|
+
EOS
|
|
83
|
+
doc = REXML::Document.new xml
|
|
84
|
+
doc.elements["dottk"].elements["reason"].text = str.join()
|
|
85
|
+
return doc.to_s
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def method_missing(*arg)
|
|
90
|
+
# Parses the API function calls (ping, ping_xml, ping_json etc.)
|
|
91
|
+
# into name and type (ping, xml), and calls call_function.
|
|
92
|
+
|
|
93
|
+
name = arg[0].id2name
|
|
94
|
+
type = "xml"
|
|
95
|
+
|
|
96
|
+
if name =~ /_xml$/
|
|
97
|
+
name.slice!(/\_xml$/)
|
|
98
|
+
elsif name =~ /_json$/
|
|
99
|
+
name.slice!(/_json$/)
|
|
100
|
+
type = "json"
|
|
101
|
+
end
|
|
102
|
+
call_function(name, type, *arg[1,arg.size])
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: domainshare
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Phillipp Röll
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2013-11-10 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: bundler
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ~>
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '1.3'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ~>
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '1.3'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rake
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - '>='
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - '>='
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
41
|
+
description: .tk Domainshare API as rubygem
|
|
42
|
+
email:
|
|
43
|
+
- phillipp.roell@trafficplex.de
|
|
44
|
+
executables: []
|
|
45
|
+
extensions: []
|
|
46
|
+
extra_rdoc_files: []
|
|
47
|
+
files:
|
|
48
|
+
- .gitignore
|
|
49
|
+
- Gemfile
|
|
50
|
+
- README.md
|
|
51
|
+
- Rakefile
|
|
52
|
+
- disclaimer.txt
|
|
53
|
+
- domainshare.gemspec
|
|
54
|
+
- lib/domainshare.rb
|
|
55
|
+
- lib/domainshare/apifunc.rb
|
|
56
|
+
- lib/domainshare/client.rb
|
|
57
|
+
- lib/domainshare/version.rb
|
|
58
|
+
homepage: https://github.com/phillipp/domainshare
|
|
59
|
+
licenses:
|
|
60
|
+
- ''
|
|
61
|
+
metadata: {}
|
|
62
|
+
post_install_message:
|
|
63
|
+
rdoc_options: []
|
|
64
|
+
require_paths:
|
|
65
|
+
- lib
|
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
67
|
+
requirements:
|
|
68
|
+
- - '>='
|
|
69
|
+
- !ruby/object:Gem::Version
|
|
70
|
+
version: '0'
|
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - '>='
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
requirements: []
|
|
77
|
+
rubyforge_project:
|
|
78
|
+
rubygems_version: 2.1.10
|
|
79
|
+
signing_key:
|
|
80
|
+
specification_version: 4
|
|
81
|
+
summary: .tk Domainshare API as rubygem
|
|
82
|
+
test_files: []
|