internetbs 1.0.0

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 (47) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/Gemfile +5 -0
  4. data/LICENSE +19 -0
  5. data/README.md +758 -0
  6. data/internetbs.gemspec +18 -0
  7. data/lib/internetbs.rb +64 -0
  8. data/lib/internetbs/account_balance.rb +8 -0
  9. data/lib/internetbs/account_balances.rb +40 -0
  10. data/lib/internetbs/account_domain.rb +11 -0
  11. data/lib/internetbs/account_domains.rb +100 -0
  12. data/lib/internetbs/account_price.rb +19 -0
  13. data/lib/internetbs/account_prices.rb +70 -0
  14. data/lib/internetbs/account_transaction.rb +9 -0
  15. data/lib/internetbs/account_transactions.rb +54 -0
  16. data/lib/internetbs/additional_attributes.rb +41 -0
  17. data/lib/internetbs/base.rb +33 -0
  18. data/lib/internetbs/client.rb +49 -0
  19. data/lib/internetbs/configuration.rb +61 -0
  20. data/lib/internetbs/country_codes.rb +288 -0
  21. data/lib/internetbs/domain_availability.rb +37 -0
  22. data/lib/internetbs/domain_contact.rb +109 -0
  23. data/lib/internetbs/domain_host.rb +46 -0
  24. data/lib/internetbs/domain_hosts.rb +101 -0
  25. data/lib/internetbs/domain_information.rb +128 -0
  26. data/lib/internetbs/domain_push.rb +33 -0
  27. data/lib/internetbs/domain_record.rb +31 -0
  28. data/lib/internetbs/domain_records.rb +172 -0
  29. data/lib/internetbs/domain_total.rb +8 -0
  30. data/lib/internetbs/dot_asia_attributes.rb +56 -0
  31. data/lib/internetbs/dot_de_attributes.rb +64 -0
  32. data/lib/internetbs/dot_eu_attributes.rb +20 -0
  33. data/lib/internetbs/dot_fr_attributes.rb +138 -0
  34. data/lib/internetbs/dot_it_attributes.rb +182 -0
  35. data/lib/internetbs/dot_nl_attributes.rb +47 -0
  36. data/lib/internetbs/dot_uk_attributes.rb +60 -0
  37. data/lib/internetbs/dot_us_attributes.rb +54 -0
  38. data/lib/internetbs/error.rb +38 -0
  39. data/lib/internetbs/language_codes.rb +27 -0
  40. data/lib/internetbs/order_domain.rb +78 -0
  41. data/lib/internetbs/private_whois.rb +81 -0
  42. data/lib/internetbs/registrar_lock.rb +73 -0
  43. data/lib/internetbs/registry_status.rb +39 -0
  44. data/lib/internetbs/renew_domain.rb +43 -0
  45. data/lib/internetbs/update_domain.rb +71 -0
  46. data/lib/internetbs/version.rb +10 -0
  47. metadata +104 -0
