concourse.rb 0.1.0.pre.2 → 0.1.0.pre.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5947a92fde0da797b5a22a1e4943157630a136ef6a804d2b8929d03d67d373ec
4
- data.tar.gz: 93190bf00f9e23a5238aa2ab4537b05cc034aefb186cb65818358da0c21acc96
3
+ metadata.gz: a9d3b78394c237f40be7120c376a08f2589674df770193621459b707dcb5a82b
4
+ data.tar.gz: fc30e4e5ac9607112f39e1a6e08373d26757c43a5383de9de6034acf9e466724
5
5
  SHA512:
6
- metadata.gz: a57b3d0d8a3ce8e8f68bdb9dadf5dca25bae8cec61d8b1ccd3f44176977c2dce37c7b9583603e5e964a4234d79f1b90c5cec3ca69342e62ffe10afe525cc99f0
7
- data.tar.gz: 0a89e8d015cd19827465b081cceee38192d520df3ac36e93a670aef27833ac1eaa62a8671957e6ede793196852f64d96b591b572cbbba28c1e931d27c3d46275
6
+ metadata.gz: 29db3b96e36cf7fd5031087804b0344548f062b62e74d44d71ad6cdb390a1010ea120d26b5f67b4d23b77f3423376399595785a90a6b9c029e3ef086de75ed58
7
+ data.tar.gz: a91efec92fe4b9261576c37581098345c376ed21387f85123577ab9b27ec025a60126c1cc891e06c86db5d1365abcea6c5c09c60b9122145abdb6fa0d98ce6d4
@@ -1,8 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- concourse.rb (0.1.0.pre.2)
4
+ concourse.rb (0.1.0.pre.3)
5
+ dry-schema (~> 0.5)
5
6
  excon (~> 0.72)
7
+ semantic (~> 1.5)
6
8
 
7
9
  GEM
8
10
  remote: https://rubygems.org/
@@ -18,7 +20,38 @@ GEM
18
20
  colored2 (3.1.2)
19
21
  concurrent-ruby (1.1.7)
20
22
  diff-lcs (1.4.4)
23
+ dry-configurable (0.12.0)
24
+ concurrent-ruby (~> 1.0)
25
+ dry-core (~> 0.5, >= 0.5.0)
26
+ dry-container (0.7.2)
27
+ concurrent-ruby (~> 1.0)
28
+ dry-configurable (~> 0.1, >= 0.1.3)
29
+ dry-core (0.5.0)
30
+ concurrent-ruby (~> 1.0)
31
+ dry-equalizer (0.3.0)
32
+ dry-inflector (0.2.0)
33
+ dry-initializer (3.0.4)
34
+ dry-logic (1.1.0)
35
+ concurrent-ruby (~> 1.0)
36
+ dry-core (~> 0.5, >= 0.5)
37
+ dry-schema (0.6.0)
38
+ concurrent-ruby (~> 1.0)
39
+ dry-configurable (~> 0.8, >= 0.8.0)
40
+ dry-core (~> 0.4)
41
+ dry-equalizer (~> 0.2)
42
+ dry-initializer (~> 3.0)
43
+ dry-logic (~> 1.0)
44
+ dry-types (~> 1.0)
45
+ dry-types (1.4.0)
46
+ concurrent-ruby (~> 1.0)
47
+ dry-container (~> 0.3)
48
+ dry-core (~> 0.4, >= 0.4.4)
49
+ dry-equalizer (~> 0.3)
50
+ dry-inflector (~> 0.1, >= 0.1.2)
51
+ dry-logic (~> 1.0, >= 1.0.2)
21
52
  excon (0.78.1)
53
+ faker (2.15.1)
54
+ i18n (>= 1.6, < 2)
22
55
  faraday (1.3.0)
23
56
  faraday-net_http (~> 1.0)
24
57
  multipart-post (>= 1.2, < 3)
@@ -29,6 +62,7 @@ GEM
29
62
  concurrent-ruby (~> 1.0)
30
63
  i18n (1.8.6)
31
64
  concurrent-ruby (~> 1.0)
65
+ jwt (2.2.2)
32
66
  lino (1.7.0)
33
67
  hamster (~> 3.0)
34
68
  open4 (~> 1.3)
@@ -38,6 +72,7 @@ GEM
38
72
  faraday (>= 0.9)
39
73
  sawyer (~> 0.8.0, >= 0.5.3)
40
74
  open4 (1.3.4)
75
+ openssl (2.2.0)
41
76
  public_suffix (4.0.6)
42
77
  rake (13.0.3)
43
78
  rake_circle_ci (0.9.0)
@@ -79,6 +114,7 @@ GEM
79
114
  sawyer (0.8.2)
80
115
  addressable (>= 2.3.5)
81
116
  faraday (> 0.8, < 2.0)
