docker_registry2 0.1.1 → 0.2.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.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/docker_registry2.gemspec +1 -1
- data/lib/registry/registry.rb +40 -21
- data/lib/registry/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef04c903f6bb8dba1bfc577438ce0f9cb089c3bd
|
4
|
+
data.tar.gz: 2091e8b03ea16e4031fb57a4af74475689c7c07d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57d618d30acabc7e70119fbe117db816b6b9680caffc0964acd0896f498ab5fa5fe332eb73fa15af46b879e7e7d3cd8a379fb4c9571905317be720e27641cdf9
|
7
|
+
data.tar.gz: ce03cf1323138987eb55b9a93edea4abe8006531b915398c539a8d87b9298c65ea9c018c096669eed30cc4fe18303ae7329045c29b638383de6984c633b2dd24
|
data/README.md
CHANGED
data/docker_registry2.gemspec
CHANGED
@@ -6,7 +6,7 @@ require 'registry/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'docker_registry2'
|
8
8
|
spec.version = DockerRegistry::VERSION
|
9
|
-
spec.authors = ['Avi Deitcher']
|
9
|
+
spec.authors = ['Avi Deitcher https://github.com/deitch', 'Jonathan Hurter https://github.com/johnsudaar']
|
10
10
|
spec.summary = 'Docker v2 registry HTTP API client'
|
11
11
|
spec.description = 'Docker v2 registry HTTP API client with support for token authentication'
|
12
12
|
spec.homepage = 'https://github.com/deitch/docker_registry2'
|
data/lib/registry/registry.rb
CHANGED
@@ -14,34 +14,53 @@ class DockerRegistry::Registry
|
|
14
14
|
# make a ping connection
|
15
15
|
ping
|
16
16
|
end
|
17
|
-
|
18
|
-
def doget(url
|
17
|
+
|
18
|
+
def doget(url)
|
19
19
|
begin
|
20
|
-
|
21
|
-
if token.nil?
|
22
|
-
response = RestClient.get @base_uri+url
|
23
|
-
else
|
24
|
-
response = RestClient.get @base_uri+url, Authorization: 'Bearer '+token
|
25
|
-
end
|
20
|
+
response = RestClient.get @base_uri+url
|
26
21
|
rescue SocketError
|
27
22
|
raise DockerRegistry::RegistryUnknownException
|
28
23
|
rescue RestClient::Unauthorized => e
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
24
|
+
header = e.response.headers[:www_authenticate]
|
25
|
+
method = header.downcase.split(' ')[0]
|
26
|
+
case method
|
27
|
+
when 'basic'
|
28
|
+
response = do_basic_get(url)
|
29
|
+
when 'bearer'
|
30
|
+
response = do_bearer_get(url, header)
|
35
31
|
else
|
36
|
-
|
32
|
+
raise DockerRegistry::RegistryUnknownException
|
37
33
|
end
|
38
|
-
|
34
|
+
end
|
35
|
+
return response
|
36
|
+
end
|
37
|
+
|
38
|
+
def do_basic_get(url)
|
39
|
+
begin
|
40
|
+
res = RestClient::Resource.new( @base_uri+url, @user, @password)
|
41
|
+
response = res.get
|
42
|
+
rescue SocketError
|
43
|
+
raise DockerRegistry::RegistryUnknownException
|
44
|
+
rescue RestClient::Unauthorized
|
45
|
+
raise DockerRegistry::RegistryAuthenticationException
|
46
|
+
end
|
47
|
+
return response
|
48
|
+
end
|
49
|
+
|
50
|
+
def do_bearer_get(url, header)
|
51
|
+
token = authenticate_bearer(header)
|
52
|
+
begin
|
53
|
+
response = RestClient.get @base_uri+url, Authorization: 'Bearer '+token
|
54
|
+
rescue SocketError
|
39
55
|
raise DockerRegistry::RegistryUnknownException
|
56
|
+
rescue RestClient::Unauthorized
|
57
|
+
raise DockerRegistry::RegistryAuthenticationException
|
40
58
|
end
|
59
|
+
|
41
60
|
return response
|
42
61
|
end
|
43
|
-
|
44
|
-
def
|
62
|
+
|
63
|
+
def authenticate_bearer(header)
|
45
64
|
# get the parts we need
|
46
65
|
target = split_auth_header(header)
|
47
66
|
# did we have a username and password?
|
@@ -61,7 +80,7 @@ class DockerRegistry::Registry
|
|
61
80
|
# now save the web token
|
62
81
|
return JSON.parse(response)["token"]
|
63
82
|
end
|
64
|
-
|
83
|
+
|
65
84
|
def split_auth_header(header = '')
|
66
85
|
h = Hash.new
|
67
86
|
h = {params: {}}
|
@@ -81,7 +100,7 @@ class DockerRegistry::Registry
|
|
81
100
|
def ping
|
82
101
|
response = doget '/v2/'
|
83
102
|
end
|
84
|
-
|
103
|
+
|
85
104
|
def search(query = '')
|
86
105
|
response = doget "/v2/_catalog"
|
87
106
|
# parse the response
|
@@ -98,4 +117,4 @@ class DockerRegistry::Registry
|
|
98
117
|
# parse the response
|
99
118
|
JSON.parse response
|
100
119
|
end
|
101
|
-
end
|
120
|
+
end
|
data/lib/registry/version.rb
CHANGED
metadata
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker_registry2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Avi Deitcher
|
7
|
+
- Avi Deitcher https://github.com/deitch
|
8
|
+
- Jonathan Hurter https://github.com/johnsudaar
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|