@@ -0,0 +1,18 @@
1
+ require './lib/internetbs/version'
2
+
3
+ Gem::Specification.new do |gem|
4
+ gem.name = 'internetbs'
5
+ gem.version = InternetBS::VERSION::STRING
6
+ gem.authors = 'Jurgen Jocubeit'
7
+ gem.email = 'support@brightcommerce.com'
8
+ gem.homepage = 'https://github.com/brightcommerce/internetbs'
9
+ gem.summary = InternetBS::VERSION::SUMMARY
10
+ gem.description = 'A Ruby API client for InternetBS resellers.'
11
+ gem.license = 'MIT'
12
+ gem.metadata = { 'copyright' => 'Copyright 2015 Brightcommerce, Inc.' }
13
+ gem.files = `git ls-files`.split($/)
14
+ # gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
+ gem.require_path = 'lib'
16
+ gem.required_ruby_version = '>= 2.0.0'
17
+ gem.add_dependency 'virtus', '~> 1.0.3'
18
+ end
@@ -0,0 +1,64 @@
1
+ module InternetBS
2
+ autoload :AccountBalance, 'internetbs/account_balance'
3
+ autoload :AccountBalances, 'internetbs/account_balances'
4
+ autoload :AccountDomain, 'internetbs/account_domain'
5
+ autoload :AccountDomains, 'internetbs/account_domains'
6
+ autoload :AccountPrice, 'internetbs/account_price'
7
+ autoload :AccountPrices, 'internetbs/account_prices'
8
+ autoload :AccountTransaction, 'internetbs/account_transaction'
9
+ autoload :AccountTransactions, 'internetbs/account_transactions'
10
+ autoload :Base, 'internetbs/base'
11
+ autoload :Client, 'internetbs/client'
12
+ autoload :Configuration, 'internetbs/configuration'
13
+ autoload :DomainAvailability, 'internetbs/domain_availability'
14
+ autoload :DomainContact, 'internetbs/domain_contact'
15
+ autoload :DomainHost, 'internetbs/domain_host'
16
+ autoload :DomainHosts, 'internetbs/domain_hosts'
17
+ autoload :DomainInformation, 'internetbs/domain_information'
18
+ autoload :DomainPush, 'internetbs/domain_push'
19
+ autoload :DomainRecord, 'internetbs/domain_record'
20
+ autoload :DomainRecords, 'internetbs/domain_records'
21
+ autoload :DomainTotal, 'internetbs/domain_total'
22
+ autoload :DotAsiaAttributes, 'internetbs/dot_asia_attributes'
23
+ autoload :DotDEAttributes, 'internetbs/dot_de_attributes'
24
+ autoload :DotEUAttributes, 'internetbs/dot_eu_attributes'
25
+ autoload :DotFRAttributes, 'internetbs/dot_fr_attributes'
26
+ autoload :DotITAttributes, 'internetbs/dot_it_attributes'
27
+ autoload :DotNLAttributes, 'internetbs/dot_nl_attributes'
28
+ autoload :DotUKAttributes, 'internetbs/dot_uk_attributes'
29
+ autoload :DotUSAttributes, 'internetbs/dot_us_attributes'
30
+ autoload :OrderDomain, 'internetbs/order_domain'
31
+ autoload :PrivateWhois, 'internetbs/private_whois'
32
+ autoload :RegistrarLock, 'internetbs/registrar_lock'
33
+ autoload :RegistryStatus, 'internetbs/registry_status'
34
+ autoload :RenewDomain, 'internetbs/renew_domain'
35
+ autoload :UpdateDomain, 'internetbs/update_domain'
36
+
37
+ @@configuration = nil
38
+
39
+ def self.configure
40
+ @@configuration = Configuration.new
41
+ yield(configuration) if block_given?
42
+ configuration
43
+ end
44
+
45
+ def self.configuration
46
+ @@configuration || configure
47
+ end
48
+
49
+ def self.method_missing(method_sym, *arguments, &block)
50
+ if configuration.respond_to?(method_sym)
51
+ configuration.send(method_sym)
52
+ else
53
+ super
54
+ end
55
+ end
56
+
57
+ def self.respond_to?(method_sym, include_private = false)
58
+ if configuration.respond_to?(method_sym, include_private)
59
+ true
60
+ else
61
+ super
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,8 @@
1
+ module InternetBS
2
+ class AccountBalance
3
+ include Virtus.model
4
+
5
+ attribute :currency, String
6
+ attribute :amount, Float
7
+ end
8
+ end
@@ -0,0 +1,40 @@
1
+ module InternetBS
2
+ class AccountBalances < Base
3
+ attribute :list, Array[AccountBalance]
4
+ attribute :currency, String
5
+
6
+ def fetch
7
+ @errors.clear
8
+
9
+ params = {}
10
+ params.merge!({'currency' => @currency}) if @currency
11
+ response = Client.get('/account/balance/get', params)
12
+ code = response.code rescue ""
13
+
14
+ case code
15
+ when '200'
16
+ hash = JSON.parse(response.body)
17
+
18
+ @status = hash['status']
19
+ @transaction_id = hash['transactid']
20
+
21
+ if @status == 'SUCCESS'
22
+ hash['balance'].each do |balance|
23
+ @list << AccountBalance.new(
24
+ :amount => balance['amount'],
25
+ :currency => balance['currency']
26
+ )
27
+ end
28
+ else
29
+ set_errors(response)
30
+ return false
31
+ end
32
+
33
+ return true
34
+ else
35
+ set_errors(response)
36
+ return false
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,11 @@
1
+ module InternetBS
2
+ class AccountDomain
3
+ include Virtus.model
4
+
5
+ attribute :name, String
6
+ attribute :expiration_date, Date
7
+ attribute :registrar_lock, String # ENABLED or DISABLED or NOTADMITTED
8
+ attribute :status, String
9
+ attribute :transfer_auth_info, String
10
+ end
11
+ end
@@ -0,0 +1,100 @@
1
+ module InternetBS
2
+ class AccountDomains < Base
3
+ attribute :compact_list, Boolean, :default => true # YES or NO
4
+ attribute :expiring_only, Integer # Number of days
5
+ attribute :extension_filter, String
6
+ attribute :pending_transfer_only, Boolean, :default => false # YES or NO
7
+ attribute :range_from, Integer
8
+ attribute :range_to, Integer
9
+ attribute :search_term_filter, String
10
+ attribute :list, Array[AccountDomain]
11
+ attribute :sort_by, String, :default => 'DOMAIN_NAME' # DOMAIN_NAME, DOMAIN_NAME_DESC, EXPIRATION, EXPIRATION_DESC
12
+ attribute :total_domains, Integer
13
+ attribute :total_domains_by_tld, Array[DomainTotal]
14
+
15
+ def fetch
16
+ @errors.clear
17
+ @list.clear
18
+ @total_domains = 0
19
+ @total_domains_by_tld = 0
20
+
21
+ params = {'compactlist' => @compact_list ? 'YES' : 'NO', 'sortby' => @sort_by}
22
+ params.merge!({'expiringonly' => @expiring_only}) if @expiring_only
23
+ params.merge!({'extensionfilter' => @extension_filter}) if @extension_filter
24
+ params.merge!({'pendingtransferonly' => 'YES'}) if @pending_transfer_only
25
+ params.merge!({'rangefrom' => @range_from, 'rangeto' => @range_to}) if @range_from && @range_to
26
+ params.merge!({'searchtermfilter' => @search_term_filter}) if @search_term_filter
27
+
28
+ response = Client.get('/domain/list', params)
29
+ code = response.code rescue ""
30
+
31
+ case code
32
+ when '200'
33
+ hash = JSON.parse(response.body)
34
+
35
+ @status = hash.delete('status')
36
+ @transaction_id = hash.delete('transactid')
37
+
38
+ if @status == 'SUCCESS'
39
+ @total_domains = hash['domaincount']
40
+
41
+ if @compact_list
42
+ hash['domain'].each do |domain|
43
+ @list << AccountDomain.new(:name => domain)
44
+ end
45
+ else
46
+ hash['domain'].each do |domain|
47
+ @list << AccountDomain.new(
48
+ :name => domain['name'],
49
+ :expiration_date => domain['expiration'],
50
+ :registrar_lock => domain['registrarlock'],
51
+ :status => domain['status'],
52
+ :transfer_auth_info => domain['transferauthinfo']
53
+ )
54
+ end
55
+ end
56
+ else
57
+ set_errors(response)
58
+ return false
59
+ end
60
+
61
+ return true
62
+ else
63
+ set_errors(response)
64
+ return false
65
+ end
66
+ end
67
+
68
+ def totals
69
+ @errors.clear
70
+
71
+ response = Client.get('/domain/count')
72
+ code = response.code rescue ""
73
+
74
+ case code
75
+ when '200'
76
+ hash = JSON.parse(response.body)
77
+
78
+ @status = hash.delete('status')
79
+ @transaction_id = hash.delete('transactid')
80
+
81
+ if @status == 'SUCCESS'
82
+ @total_domains = hash.delete('totaldomains')
83
+ @total_domains_by_tld.clear
84
+
85
+ hash.each do |tld, total|
86
+ @total_domains_by_tld << DomainTotal.new(:tld => tld, :total => total)
87
+ end
88
+ else
89
+ set_errors(response)
90
+ return false
91
+ end
92
+
93
+ return true
94
+ else
95
+ set_errors(response)
96
+ return false
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,19 @@
1
+ module InternetBS
2
+ class AccountPrice
3
+ include Virtus.model
4
+
5
+ attribute :currency, String
6
+ attribute :name, String
7
+ attribute :operation, String
8
+ attribute :price_1_year, Float
9
+ attribute :price_2_years, Float
10
+ attribute :price_3_years, Float
11
+ attribute :price_4_years, Float
12
+ attribute :price_5_years, Float
13
+ attribute :price_6_years, Float
14
+ attribute :price_7_years, Float
15
+ attribute :price_8_years, Float
16
+ attribute :price_9_years, Float
17
+ attribute :price_10_years, Float
18
+ end
19
+ end
@@ -0,0 +1,70 @@
1
+ module InternetBS
2
+ class AccountPrices < Base
3
+ attribute :currency, String, :default => 'USD'
4
+ attribute :discount_code, String
5
+ attribute :level, String
6
+ attribute :list, Array[AccountPrice]
7
+ attribute :version, Integer, :default => 1 # 1 or 2
8
+
9
+ def fetch
10
+ @errors.clear
11
+
12
+ params = {'currency' => @currency, 'version' => @version}
13
+ optional_params = {'discountcode' => @discount_code}
14
+ params.merge!(optional_params) if @discount_code
15
+
16
+ response = Client.get('/account/pricelist/get', params)
17
+ code = response.code rescue ""
18
+
19
+ case code
20
+ when '200'
21
+ hash = JSON.parse(response.body)
22
+
23
+ @status = hash["status"]
24
+ @transaction_id = hash["transactid"]
25
+
26
+ if @status == 'SUCCESS'
27
+ case @version
28
+ when 1
29
+ hash['product'].each do |product|
30
+ @list << AccountPrice.new(
31
+ :currency => @currency,
32
+ :name => product['name'],
33
+ :price_1_year => product['price']
34
+ )
35
+ end
36
+ when 2
37
+ @level = hash['pricelevel']
38
+ @currency = hash['currency']
39
+
40
+ hash['product'].each do |product|
41
+ @list << AccountPrice.new(
42
+ :currency => @currency,
43
+ :name => product['type'],
44
+ :operation => product['operation'],
45
+ :price_1_year => product['period']['1'],
46
+ :price_2_years => product['period']['2'],
47
+ :price_3_years => product['period']['3'],
48
+ :price_4_years => product['period']['4'],
49
+ :price_5_years => product['period']['5'],
50
+ :price_6_years => product['period']['6'],
51
+ :price_7_years => product['period']['7'],
52
+ :price_8_years => product['period']['8'],
53
+ :price_9_years => product['period']['9'],
54
+ :price_10_years => product['period']['10']
55
+ )
56
+ end
57
+ end
58
+ else
59
+ set_errors(response)
60
+ return false
61
+ end
62
+
63
+ return true
64
+ else
65
+ set_errors(response)
66
+ return false
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,9 @@
1
+ module InternetBS
2
+ class AccountTransaction
3
+ include Virtus.model
4
+
5
+ attribute :currency, String
6
+ attribute :name, String
7
+ attribute :price, Float
8
+ end
9
+ end
@@ -0,0 +1,54 @@
1
+ module InternetBS
2
+ class AccountTransactions < Base
3
+ attribute :client_transaction_id, String
4
+ attribute :currency, String, :default => 'USD'
5
+ attribute :list, Array[AccountTransaction]
6
+ attribute :response_type, String, :default => 'EXACT_RESPONSE' # EXACT_RESPONSE, RESPONSE_DATA or REQUEST_DATA
7
+
8
+ def fetch
9
+ @errors.clear
10
+
11
+ params = {}
12
+ params.merge!({'transaction_id' => @transaction_id}) if @transaction_id
13
+ params.merge!({'client_transaction_id' => @client_transaction_id}) if @client_transaction_id
14
+
15
+ response = Client.get('/account/transactioninfo/get', params)
16
+ code = response.code rescue ""
17
+
18
+ case code
19
+ when '200'
20
+ hash = JSON.parse(response.body)
21
+
22
+ @status = hash["status"]
23
+ @transaction_id = hash["transactid"]
24
+
25
+ # Receiving: "FAILURE", "Permission Denied %1%"
26
+ # This endpoint may require activation by InternetBS themselves?
27
+ # Documentation exists in PDF only. May be an artifact, but would
28
+ # expect to receive an error stating the endpoint doesn't exist.
29
+ debugger
30
+ puts hash
31
+
32
+ if @status == 'SUCCESS'
33
+ @currency = hash['currency']
34
+
35
+ hash['product'].each do |product|
36
+ @list << AccountTransaction.new(
37
+ :currency => @currency ,
38
+ :name => product['name'],
39
+ :price => product['price']
40
+ )
41
+ end
42
+ else
43
+ set_errors(response)
44
+ return false
45
+ end
46
+
47
+ return true
48
+ else
49
+ set_errors(response)
50
+ return false
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,41 @@
1
+ module InternetBS
2
+ class AdditionalAttributes < Base
3
+ attribute :contact_type, String # Internal - symbol: one of :registrant, :admin, :billing, :tech, :zone
4
+ attribute :domain_extension, String
5
+
6
+ def admin_params
7
+ return {}
8
+ end
9
+
10
+ def billing_params
11
+ return {}
12
+ end
13
+
14
+ # Mandatory attributes for all contact types
15
+ def mandatory_params
16
+ return {}
17
+ end
18
+
19
+ # Optional attributes for all contact types
20
+ def optional_params
21
+ return {}
22
+ end
23
+
24
+ def registrant_params
25
+ return {}
26
+ end
27
+
28
+ def valid?(inputs = {})
29
+ if @errors.any?
30
+ return false
31
+ else
32
+ return true
33
+ end
34
+ end
35
+
36
+ # .de domains only - substituted with billing contact
37
+ def zone_params
38
+ return {}
39
+ end
40
+ end
41
+ end