117
+ semantic (1.6.1)
82
118
  sshkey (2.0.0)
83
119
  tzinfo (2.0.4)
84
120
  concurrent-ruby (~> 1.0)
@@ -92,7 +128,10 @@ PLATFORMS
92
128
  DEPENDENCIES
93
129
  bundler (~> 2.0)
94
130
  concourse.rb!
131
+ faker (~> 2.15)
95
132
  gem-release (~> 2.0)
133
+ jwt (~> 2.2)
134
+ openssl (~> 2.2)
96
135
  rake (~> 13.0)
97
136
  rake_circle_ci (~> 0.9)
98
137
  rake_github (~> 0.5)
@@ -26,6 +26,8 @@ Gem::Specification.new do |spec|
26
26
  spec.required_ruby_version = '>= 2.6.0'
27
27
 
28
28
  spec.add_dependency 'excon', '~> 0.72'
29
+ spec.add_dependency 'dry-schema', '~> 0.5'
30
+ spec.add_dependency 'semantic', '~> 1.5'
29
31
 
30
32
  spec.add_development_dependency 'bundler', '~> 2.0'
31
33
  spec.add_development_dependency 'rake', '~> 13.0'
@@ -34,5 +36,8 @@ Gem::Specification.new do |spec|
34
36
  spec.add_development_dependency 'rake_ssh', '~> 0.4'
35
37
  spec.add_development_dependency 'rake_gpg', '~> 0.12'
36
38
  spec.add_development_dependency 'rspec', '~> 3.9'
39
+ spec.add_development_dependency 'jwt', '~> 2.2'
40
+ spec.add_development_dependency 'openssl', '~> 2.2'
41
+ spec.add_development_dependency 'faker', '~> 2.15'
37
42
  spec.add_development_dependency 'gem-release', '~> 2.0'
38
43
  end
@@ -1,5 +1,7 @@
1
1
  require_relative 'concourse/version'
2
2
  require_relative 'concourse/client'
3
+ require_relative 'concourse/urls'
4
+ require_relative 'concourse/headers'
3
5
 
4
6
  module Concourse
5
7
  end
@@ -1,7 +1,32 @@
1
+ require 'excon'
2
+ require 'concourse/sub_clients'
3
+
1
4
  module Concourse
2
5
  class Client
3
- def initialize
6
+ def initialize(options)
7
+ @options = options
8
+ end
9
+
10
+ def for_skymarshal
11
+ Concourse::SubClients::SkymarshalClient.new(
12
+ @options.merge(version: get_info[:version]))
13
+ end
14
+
15
+ def get_info
16
+ JSON.parse(
17
+ Excon.get(Concourse::Urls.info_url(@options[:url]))
18
+ .body,
19
+ symbolize_names: true)
20
+ end
21
+
22
+ def ==(other)
23
+ other.class == self.class && other.state == state
24
+ end
25
+
26
+ protected
4
27
 
28
+ def state
29
+ [@options]
5
30
  end
6
31
  end
7
32
  end
