ditchdaddy 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,9 @@ Manifest.txt
3
3
  PostInstall.txt
4
4
  README.rdoc
5
5
  Rakefile
6
- bin/ditchdaddy
6
+ bin/ditchdaddy-dnsimple
7
+ bin/ditchdaddy-namecheap
8
+ bin/ditchdaddy-gandi
7
9
  lib/ditchdaddy.rb
8
10
  script/console
9
11
  script/destroy
@@ -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 and rename this one)
7
+ Bye GoDaddy, hello DNSimple/Namecheap/Gandi. (Will accept patches for other registrars! Just make another binscript)
8
8
 
9
- This will walk you through the steps to move your domains to DNSimple.
9
+ === DNSimple
10
10
 
11
- 1) It will ask for your DNSimple details to log you in.
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
- == SYNOPSIS:
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
- ditchdaddy # follow the prompts
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
- ask = ask("Say 'ask' or 'transfer': ") {|q| q.validate = /(^ask$)|(^transfer$)/ }
146
- ask = (ask == "ask")
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 ask
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
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module Ditchdaddy
5
- VERSION = '0.0.3'
5
+ VERSION = '0.0.4'
6
6
  end
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.3
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-23 00:00:00.000000000Z
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: &2160214000 !ruby/object:Gem::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: *2160214000
24
+ version_requirements: *2156435180
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: highline
27
- requirement: &2160212980 !ruby/object:Gem::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: *2160212980
35
+ version_requirements: *2156434740
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rainbow
38
- requirement: &2160210900 !ruby/object:Gem::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: *2160210900
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: &2160209220 !ruby/object:Gem::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: *2160209220
68
+ version_requirements: *2156433260
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: newgem
60
- requirement: &2160207580 !ruby/object:Gem::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: *2160207580
79
+ version_requirements: *2156432720
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: hoe
71
- requirement: &2160205940 !ruby/object:Gem::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: *2160205940
80
- description: ! "Bye GoDaddy, hello DNSimple. (Will accept patches for other registrars!
81
- \ Just make another binscript and rename this one)\n\nThis will walk you through
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