epp_client 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.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in epp_client.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,42 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ epp_client (0.0.1)
5
+ uuid (~> 2.3)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ awesome_print (1.0.2)
11
+ coderay (1.0.5)
12
+ diff-lcs (1.1.3)
13
+ macaddr (1.5.0)
14
+ systemu (>= 2.4.0)
15
+ method_source (0.7.1)
16
+ pry (0.9.8.4)
17
+ coderay (~> 1.0.5)
18
+ method_source (~> 0.7.1)
19
+ slop (>= 2.4.4, < 3)
20
+ rake (0.9.2.2)
21
+ rspec (2.8.0)
22
+ rspec-core (~> 2.8.0)
23
+ rspec-expectations (~> 2.8.0)
24
+ rspec-mocks (~> 2.8.0)
25
+ rspec-core (2.8.0)
26
+ rspec-expectations (2.8.0)
27
+ diff-lcs (~> 1.1.2)
28
+ rspec-mocks (2.8.0)
29
+ slop (2.4.4)
30
+ systemu (2.4.2)
31
+ uuid (2.3.5)
32
+ macaddr (~> 1.0)
33
+
34
+ PLATFORMS
35
+ ruby
36
+
37
+ DEPENDENCIES
38
+ awesome_print (~> 1.0)
39
+ epp_client!
40
+ pry (~> 0.9)
41
+ rake (~> 0.9)
42
+ rspec (~> 2.7)
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "epp_client/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "epp_client"
7
+ s.version = EppClient::VERSION
8
+ s.authors = ["Matheus Tardivo"]
9
+ s.email = ["matheustardivo@gmail.com"]
10
+ s.homepage = "https://github.com/matheustardivo/epp_client"
11
+ s.summary = %q{Library to access EPP services}
12
+ s.description = s.summary
13
+
14
+ s.rubyforge_project = "epp_client"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency "rake", "~> 0.9"
22
+ s.add_development_dependency "rspec", "~> 2.7"
23
+ s.add_development_dependency "pry", "~> 0.9"
24
+ s.add_development_dependency "awesome_print", "~> 1.0"
25
+ s.add_runtime_dependency "uuid", "~> 2.3"
26
+ end
@@ -0,0 +1,22 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDqDCCApCgAwIBAgIBMDANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCQlIx
3
+ EjAQBgNVBAgTCVNhbyBQYXVsbzESMBAGA1UEBxMJU2FvIFBhdWxvMRQwEgYDVQQK
4
+ EwtSZWdpc3Ryby5icjEMMAoGA1UECxMDRVBQMRQwEgYDVQQDEwtyZWdpc3Ryby5i
5
+ cjEeMBwGCSqGSIb3DQEJARYPZXBwQHJlZ2lzdHJvLmJyMB4XDTA5MDYwNDIwMTQy
6
+ MloXDTEyMDYwMzIwMTQyMlowVzELMAkGA1UEBhMCQlIxEjAQBgNVBAgTCVNhbyBQ
7
+ YXVsbzESMBAGA1UEBxMJU2FvIFBhdWxvMRQwEgYDVQQKEwtSZWdpc3Ryby5icjEK
8
+ MAgGA1UEAxMBMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM1Taqp4
9
+ U385+H9JFhUqvtdf7QKRSEMP4i3E588l9MxAKLN3zv6gLIPMDDIL9SzHLAUHwhb2
10
+ ugaMLw/cTRbsrX75aXDsTIeuNufCRTh/2tJbhh9q1QBH3TMMyKrh0tpUmBfQ+nIJ
11
+ ziO7NIQI4/aTKuBBgzF/r2Waf0+kTURaJ5zoy/I/5KaWtT6kZAoQ7QHi3TQAg5in
12
+ SeYPN5asI+PiWJcXlmU4nmwKRPeDRXimrOGbBU/jE2aK8oqgGX6VkhxVH79BfWxR
13
+ f7LNK59J5LCRXckQ983JcXvbzlYPw7vrRIWcAJK2XQ+9wIE+82d7hFh1nufeJW1C
14
+ Nb0/oQZ3qKfuVUkCAwEAAaNGMEQwHwYDVR0jBBgwFoAUywO+Dd5JDQC8ZtVHhwE9
15
+ W/atw8AwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADANBgkqhkiG
16
+ 9w0BAQUFAAOCAQEAH1wVmUvad4ymlJD7ugz0htCLNJsIN4O9U99gr37Pn4yspUF9
17
+ weuGAWNRqjHGrEl8iKi1tou229+C9b3sJzazQSGg72wOlwB+xWwY9QzmZVWAjx1x
18
+ 6HplZGxbZOnYrwnQnXG5xk/L4liqZZPJI7aAoa6QCMS8zkJBenk1O5nFvbW7sqLr
19
+ QEUzE7U2lbpLAy7goWonLgp9TPQV3Ndq4njFYQDc76r5ShOJOn2QXNmQqG8xxjTP
20
+ 6lEYpivAjPfBxSTSmB9uBbSPYtFRYRmhhoRx3jFtpJpCXg8xXgPPE8FSS3Qd4B77
21
+ TjoDrotwp1D6LyxOGS0HsIYpa97K/D+GWWq+ww==
22
+ -----END CERTIFICATE-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEowIBAAKCAQEAzVNqqnhTfzn4f0kWFSq+11/tApFIQw/iLcTnzyX0zEAos3fO
3
+ /qAsg8wMMgv1LMcsBQfCFva6BowvD9xNFuytfvlpcOxMh64258JFOH/a0luGH2rV
4
+ AEfdMwzIquHS2lSYF9D6cgnOI7s0hAjj9pMq4EGDMX+vZZp/T6RNRFonnOjL8j/k
5
+ ppa1PqRkChDtAeLdNACDmKdJ5g83lqwj4+JYlxeWZTiebApE94NFeKas4ZsFT+MT
6
+ ZoryiqAZfpWSHFUfv0F9bFF/ss0rn0nksJFdyRD3zclxe9vOVg/Du+tEhZwAkrZd
7
+ D73AgT7zZ3uEWHWe594lbUI1vT+hBneop+5VSQIDAQABAoIBACSiRnzF3Tfs8u5a
8
+ 7uq15rjsr4/utfLpKZS69hUak5PBusFSlgcOMwMM6/wd8A+eNbdsC/Am80fpyRfO
9
+ WZ7GeaoW+/4e2wS2S6uMGOecwEEZ/VMrr3dOWyQZmtAKXKGByGUvbw/bugDcDOGl
10
+ 6G59EYBTkAHL41KAf0iJaxPP9hNjj/VNoPisH2eEk6wC6bSjMFY0NjOgIoSwafWN
11
+ 1JInu9F3M781UucVhFbjIF1O73znhcMygqMw7qRFnxe9lICxT2megppORWgW07qf
12
+ dQ5y9WFtfFGkXgpdfMzemLrHSVM00L0xSpx7iifayptX0NNODPeIfFwrti1fkyZv
13
+ VEgDrgUCgYEA6O3n/b1J5iWtDasDi9Mn9TWIO40uWkZqmu9ZAu/QhqjbEVnyx84C
14
+ XJuUglWtP66UrfggsZK9HTKr5nkDf+o1JHmSJuBc075OQoUQENFMtQHcSa/rByq4
15
+ XYjH52U4xY9BX/Rwntq8UComxYx/XSt8k2RISjYGus51YtNd2bh3Qn8CgYEA4ama
16
+ pipz7k21Nw0BNotBDENKcxdD/ppCOwJzJ/WpQe7e8Ua2QjyNVsJGOJXdUeE7C8XV
17
+ Y6arT6LHqPnG9dZ7q0DThef/n+18FxzTvttC6Vr3sMjt22ygArxZL+trRjnCxpTQ
18
+ VTBtNM2mCdwSBVkA1UVrhEjPq1ZZ9kHvH1IS9DcCgYABNHHVwyvlr940SuUqzP3Q
19
+ 6+T3geRyfRjCEmjgdgMbHzZ64X86/1rNxdQ/1FegE7QbLkRlBsBJrWBsQcX93GVH
20
+ +gUChHiWc86N04hgveRqr0bHbsyFbfgkK7f0/3YKt5H8ABSxDaqZs44dyXtDLR1o
21
+ 2cTx9VOVlcnPqA49ORIM2wKBgQCKV0CQl7wEnqz2d8mDl7EkBGiyz9OGVSk/JcxU
22
+ 9fxyiC8yuQfo6Vg4lNcZv34zwSFCoWClO7sQEhnW1HGNqpScMxy5nbWPZLbLMIf7
23
+ HE4T4wmv3i47c4dQxgjjIK7eGXD37qkdYJfCZERjDQAbOSoSlQFJ0p1FS6XRGzCu
24
+ AdHO1wKBgHhZiFxddmoo8prM9aFr5TbsfSsBfay1Gp2D6mAB/lUF+fShl1gB/ydt
25
+ esD7iYZ0xVtKs852L42XaccDXWs1sLSMN3/IPGeDSqkupWHg5K4OpKGOQ8ZWgjJ2
26
+ eppX6U6uFt3Wr09ChlwPEdUCfKQjy9FDW9tyDRn5VvodiMpwbKdO
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIEmzCCA4OgAwIBAgIJAPeh4e1Vi3LaMA0GCSqGSIb3DQEBBAUAMIGPMQswCQYD
3
+ VQQGEwJCUjESMBAGA1UECBMJU2FvIFBhdWxvMRIwEAYDVQQHEwlTYW8gUGF1bG8x
4
+ FDASBgNVBAoTC1JlZ2lzdHJvLmJyMQwwCgYDVQQLEwNFUFAxFDASBgNVBAMTC3Jl
5
+ Z2lzdHJvLmJyMR4wHAYJKoZIhvcNAQkBFg9lcHBAcmVnaXN0cm8uYnIwHhcNMDYw
6
+ NjE5MTcxNTM2WhcNMTYwNjE2MTcxNTM2WjCBjzELMAkGA1UEBhMCQlIxEjAQBgNV
7
+ BAgTCVNhbyBQYXVsbzESMBAGA1UEBxMJU2FvIFBhdWxvMRQwEgYDVQQKEwtSZWdp
8
+ c3Ryby5icjEMMAoGA1UECxMDRVBQMRQwEgYDVQQDEwtyZWdpc3Ryby5icjEeMBwG
9
+ CSqGSIb3DQEJARYPZXBwQHJlZ2lzdHJvLmJyMIIBIjANBgkqhkiG9w0BAQEFAAOC
10
+ AQ8AMIIBCgKCAQEAvdoB0lvMm2OtDt+kuWjPqLz9E+1TlzSvmTZQMXtu+HBpXpuM
11
+ fgHRWmdWlxMb9PD5Z7KboNlVTJHq1fABT5FlfiYlUS2gPlNsL2GrrCp2YngDxUq8
12
+ 5npjwaskfDmK72ioac74/DgdEUAtuikHKfgzc12RbXqV7g/mfTJrGddmrYI0jA1e
13
+ 2yJ5eZZM1/8PR47pR207zq97zJVXFV8MqB5lfxpQeOc5ubH9o4OC8HkaBYlCG0RJ
14
+ lPkWcJn1f++6dsgpqxTU5fp5IqN7ngU7QCwRByUUj0kY+liPgkMR2q4UFwWSKKWJ
15
+ AfNe04jbpf6aHXP1LRrHK48SYPTnD5ifz9T8fQIDAQABo4H3MIH0MB0GA1UdDgQW
16
+ BBTLA74N3kkNALxm1UeHAT1b9q3DwDCBxAYDVR0jBIG8MIG5gBTLA74N3kkNALxm
17
+ 1UeHAT1b9q3DwKGBlaSBkjCBjzELMAkGA1UEBhMCQlIxEjAQBgNVBAgTCVNhbyBQ
18
+ YXVsbzESMBAGA1UEBxMJU2FvIFBhdWxvMRQwEgYDVQQKEwtSZWdpc3Ryby5icjEM
19
+ MAoGA1UECxMDRVBQMRQwEgYDVQQDEwtyZWdpc3Ryby5icjEeMBwGCSqGSIb3DQEJ
20
+ ARYPZXBwQHJlZ2lzdHJvLmJyggkA96Hh7VWLctowDAYDVR0TBAUwAwEB/zANBgkq
21
+ hkiG9w0BAQQFAAOCAQEAD8zCjq2Zzwfht70d0feETkfBVbMSLMh7hqTR+eACnk2b
22
+ IVBX5AU+wvELrO+ZBMV8s/w5RlapRGxbyhuUNgaZ2nAD11sCWpYlO1YOpxbZRfCR
23
+ dHVnyRIFyG5obRr84M0fNw0Z+rfCOZta+PXNKDuYEI0Bnxi5VuWlmpNYnPFbgjhX
24
+ IFikOKBnvqBnZuByhA8Y7G7NnNE9alwQgxlMFEVauJPYFVCofkTMD42wtkt9qPe4
25
+ 4qKIIueqOSkBKpZRMzr+kLDWkKSNYwHj06a7LpK+JwKXHFClLNm274Wj/W7xOjQy
26
+ XbvEn53j7c0kohYMSE5jOTuI45u3Rr28NJsd2AZHgQ==
27
+ -----END CERTIFICATE-----
@@ -0,0 +1,50 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIID7DCCAtSgAwIBAgIBLjANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCQlIx
3
+ EjAQBgNVBAgTCVNhbyBQYXVsbzESMBAGA1UEBxMJU2FvIFBhdWxvMRQwEgYDVQQK
4
+ EwtSZWdpc3Ryby5icjEMMAoGA1UECxMDRVBQMRQwEgYDVQQDEwtyZWdpc3Ryby5i
5
+ cjEeMBwGCSqGSIb3DQEJARYPZXBwQHJlZ2lzdHJvLmJyMB4XDTA5MDYwNDE4NDA1
6
+ MVoXDTEyMDYwMzE4NDA1MVowejELMAkGA1UEBhMCQlIxEjAQBgNVBAgTCVNhbyBQ
7
+ YXVsbzESMBAGA1UEBxMJU2FvIFBhdWxvMRQwEgYDVQQKEwtSZWdpc3Ryby5icjEZ
8
+ MBcGA1UECxMQbGliZXBwIHVuaXQgdGVzdDESMBAGA1UEAxMJdW5pdC50ZXN0MIIB
9
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ofZ7tfm43XIgz+ZcTxfuRCr
10
+ 4Ha5Pjo4SjHE4L3DOHMJsZKgjrJqs9s1QsyjmWpYMLf9LVZrQrNZjtlFsmyN4Iib
11
+ 9V6HAkbR19ATUZUnH39t9BK3kDy/XU/48LPkJhumDx8y4hhsfGkn2yrqKY8n4GP2
12
+ CDuhnAzfnnY/SjjEOGpbsPW59Byc/fpdT2fJxbJbaFIUSm1gbXh1BL1/9kFAQAZw
13
+ K1FCoeWJjrKsG6QRu5PI6gffDR1IrOV6h4lOsBYe0RCRScm30meeKQRNZwKOVp8z
14
+ NDYCGLeGDt9I5DPqITv8FBRuLTeQt4iiXzRIpJ0aKj1pNHmdmrX325UfXmRuYQID
15
+ AQABo2cwZTAfBgNVHSMEGDAWgBTLA74N3kkNALxm1UeHAT1b9q3DwDA0BgNVHSUE
16
+ LTArBggrBgEFBQcDAQYIKwYBBQUHAwIGCisGAQQBgjcKAwMGCWCGSAGG+EIEATAM
17
+ BgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBBQUAA4IBAQCr2vGEi7NXd6KlfXVQ9JLE
18
+ MRGjl+I59xZOKKFB9E9BSieSvenpctT+FbsrrVuBIWRVXU3gJAFS9C35HRrZsRcl
19
+ D+x7+dFwIK3ootIEPX4h43Sb6IHrV94yQjuvsuN+bmKTqFjPjkXdQJFoLRGThvV3
20
+ j5zbBsQfVEdJ4kTPGb3sTZjkMFEGvVNtQ0YqvIJ2TyD+aptQOgIs/jkrRzMmExlD
21
+ H09yaO8ojZ870dcxovFgQ4TqtmsD91nXt7tUnfeXaPDENiNAQ6ibP8kFRsKb67pi
22
+ FJITyz8mTUpgH4GwDIEzCcTob4+vPxyakBQU4G8lc98LwxKjLdmRmW151mX8ecNr
23
+ -----END CERTIFICATE-----
24
+ -----BEGIN RSA PRIVATE KEY-----
25
+ MIIEpAIBAAKCAQEA8ofZ7tfm43XIgz+ZcTxfuRCr4Ha5Pjo4SjHE4L3DOHMJsZKg
26
+ jrJqs9s1QsyjmWpYMLf9LVZrQrNZjtlFsmyN4Iib9V6HAkbR19ATUZUnH39t9BK3
27
+ kDy/XU/48LPkJhumDx8y4hhsfGkn2yrqKY8n4GP2CDuhnAzfnnY/SjjEOGpbsPW5
28
+ 9Byc/fpdT2fJxbJbaFIUSm1gbXh1BL1/9kFAQAZwK1FCoeWJjrKsG6QRu5PI6gff
29
+ DR1IrOV6h4lOsBYe0RCRScm30meeKQRNZwKOVp8zNDYCGLeGDt9I5DPqITv8FBRu
30
+ LTeQt4iiXzRIpJ0aKj1pNHmdmrX325UfXmRuYQIDAQABAoIBAQCxt5ibavuWW52V
31
+ h0oR7tKZ0ryPm4+8KH9M5tFEeekOeUV2KGKcjeKgbpXFoByVc5ayBHByA2xPkQqk
32
+ IVPwHZmNGa1mjGDT6z8jLCar1ma3rvHMMtbty4XSg6KABuG8hvAVDqCDirAcLhX1
33
+ hKnX0D3BMJ59g+y1Y72M6UsRQS2Pw/q+b/ygETN96zER3fBHrLvtEv2QmXCRODgI
34
+ rl504IQqGBFPgSOoj/esgtoUPBHcE8brFRbRUKc8oSn1NIcoDXkl5lZtFVYDDjY8
35
+ 1Pqz725y9+D5Mvsv058c8ulDUbNxrFXpal6X2AmSXHgsK/aCTnBHJJrA0Krh3q4r
36
+ twU9pHNRAoGBAPwxfltDeHL0yg8eUmNurBR1IjXFRsdIhItkc8CBrnrAfadoTa87
37
+ 1QH3AGJDq8WJB+LfQOeSU5W9yT/EGhaYJFxgqLp6ZjDYUWMYuxSybJbmOwzlXd+L
38
+ 0TAgs1kzRNvo8cQBty1V/ec1kW/ECF7G4pxh5qkmu5+TVHGnwFXK6hX1AoGBAPYx
39
+ BR1uKXvnxY/d2qYB6yakIGwr+N6yY+EBvOcSiP1BP42bwBkQcY8qQLPQUGo4OGnN
40
+ wBtGDwMbgLugsPC7jaQe9vgCCavPfMWjEV+YCezJN1r8f/5qAAp/LemyuEW7jQVv
41
+ nTTjUp+79tqJyt+tdWQCr1O1bMYvoXNh+TEIRYc9AoGARn9PYxOpR/lFwpQnU8RM
42
+ NivINF/BOVP8OTsLYHTf4VCNz45IqQOAt9vkL5PbIIz9t13RNuqgkutKppia8lX1
43
+ VB1xDS/KAT13AsyW/2IhGM2jFCfJ5gOfpmR9viGmzhKAAtq36eRv5YID9cpGzLes
44
+ ASsc34wERsdYg6zxBwqCBUECgYEApyaBIoo5ADdMm3E1kqCa15F3sfno7sqPpaVY
45
+ bErZV5mFXM/yjRHtCBbX9z3oWzXwl2VqmRnn92Qk8z8W41tzv4qGg7xedJhbTpR4
46
+ pz7C/lFflBb7j/DINlhDA/ijxDSiep5dThtJbcpgv9/uLg/HNC/eeicjwytzorNS
47
+ TUggbMECgYB7wjmsv19vzfVOcsLso3LyJ6WRbBbG94pteyJp6Nrh8bHTU35b2PMx
48
+ nyQqxWtMWnmV9NGujZ+i5Wv1jFXe2FqYgfVe7K93ds/gWDS8MK58vY37wSj55CLb
49
+ 3RcphBhbh2xeuYGdBcLEUBHAFVowzjNj7qS4AX6bVEv6t3d2ppNcKg==
50
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0
5
+ epp-1.0.xsd">
6
+ <command>
7
+ <check>
8
+ <domain:check
9
+ xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
10
+ xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0
11
+ domain-1.0.xsd">
12
+ <domain:name><%= @domain %></domain:name>
13
+ </domain:check>
14
+ </check>
15
+ <clTRID><%= @uuid %></clTRID>
16
+ </command>
17
+ </epp>
@@ -0,0 +1,27 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0
5
+ epp-1.0.xsd">
6
+ <command>
7
+ <login>
8
+ <clID><%= ENV['REGISTRO_BR_CLIENT_ID'] %></clID>
9
+ <pw><%= ENV['REGISTRO_BR_CLIENT_PW'] %></pw>
10
+ <options>
11
+ <version>1.0</version>
12
+ <lang>pt</lang>
13
+ </options>
14
+ <svcs>
15
+ <objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
16
+ <objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
17
+ <svcExtension>
18
+ <extURI>urn:ietf:params:xml:ns:brdomain-1.0</extURI>
19
+ <extURI>urn:ietf:params:xml:ns:brorg-1.0</extURI>
20
+ <extURI>urn:ietf:params:xml:ns:secDNS-1.0</extURI>
21
+ <extURI>urn:ietf:params:xml:ns:secDNS-1.1</extURI>
22
+ </svcExtension>
23
+ </svcs>
24
+ </login>
25
+ <clTRID><%= @uuid %></clTRID>
26
+ </command>
27
+ </epp>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0
5
+ epp-1.0.xsd">
6
+ <command>
7
+ <logout/>
8
+ <clTRID><%= @uuid %></clTRID>
9
+ </command>
10
+ </epp>
@@ -0,0 +1,101 @@
1
+ module EppClient
2
+ module Registrobr
3
+ class Client
4
+ attr_accessor :host, :port
5
+
6
+ def initialize(host, port)
7
+ @host, @port = host, port
8
+ end
9
+
10
+ def check(domain)
11
+ @domain = domain
12
+
13
+ connect
14
+ login
15
+
16
+ check_response = send_request(:domain_check)
17
+
18
+ logout
19
+ close_connection
20
+
21
+ check_response
22
+ end
23
+
24
+ private
25
+ def connect
26
+ ssl_context = OpenSSL::SSL::SSLContext.new(:TLSv1)
27
+ ssl_context.cert = OpenSSL::X509::Certificate.new(File.open(CERTIFICATES[:cert]))
28
+ ssl_context.key = OpenSSL::PKey::RSA.new(File.open(CERTIFICATES[:key]))
29
+ ssl_context.ca_file = CERTIFICATES[:ca_file]
30
+ ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
31
+
32
+ @ssl_socket = OpenSSL::SSL::SSLSocket.new(TCPSocket.new(@host, @port), ssl_context)
33
+ @ssl_socket.sync_close = true
34
+
35
+ @ssl_socket.connect
36
+
37
+ begin
38
+ @ssl_socket.post_connection_check(host)
39
+ rescue => ex
40
+ raise PostConnectionCheckError, "Post connection check failed: #{ex.inspect}"
41
+ end
42
+
43
+ @ssl_socket.sysread(4096)
44
+ end
45
+
46
+ def close_connection
47
+ @ssl_socket.close
48
+ end
49
+
50
+ def login
51
+ send_request(:login)
52
+ end
53
+
54
+ def logout
55
+ send_request(:logout)
56
+ end
57
+
58
+ def send_request(xml)
59
+ raise TemplateNotFoundError unless TEMPLATES[xml]
60
+
61
+ actual_template = ERB.new File.open(TEMPLATES[xml]).readlines.join
62
+ @uuid = generate_uuid
63
+
64
+ send_frame(actual_template.result(binding))
65
+ get_frame
66
+ end
67
+
68
+ def generate_uuid
69
+ UUID.generate(:compact)
70
+ end
71
+
72
+ def send_frame(xml)
73
+ @ssl_socket.write(packed(xml) + xml)
74
+ end
75
+
76
+ def packed(xml)
77
+ [xml.size + 4].pack("N")
78
+ end
79
+
80
+ def get_frame
81
+ raise SSLSocketError, "Connection closed by remote server" if !@ssl_socket or @ssl_socket.eof?
82
+
83
+ header = @ssl_socket.read(4)
84
+ raise SSLSocketError, "Error reading frame from remote server" if header.nil?
85
+
86
+ length = header_size(header)
87
+ raise SSLSocketError, "Got bad frame header length of #{length} bytes from the server" if length < 5
88
+
89
+ @ssl_socket.read(length - 4)
90
+ end
91
+
92
+ def header_size(header)
93
+ header.unpack("N").first
94
+ end
95
+
96
+ class PostConnectionCheckError < StandardError; end
97
+ class SSLSocketError < StandardError; end
98
+ class TemplateNotFoundError < StandardError; end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,16 @@
1
+ require 'epp_client/registrobr/client'
2
+
3
+ TEMPLATES_FOLDER = 'files/registrobr/templates/'
4
+ CERTIFICATES_FOLDER = 'files/registrobr/'
5
+
6
+ TEMPLATES = {
7
+ :login => "#{TEMPLATES_FOLDER}login.xml.erb",
8
+ :logout => "#{TEMPLATES_FOLDER}logout.xml.erb",
9
+ :domain_check => "#{TEMPLATES_FOLDER}domain_check.xml.erb"
10
+ }
11
+
12
+ CERTIFICATES = {
13
+ :cert => "#{CERTIFICATES_FOLDER}client.pem",
14
+ :key => "#{CERTIFICATES_FOLDER}key.pem",
15
+ :ca_file => "#{CERTIFICATES_FOLDER}root.pem"
16
+ }
@@ -0,0 +1,3 @@
1
+ module EppClient
2
+ VERSION = "0.0.1"
3
+ end
data/lib/epp_client.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'socket'
2
+ require 'openssl'
3
+ require 'uuid'
4
+ require 'erb'
5
+
6
+ require 'epp_client/registrobr'
@@ -0,0 +1,12 @@
1
+ require "spec_helper"
2
+
3
+ describe EppClient::Registrobr::Client do
4
+
5
+ subject {
6
+ EppClient::Registrobr::Client.new("beta.registro.br", 700)
7
+ }
8
+
9
+ it "should check domain" do
10
+ subject.check("alisson15.com.br").should_not be_nil
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ require "bundler"
2
+ Bundler.setup(:default, :test)
3
+ Bundler.require
4
+
5
+ require "epp_client"
6
+
7
+ require "rake"
8
+ load File.expand_path("../../Rakefile", __FILE__)
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: epp_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Matheus Tardivo
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &70138644799620 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '0.9'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70138644799620
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &70138644797420 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '2.7'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70138644797420
36
+ - !ruby/object:Gem::Dependency
37
+ name: pry
38
+ requirement: &70138644796000 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '0.9'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70138644796000
47
+ - !ruby/object:Gem::Dependency
48
+ name: awesome_print
49
+ requirement: &70138644794700 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70138644794700
58
+ - !ruby/object:Gem::Dependency
59
+ name: uuid
60
+ requirement: &70138644793220 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: '2.3'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70138644793220
69
+ description: Library to access EPP services
70
+ email:
71
+ - matheustardivo@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - .gitignore
77
+ - Gemfile
78
+ - Gemfile.lock
79
+ - Rakefile
80
+ - epp_client.gemspec
81
+ - files/registrobr/client.pem
82
+ - files/registrobr/key.pem
83
+ - files/registrobr/root.pem
84
+ - files/registrobr/server.pem
85
+ - files/registrobr/templates/domain_check.xml.erb
86
+ - files/registrobr/templates/login.xml.erb
87
+ - files/registrobr/templates/logout.xml.erb
88
+ - lib/epp_client.rb
89
+ - lib/epp_client/registrobr.rb
90
+ - lib/epp_client/registrobr/client.rb
91
+ - lib/epp_client/version.rb
92
+ - spec/epp_client/registrobr/client_spec.rb
93
+ - spec/spec_helper.rb
94
+ homepage: https://github.com/matheustardivo/epp_client
95
+ licenses: []
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ! '>='
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ requirements: []
113
+ rubyforge_project: epp_client
114
+ rubygems_version: 1.8.11
115
+ signing_key:
116
+ specification_version: 3
117
+ summary: Library to access EPP services
118
+ test_files:
119
+ - spec/epp_client/registrobr/client_spec.rb
120
+ - spec/spec_helper.rb