@@ -0,0 +1,41 @@
1
+ require 'base64'
2
+
3
+ module Concourse
4
+ module ContentTypes
5
+ APPLICATION_WWW_FORM_URLENCODED = 'application/x-www-form-urlencoded'
6
+ end
7
+
8
+ module Authorization
9
+ def self.bearer(token)
10
+ "Bearer #{token}"
11
+ end
12
+
13
+ def self.basic(username, password)
14
+ "Basic #{Base64.encode64("#{username}:#{password}")}"
15
+ end
16
+ end
17
+
18
+ module HeaderNames
19
+ def self.content_type
20
+ "Content-Type"
21
+ end
22
+
23
+ def self.authorization
24
+ "Authorization"
25
+ end
26
+
27
+ def self.date
28
+ "Date"
29
+ end
30
+ end
31
+
32
+ module Headers
33
+ def self.content_type(content_type)
34
+ {Concourse::HeaderNames.content_type => content_type}
35
+ end
36
+
37
+ def self.authorization(authorization)
38
+ {Concourse::HeaderNames.authorization => authorization}
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,6 @@
1
+ require 'concourse/sub_clients/skymarshal_client'
2
+
3
+ module Concourse
4
+ module SubClients
5
+ end
6
+ end
@@ -0,0 +1,100 @@
1
+ require 'semantic'
2
+ require 'date'
3
+
4
+ require 'concourse/urls'
5
+ require 'concourse/headers'
6
+
7
+ module Concourse
8
+ module SubClients
9
+ class SkymarshalClient
10
+ VERSION_6_1 = Semantic::Version.new('6.1.0')
11
+
12
+ def initialize(options)
13
+ @url = options[:url]
14
+ @version = Semantic::Version.new(options[:version])
15
+ end
16
+
17
+ def create_token(parameters)
18
+ url = create_token_url
19
+ headers = create_token_headers
20
+ body = create_token_body(parameters)
21
+
22
+ token_response = Excon.post(url, headers: headers, body: body)
23
+
24
+ token(token_response)
25
+ end
26
+
27
+ def ==(other)
28
+ other.class == self.class && other.state == state
29
+ end
30
+
31
+ protected
32
+
33
+ def state
34
+ [@options]
35
+ end
36
+
37
+ private
38
+
39
+ def create_token_url
40
+ @version >= VERSION_6_1 ?
41
+ Concourse::Urls.sky_issuer_token_url(@url) :
42
+ Concourse::Urls.sky_token_url(@url)
43
+ end
44
+
45
+ def create_token_headers
46
+ {}
47
+ .merge(Concourse::Headers.content_type(
48
+ Concourse::ContentTypes::APPLICATION_WWW_FORM_URLENCODED))
49
+ .merge(Concourse::Headers.authorization(
50
+ Concourse::Authorization.basic(
51
+ "fly", "Zmx5")))
52
+ end
53
+
54
+ def create_token_body(parameters)
55
+ username = parameters[:username]
56
+ password = parameters[:password]
57
+
58
+ scope = @version >= VERSION_6_1 ?
59
+ 'openid profile email federated:id groups' :
60
+ 'openid+profile+email+federated:id+groups'
61
+
62
+ URI.encode_www_form({
63
+ grant_type: 'password',
64
+ username: username,
65
+ password: password,
66
+ scope: scope
67
+ })
68
+ end
69
+
70
+ def token(token_response)
71
+ token_response_date = @version >= VERSION_6_1 ?
72
+ DateTime.parse(
73
+ token_response.headers[Concourse::HeaderNames.date]) :
74
+ nil
75
+ token_response_body =
76
+ JSON.parse(token_response.body, symbolize_names: true)
77
+
78
+ seconds_in_a_day = 60 * 60 * 24
79
+
80
+ @version >= VERSION_6_1 ?
81
+ {
82
+ access_token: token_response_body[:access_token],
83
+ token_type: token_response_body[:token_type].downcase,
84
+ expires_at:
85
+ (token_response_date +
86
+ (token_response_body[:expires_in] /
87
+ seconds_in_a_day))
88
+ .iso8601,
89
+ id_token: token_response_body[:id_token]
90
+ } :
91
+ {
92
+ access_token: token_response_body[:access_token],
93
+ token_type: token_response_body[:token_type].downcase,
94
+ expires_at: token_response_body[:expiry],
95
+ id_token: token_response_body[:access_token]
96
+ }
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,19 @@
1
+ module Concourse
2
+ module Urls
3
+ def self.api_url(concourse_url)
4
+ "#{concourse_url}/api/v1"
5
+ end
6
+
7
+ def self.sky_token_url(concourse_url)
8
+ "#{concourse_url}/sky/token"
9
+ end
10
+
11
+ def self.sky_issuer_token_url(concourse_url)
12
+ "#{concourse_url}/sky/issuer/token"
13
+ end
14
+
15
+ def self.info_url(concourse_url)
16
+ "#{api_url(concourse_url)}/info"
17
+ end
18
+ end
19
+ end
@@ -1,3 +1,3 @@
1
1
  module Concourse
2
- VERSION = '0.1.0.pre.2'
2
+ VERSION = '0.1.0.pre.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: concourse.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre.2
4
+ version: 0.1.0.pre.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toby Clemson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-02 00:00:00.000000000 Z
11
+ date: 2021-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: excon
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.72'
27
+ - !ruby/object:Gem::Dependency
28
+ name: dry-schema
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: semantic
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.5'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.5'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: bundler
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +150,48 @@ dependencies:
122
150
  - - "~>"
123
151
  - !ruby/object:Gem::Version
124
152
  version: '3.9'
153
+ - !ruby/object:Gem::Dependency
154
+ name: jwt
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '2.2'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '2.2'
167
+ - !ruby/object:Gem::Dependency
168
+ name: openssl
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '2.2'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '2.2'
181
+ - !ruby/object:Gem::Dependency
182
+ name: faker
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '2.15'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '2.15'
125
195
  - !ruby/object:Gem::Dependency
126
196
  name: gem-release
127
197
  requirement: !ruby/object:Gem::Requirement
@@ -154,6 +224,10 @@ files:
154
224
  - concourse.rb.gemspec
155
225
  - lib/concourse.rb
156
226
  - lib/concourse/client.rb
227
+ - lib/concourse/headers.rb
228
+ - lib/concourse/sub_clients.rb
229
+ - lib/concourse/sub_clients/skymarshal_client.rb
230
+ - lib/concourse/urls.rb
157
231
  - lib/concourse/version.rb
158
232
  homepage: https://github.com/infrablocks/concourse.rb
159
233
  licenses: