ditchdaddy 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +3 -1
- data/README.rdoc +36 -9
- data/Rakefile +1 -1
- data/bin/{ditchdaddy → ditchdaddy-dnsimple} +5 -3
- data/bin/ditchdaddy-gandi +181 -0
- data/bin/ditchdaddy-namecheap +146 -0
- data/lib/ditchdaddy.rb +1 -1
- metadata +34 -29
data/Manifest.txt
CHANGED
data/README.rdoc
CHANGED
@@ -4,25 +4,52 @@
|
|
4
4
|
|
5
5
|
== DESCRIPTION:
|
6
6
|
|
7
|
-
Bye GoDaddy, hello DNSimple. (Will accept patches for other registrars! Just make another binscript
|
7
|
+
Bye GoDaddy, hello DNSimple/Namecheap/Gandi. (Will accept patches for other registrars! Just make another binscript)
|
8
8
|
|
9
|
-
|
9
|
+
=== DNSimple
|
10
10
|
|
11
|
-
|
12
|
-
2) The script will then make sure that you have a contact registered that these domains can be registered to (if not, it helps you create one).
|
13
|
-
3) Next, you'll need to unlock your domains and get a data export from GoDaddy with the authorization codes (you can follow the instructions here: http://is.gd/2vI0aV). Unfortunately, GoDaddy does not offer an API for that.
|
14
|
-
4) Then the transfers cometh. You can either transfer the whole export in one shot or have it ask you about each one. It uses the DNSimple API to create the transfer orders.
|
15
|
-
5) Lastly, it praises you gloriously for your hard work and shows you how to speed the transfers up.
|
11
|
+
The +ditchdaddy-dnsimple+ script will walk you through the steps to move your domains to DNSimple.
|
16
12
|
|
17
|
-
|
13
|
+
1. It will ask for your DNSimple details to log you in.
|
14
|
+
2. The script will then make sure that you have a contact registered that these domains can be registered to (if not, it helps you create one).
|
15
|
+
3. Next, you'll need to unlock your domains and get a data export from GoDaddy with the authorization codes (you can follow the instructions here: http://is.gd/2vI0aV). Unfortunately, GoDaddy does not offer an API for that.
|
16
|
+
4. Then the transfers cometh. You can either transfer the whole export in one shot or have it ask you about each one. It uses the DNSimple API to create the transfer orders.
|
17
|
+
5. Lastly, it praises you gloriously for your hard work and shows you how to speed the transfers up.
|
18
|
+
|
19
|
+
=== Namecheap
|
20
|
+
|
21
|
+
The +ditchdaddy-namecheap+ script will walk you through the steps to move your domains to Namecheap.
|
22
|
+
|
23
|
+
1. It will ask for your Namecheap details (turn on API access as detailed here: http://is.gd/MpVI5T)
|
24
|
+
2. Next, you'll need to unlock your domains and get a data export from GoDaddy with the authorization codes (you can follow the instructions here: http://is.gd/2vI0aV). Unfortunately, GoDaddy does not offer an API for that.
|
25
|
+
3. Then the transfers cometh. You can either transfer the whole export in one shot or have it ask you about each one. It uses the Namecheap API to create the transfer orders.
|
26
|
+
4. Lastly, it praises you gloriously for your hard work and shows you how to speed the transfers up.
|
18
27
|
|
19
|
-
|
28
|
+
=== Gandi
|
29
|
+
|
30
|
+
The +ditchdaddy-gandi+ script will walk you through the steps to move your domains to Gandi.net.
|
31
|
+
|
32
|
+
1. It will ask for your Gandi details (your account must be a reseller account AND have API access activated; more information: http://is.gd/gQvxAP)
|
33
|
+
2. Next, you'll need to unlock your domains and get a data export from GoDaddy with the authorization codes (you can follow the instructions here: http://is.gd/2vI0aV). Unfortunately, GoDaddy does not offer an API for that.
|
34
|
+
3. You'll want to figure out your nameservers and get the list (or lists) gathered up; Gandi requires you to supply them when you transfer to them.
|
35
|
+
4. Then the transfers cometh. You can either transfer the whole export in one shot or have it ask you about each one. It uses the Gandi.net API to create the transfer orders.
|
36
|
+
5. Lastly, it praises you gloriously for your hard work and shows you how to speed the transfers up.
|
37
|
+
|
38
|
+
== SYNOPSIS:
|
20
39
|
|
40
|
+
ditchdaddy-dnsimple
|
41
|
+
# or
|
42
|
+
ditchdaddy-namecheap
|
43
|
+
# or
|
44
|
+
ditchdaddy-gandi
|
45
|
+
|
21
46
|
== REQUIREMENTS:
|
22
47
|
|
23
48
|
* rainbow
|
24
49
|
* dnsimple
|
25
50
|
* highline
|
51
|
+
* rest-client
|
52
|
+
* Ruby 1.9.3 (preferably)
|
26
53
|
|
27
54
|
== LICENSE:
|
28
55
|
|
data/Rakefile
CHANGED
@@ -10,7 +10,7 @@ $hoe = Hoe.spec 'ditchdaddy' do
|
|
10
10
|
self.developer 'Jeremy McAnally', 'jeremy@arcturo.com'
|
11
11
|
self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
|
12
12
|
self.rubyforge_name = self.name # TODO this is default value
|
13
|
-
self.extra_deps = [['dnsimple-ruby','> 0.0.0'], ['highline','> 0.0.0'], ['rainbow','> 0.0.0']]
|
13
|
+
self.extra_deps = [['dnsimple-ruby','> 0.0.0'], ['highline','> 0.0.0'], ['rainbow','> 0.0.0'], ['rest-client', '> 0.0.0']]
|
14
14
|
end
|
15
15
|
|
16
16
|
require 'newgem/tasks'
|
@@ -93,6 +93,8 @@ if DNSimple::Contact.all.empty?
|
|
93
93
|
puts "WHAT DID YOU DO?".bright.color(:red) + " Something broke.".color(:red)
|
94
94
|
puts "Maybe you put in some bad data. Let's try this again."
|
95
95
|
puts
|
96
|
+
|
97
|
+
retry
|
96
98
|
end
|
97
99
|
end
|
98
100
|
|
@@ -142,13 +144,13 @@ puts
|
|
142
144
|
puts "OK, this is getting serious now."
|
143
145
|
puts "Should I just transfer every domain I can or ask you about each one?".color(:cyan).bright
|
144
146
|
|
145
|
-
|
146
|
-
|
147
|
+
prompt = ask("Say 'ask' or 'transfer': ") {|q| q.validate = /(^ask$)|(^transfer$)/ }
|
148
|
+
prompt = (prompt == "ask")
|
147
149
|
|
148
150
|
puts
|
149
151
|
|
150
152
|
csv.each do |row|
|
151
|
-
if
|
153
|
+
if prompt
|
152
154
|
response = ask("Transfer " + row['DomainName'].bright.color(:yellow) + " to DNSimple? (yes/no)") {|q| q.validate = /(^yes$)|(^no$)/ }
|
153
155
|
if response == 'no'
|
154
156
|
puts "\tOK, cow(boy|girl). Skipping that guy..."
|
@@ -0,0 +1,181 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
|
5
|
+
require 'rainbow'
|
6
|
+
require 'highline/import'
|
7
|
+
require 'xmlrpc/client'
|
8
|
+
|
9
|
+
class Gandi
|
10
|
+
def self.base_url
|
11
|
+
"https://api.gandi.net/xmlrpc/"
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.client
|
15
|
+
@client ||= XMLRPC::Client.new2(base_url)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.handle
|
19
|
+
@handle
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.session
|
23
|
+
@session
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.login(username, password)
|
27
|
+
@session = client.call("login", username, password, false)
|
28
|
+
@handle = username
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.start_transfer(domain, auth_code, nameservers)
|
32
|
+
client.call("domain_transfer_in", session, domain, handle, handle, handle, handle, nameservers, auth_code)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
if RUBY_VERSION < "1.9"
|
37
|
+
puts
|
38
|
+
puts "--- ATTENTION ---".color(:red).bright.blink
|
39
|
+
puts "You appear to be on Ruby 1.8. Highline acts weird on 1.8 when retrying after an exception."
|
40
|
+
puts "I recommend you hop up to 1.9.2. But it's OK. Whatever. It's not like I know"
|
41
|
+
puts "anything about how I run or anything. NO NO. DONT LISTEN TO ME."
|
42
|
+
puts "--- ATTENTION ---".color(:red).bright.blink
|
43
|
+
puts
|
44
|
+
require 'fastercsv'
|
45
|
+
CSVModule = FasterCSV
|
46
|
+
else
|
47
|
+
require 'csv'
|
48
|
+
CSVModule = CSV
|
49
|
+
end
|
50
|
+
|
51
|
+
puts "Ready to ditch GoDaddy for Gandi?" + " LET'S DO THIS THING.".color(:red).bright
|
52
|
+
puts
|
53
|
+
|
54
|
+
puts "First, I need your Gandi details.".color(:magenta)
|
55
|
+
puts "Keep in mind: ".color(:yellow).bright.blink + "Your account must be a reseller account AND have API enabled."
|
56
|
+
puts "Get more information here: http://is.gd/gQvxAP".bright
|
57
|
+
puts
|
58
|
+
|
59
|
+
begin
|
60
|
+
username = ask("What's your username (Gandi handle)?".bright)
|
61
|
+
password = ask("What's your password?".bright) {|q| q.echo = "*" }
|
62
|
+
|
63
|
+
Gandi.login(username, password)
|
64
|
+
rescue
|
65
|
+
puts
|
66
|
+
puts "ZOMG WTF AUTHENTICATION FAILED!!!".color(:red).bright.blink
|
67
|
+
puts
|
68
|
+
|
69
|
+
retry
|
70
|
+
end
|
71
|
+
|
72
|
+
puts "\nOK, you're verified now.".color(:yellow) + " Magical, I know, right?\n".bright.color(:yellow)
|
73
|
+
puts
|
74
|
+
|
75
|
+
file_path = nil
|
76
|
+
begin
|
77
|
+
puts "Next, tell me where your data export from GoDaddy is at.\n(Follow instructions here: http://is.gd/2vI0aV)\n".color(:magenta)
|
78
|
+
|
79
|
+
file_path = ask("Where is the data file at?".bright)
|
80
|
+
puts File.join(Dir.pwd, file_path)
|
81
|
+
unless File.exists?(file_path)
|
82
|
+
raise "File fail."
|
83
|
+
end
|
84
|
+
rescue
|
85
|
+
puts
|
86
|
+
puts "ZOMG WTF FILE NOT FOUND!!!".color(:red).bright.blink
|
87
|
+
puts
|
88
|
+
|
89
|
+
retry
|
90
|
+
end
|
91
|
+
|
92
|
+
puts "\nFile found, now slurpinating it.".bright.color(:yellow)
|
93
|
+
|
94
|
+
csv = CSVModule.new(File.open(file_path), :headers => true, :skip_blanks => true)
|
95
|
+
|
96
|
+
puts
|
97
|
+
puts "Gandi requires that you send along nameservers with your transfer."
|
98
|
+
puts "Should I ask you for each one or just use the same set for all domains?".color(:cyan).bright
|
99
|
+
|
100
|
+
nameservers_prompt = ask("Say 'ask' or 'same': ") {|q| q.validate = /(^ask$)|(^same$)/ }
|
101
|
+
nameservers_prompt = (nameservers_prompt == "ask")
|
102
|
+
|
103
|
+
nameservers = nil
|
104
|
+
unless nameservers_prompt
|
105
|
+
puts
|
106
|
+
puts "Okie, doke. " + "What nameservers would you like to use? (Enter them as a comma separated list)".color(:magenta)
|
107
|
+
|
108
|
+
begin
|
109
|
+
nameservers = ask('Enter your nameservers: ')
|
110
|
+
nameservers = nameservers.split(",")
|
111
|
+
|
112
|
+
if (nameservers.uniq.length < nameservers.length) || (nameservers.length < 3)
|
113
|
+
puts "Nameservers must be unique and there must be at least 3.".color(:red).bright
|
114
|
+
|
115
|
+
raise
|
116
|
+
end
|
117
|
+
rescue
|
118
|
+
retry
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
puts
|
123
|
+
puts "OK, this is getting serious now."
|
124
|
+
puts "Should I just transfer every domain I can or ask you about each one?".color(:cyan).bright
|
125
|
+
|
126
|
+
prompt = ask("Say 'ask' or 'transfer': ") {|q| q.validate = /(^ask$)|(^transfer$)/ }
|
127
|
+
prompt = (prompt == "ask")
|
128
|
+
|
129
|
+
puts
|
130
|
+
|
131
|
+
csv.each do |row|
|
132
|
+
if prompt
|
133
|
+
response = ask("Transfer " + row['DomainName'].bright.color(:yellow) + " to Namecheap? (yes/no)") {|q| q.validate = /(^yes$)|(^no$)/ }
|
134
|
+
if response == 'no'
|
135
|
+
puts "\tOK, cow(boy|girl). Skipping that guy..."
|
136
|
+
puts
|
137
|
+
|
138
|
+
next
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
if nameservers_prompt
|
143
|
+
begin
|
144
|
+
nameservers = ask("Enter nameservers for " + row['DomainName'].bright.color(:yellow) + ": ")
|
145
|
+
nameservers = nameservers.split(",")
|
146
|
+
|
147
|
+
if (nameservers.uniq.length < nameservers.length) || (nameservers.length < 3)
|
148
|
+
puts "Nameservers must be unique and there must be at least 3.".color(:red).bright
|
149
|
+
|
150
|
+
raise
|
151
|
+
end
|
152
|
+
rescue
|
153
|
+
retry
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
puts "Transferring #{row['DomainName'].bright.color(:yellow)}..."
|
158
|
+
if row['Locked'] != 'Unlocked'
|
159
|
+
puts "\t!".color(:red).bright + " Oops. You didn't unlock that domain according to this export. Skipping..."
|
160
|
+
next
|
161
|
+
end
|
162
|
+
|
163
|
+
begin
|
164
|
+
Gandi.start_transfer(row['DomainName'], row['AuthorizationCode'], nameservers)
|
165
|
+
puts "\t*".color(:cyan).bright + " That worked!"
|
166
|
+
rescue StandardError
|
167
|
+
puts "\t! Well, poop. There seems to be an error.".color(:red)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
puts
|
172
|
+
puts "Well, we're all done. Our time together was magical.".color(:cyan)
|
173
|
+
puts "I hope it was as good for you as it was for me. ktnxbai"
|
174
|
+
puts "Visit me at http://arcturo.com sometime."
|
175
|
+
puts
|
176
|
+
puts "--- IMPORTANT ---".color(:magenta).bright.blink
|
177
|
+
puts "To speed up the process, follow the instructions here for"
|
178
|
+
puts "explicitly approving the transfers: http://is.gd/ZRBLUP"
|
179
|
+
puts "Takes much less time than the 5 days it normally takes."
|
180
|
+
puts "--- IMPORTANT ---".color(:magenta).bright.blink
|
181
|
+
puts
|
@@ -0,0 +1,146 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
|
5
|
+
require 'rainbow'
|
6
|
+
require 'rest-client'
|
7
|
+
require 'rexml/document'
|
8
|
+
require 'highline/import'
|
9
|
+
|
10
|
+
class Namecheap
|
11
|
+
def self.ip
|
12
|
+
@ip ||= RestClient.get("http://whatismyip.org/")
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.get_domains(username, api_key)
|
16
|
+
url = "https://api.namecheap.com/xml.response?ApiUser=#{username}&ApiKey=#{api_key}&UserName=#{username}&Command=namecheap.domains.getList&ClientIp=#{ip}"
|
17
|
+
check_response(RestClient.get(url))
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.initiate_transfer(domain, authorization_code, username, api_key)
|
21
|
+
url = "https://api.namecheap.com/xml.response?ApiUser=#{username}&ApiKey=#{api_key}&UserName=#{username}&Command=namecheap.domains.transfer.create&ClientIp=#{ip}&DomainName=#{domain}&Years=1&EPPCode=#{authorization_code}"
|
22
|
+
check_response(RestClient.get(url))
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.check_response(response)
|
26
|
+
puts response
|
27
|
+
unless REXML::Document.new(response).root.attributes['Status'] == 'OK'
|
28
|
+
raise "Error from Namecheap!"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# We can only transfer these TLD's via Namecheap's API
|
34
|
+
GOOD_TLDS = [".com", ".net", ".org", ".info", ".biz", ".us",
|
35
|
+
".ca", ".cc", ".cn", ".com.cn," ".net.cn",
|
36
|
+
".org.cn", ".co.uk", ".org.uk", ".me.uk",
|
37
|
+
".de", ".co", ".mobi" ]
|
38
|
+
|
39
|
+
if RUBY_VERSION < "1.9"
|
40
|
+
puts
|
41
|
+
puts "--- ATTENTION ---".color(:red).bright.blink
|
42
|
+
puts "You appear to be on Ruby 1.8. Highline acts weird on 1.8 when retrying after an exception."
|
43
|
+
puts "I recommend you hop up to 1.9.2. But it's OK. Whatever. It's not like I know"
|
44
|
+
puts "anything about how I run or anything. NO NO. DONT LISTEN TO ME."
|
45
|
+
puts "--- ATTENTION ---".color(:red).bright.blink
|
46
|
+
puts
|
47
|
+
require 'fastercsv'
|
48
|
+
CSVModule = FasterCSV
|
49
|
+
else
|
50
|
+
require 'csv'
|
51
|
+
CSVModule = CSV
|
52
|
+
end
|
53
|
+
|
54
|
+
puts "Ready to ditch GoDaddy for Namecheap?" + " LET'S DO THIS THING.".color(:red).bright
|
55
|
+
puts
|
56
|
+
|
57
|
+
puts "First, I need your Namecheap details.\nMake sure you're enabled for API access: http://is.gd/MpVI5T".color(:magenta)
|
58
|
+
username = nil
|
59
|
+
api_key = nil
|
60
|
+
|
61
|
+
begin
|
62
|
+
username = ask("What's your username?".bright)
|
63
|
+
api_key = ask("What's your API key?".bright)
|
64
|
+
|
65
|
+
Namecheap.get_domains(username, api_key)
|
66
|
+
rescue
|
67
|
+
puts
|
68
|
+
puts "ZOMG WTF AUTHENTICATION FAILED!!!".color(:red).bright.blink
|
69
|
+
puts
|
70
|
+
|
71
|
+
retry
|
72
|
+
end
|
73
|
+
|
74
|
+
puts "\nOK, you're verified now.".color(:yellow) + " Magical, I know, right?\n".bright.color(:yellow)
|
75
|
+
puts
|
76
|
+
|
77
|
+
file_path = nil
|
78
|
+
begin
|
79
|
+
puts "Next, tell me where your data export from GoDaddy is at.\n(Follow instructions here: http://is.gd/2vI0aV)\n".color(:magenta)
|
80
|
+
|
81
|
+
file_path = ask("Where is the data file at?".bright)
|
82
|
+
puts File.join(Dir.pwd, file_path)
|
83
|
+
unless File.exists?(file_path)
|
84
|
+
raise "File fail."
|
85
|
+
end
|
86
|
+
rescue
|
87
|
+
puts
|
88
|
+
puts "ZOMG WTF FILE NOT FOUND!!!".color(:red).bright.blink
|
89
|
+
puts
|
90
|
+
|
91
|
+
retry
|
92
|
+
end
|
93
|
+
|
94
|
+
puts "\nFile found, now slurpinating it.".bright.color(:yellow)
|
95
|
+
|
96
|
+
csv = CSVModule.new(File.open(file_path), :headers => true, :skip_blanks => true)
|
97
|
+
|
98
|
+
puts
|
99
|
+
puts "OK, this is getting serious now."
|
100
|
+
puts "Should I just transfer every domain I can or ask you about each one?".color(:cyan).bright
|
101
|
+
|
102
|
+
prompt = ask("Say 'ask' or 'transfer': ") {|q| q.validate = /(^ask$)|(^transfer$)/ }
|
103
|
+
prompt = (prompt == "ask")
|
104
|
+
|
105
|
+
puts
|
106
|
+
|
107
|
+
csv.each do |row|
|
108
|
+
if prompt
|
109
|
+
response = ask("Transfer " + row['DomainName'].bright.color(:yellow) + " to Namecheap? (yes/no)") {|q| q.validate = /(^yes$)|(^no$)/ }
|
110
|
+
if response == 'no'
|
111
|
+
puts "\tOK, cow(boy|girl). Skipping that guy..."
|
112
|
+
puts
|
113
|
+
|
114
|
+
next
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
puts "Transferring #{row['DomainName'].bright.color(:yellow)}..."
|
119
|
+
if row['Locked'] != 'Unlocked'
|
120
|
+
puts "\t!".color(:red).bright + " Oops. You didn't unlock that domain according to this export. Skipping..."
|
121
|
+
next
|
122
|
+
end
|
123
|
+
|
124
|
+
unless GOOD_TLDS.include?(row['TLD'])
|
125
|
+
puts "\t!".color(:red).bright + " O NOEZ. You can't actually transfer a domain with the TLD #{row['TLD']} via the API. Skipping..."
|
126
|
+
end
|
127
|
+
|
128
|
+
begin
|
129
|
+
Namecheap.initiate_transfer(row['DomainName'], row['AuthorizationCode'], username, api_key)
|
130
|
+
puts "\t*".color(:cyan).bright + " That worked!"
|
131
|
+
rescue StandardError
|
132
|
+
puts "\t! Well, poop. There seems to be an error.".color(:red)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
puts
|
137
|
+
puts "Well, we're all done. Our time together was magical.".color(:cyan)
|
138
|
+
puts "I hope it was as good for you as it was for me. ktnxbai"
|
139
|
+
puts "Visit me at http://arcturo.com sometime."
|
140
|
+
puts
|
141
|
+
puts "--- IMPORTANT ---".color(:magenta).bright.blink
|
142
|
+
puts "To speed up the process, follow the instructions here for"
|
143
|
+
puts "explicitly approving the transfers: http://is.gd/ZRBLUP"
|
144
|
+
puts "Takes much less time than the 5 days it normally takes."
|
145
|
+
puts "--- IMPORTANT ---".color(:magenta).bright.blink
|
146
|
+
puts
|
data/lib/ditchdaddy.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ditchdaddy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-25 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: dnsimple-ruby
|
16
|
-
requirement: &
|
16
|
+
requirement: &2156435180 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>'
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2156435180
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: highline
|
27
|
-
requirement: &
|
27
|
+
requirement: &2156434740 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>'
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.0.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2156434740
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rainbow
|
38
|
-
requirement: &
|
38
|
+
requirement: &2156434280 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>'
|
@@ -43,10 +43,21 @@ dependencies:
|
|
43
43
|
version: 0.0.0
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2156434280
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rest-client
|
49
|
+
requirement: &2156433720 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>'
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.0.0
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2156433720
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: rdoc
|
49
|
-
requirement: &
|
60
|
+
requirement: &2156433260 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ~>
|
@@ -54,10 +65,10 @@ dependencies:
|
|
54
65
|
version: '3.10'
|
55
66
|
type: :development
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *2156433260
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: newgem
|
60
|
-
requirement: &
|
71
|
+
requirement: &2156432720 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ! '>='
|
@@ -65,10 +76,10 @@ dependencies:
|
|
65
76
|
version: 1.5.3
|
66
77
|
type: :development
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *2156432720
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: hoe
|
71
|
-
requirement: &
|
82
|
+
requirement: &2156432240 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - ~>
|
@@ -76,23 +87,15 @@ dependencies:
|
|
76
87
|
version: '2.12'
|
77
88
|
type: :development
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
80
|
-
description:
|
81
|
-
|
82
|
-
the steps to move your domains to DNSimple. \n\n1) It will ask for your DNSimple
|
83
|
-
details to log you in. \n2) The script will then make sure that you have a contact
|
84
|
-
registered that these domains can be registered to (if not, it helps you create
|
85
|
-
one).\n3) Next, you'll need to unlock your domains and get a data export from GoDaddy
|
86
|
-
with the authorization codes (you can follow the instructions here: http://is.gd/2vI0aV).
|
87
|
-
\ Unfortunately, GoDaddy does not offer an API for that.\n4) Then the transfers
|
88
|
-
cometh. You can either transfer the whole export in one shot or have it ask you
|
89
|
-
about each one. It uses the DNSimple API to create the transfer orders.\n5) Lastly,
|
90
|
-
it praises you gloriously for your hard work and shows you how to speed the transfers
|
91
|
-
up."
|
90
|
+
version_requirements: *2156432240
|
91
|
+
description: Bye GoDaddy, hello DNSimple/Namecheap/Gandi. (Will accept patches for
|
92
|
+
other registrars! Just make another binscript)
|
92
93
|
email:
|
93
94
|
- jeremy@arcturo.com
|
94
95
|
executables:
|
95
|
-
- ditchdaddy
|
96
|
+
- ditchdaddy-dnsimple
|
97
|
+
- ditchdaddy-namecheap
|
98
|
+
- ditchdaddy-gandi
|
96
99
|
extensions: []
|
97
100
|
extra_rdoc_files:
|
98
101
|
- History.txt
|
@@ -104,7 +107,9 @@ files:
|
|
104
107
|
- PostInstall.txt
|
105
108
|
- README.rdoc
|
106
109
|
- Rakefile
|
107
|
-
- bin/ditchdaddy
|
110
|
+
- bin/ditchdaddy-dnsimple
|
111
|
+
- bin/ditchdaddy-namecheap
|
112
|
+
- bin/ditchdaddy-gandi
|
108
113
|
- lib/ditchdaddy.rb
|
109
114
|
- script/console
|
110
115
|
- script/destroy
|
@@ -138,7 +143,7 @@ rubyforge_project: ditchdaddy
|
|
138
143
|
rubygems_version: 1.8.10
|
139
144
|
signing_key:
|
140
145
|
specification_version: 3
|
141
|
-
summary: Bye GoDaddy, hello DNSimple
|
146
|
+
summary: Bye GoDaddy, hello DNSimple/Namecheap/Gandi
|
142
147
|
test_files:
|
143
148
|
- test/test_ditchdaddy.rb
|
144
149
|
- test/test_ditchdaddy_cli.rb
|