etna 0.1.35 → 0.1.36
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/lib/etna/application.rb +6 -0
- data/lib/etna/auth.rb +1 -1
- data/lib/etna/client.rb +2 -2
- data/lib/etna/clients/base_client.rb +2 -1
- data/lib/etna/clients/janus/client.rb +4 -5
- data/lib/etna/spec/vcr.rb +21 -2
- data/lib/etna/test_auth.rb +0 -1
- data/lib/etna/user.rb +5 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a6d9abd6b64884e701b1055215018b85939ee0bf6cc19275eccae0ebffe92856
|
|
4
|
+
data.tar.gz: a382140c854224855b317923551d467baa3b29202ec6ebccc2fb8d7782115d06
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e150a0e7dac99e3c637151033d4105617910188f9c61c8e2812b2fa75c3d3967e95bb2fa43babb98802b14640658e02167c81b825fa0e1be41cef6340a74d4fa
|
|
7
|
+
data.tar.gz: 6f7365324ceed077161b4507397380837cc0d355f6cbd4dfff22b2abb527eaeafc2455e3cb3138d7b9a8085d3b4a2b3cf05b86417f2458a9bc80da859c77ed24
|
data/lib/etna/application.rb
CHANGED
|
@@ -31,6 +31,12 @@ module Etna::Application
|
|
|
31
31
|
raise "Could not find application instance from #{namespace}, and not subclass of Application found."
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
+
# Used to find the application in development recorded vcr tests.
|
|
35
|
+
# see spec/vcr.rb
|
|
36
|
+
def dev_route
|
|
37
|
+
"#{self.class.name.split('::').first.downcase}.development.local"
|
|
38
|
+
end
|
|
39
|
+
|
|
34
40
|
def self.register(app)
|
|
35
41
|
@instance = app
|
|
36
42
|
end
|
data/lib/etna/auth.rb
CHANGED
data/lib/etna/client.rb
CHANGED
|
@@ -173,7 +173,7 @@ module Etna
|
|
|
173
173
|
verify_mode = @ignore_ssl ?
|
|
174
174
|
OpenSSL::SSL::VERIFY_NONE :
|
|
175
175
|
OpenSSL::SSL::VERIFY_PEER
|
|
176
|
-
Net::HTTP.start(uri.host, uri.port, use_ssl: true, verify_mode: verify_mode) do |http|
|
|
176
|
+
Net::HTTP.start(uri.host, uri.port, use_ssl: true, verify_mode: verify_mode, read_timeout: 300) do |http|
|
|
177
177
|
http.request(data) do |response|
|
|
178
178
|
status_check!(response)
|
|
179
179
|
yield response
|
|
@@ -183,7 +183,7 @@ module Etna
|
|
|
183
183
|
verify_mode = @ignore_ssl ?
|
|
184
184
|
OpenSSL::SSL::VERIFY_NONE :
|
|
185
185
|
OpenSSL::SSL::VERIFY_PEER
|
|
186
|
-
Net::HTTP.start(uri.host, uri.port, use_ssl: true, verify_mode: verify_mode) do |http|
|
|
186
|
+
Net::HTTP.start(uri.host, uri.port, use_ssl: true, verify_mode: verify_mode, read_timeout: 300) do |http|
|
|
187
187
|
response = http.request(data)
|
|
188
188
|
status_check!(response)
|
|
189
189
|
return response
|
|
@@ -29,7 +29,8 @@ module Etna
|
|
|
29
29
|
def token_will_expire?(offset=3000)
|
|
30
30
|
# offset in seconds
|
|
31
31
|
# Will the user's token expire in the given amount of time?
|
|
32
|
-
|
|
32
|
+
payload = JSON.parse(Base64.urlsafe_decode64(token.split('.')[1]))
|
|
33
|
+
epoch_seconds = payload["exp"]
|
|
33
34
|
expiration = DateTime.strptime(epoch_seconds.to_s, "%s")
|
|
34
35
|
expiration <= DateTime.now.new_offset + offset
|
|
35
36
|
end
|
|
@@ -58,20 +58,19 @@ module Etna
|
|
|
58
58
|
TokenResponse.new(token)
|
|
59
59
|
end
|
|
60
60
|
|
|
61
|
-
def validate_task_token
|
|
62
|
-
|
|
63
|
-
@etna_client.post('/api/tokens/task/validate', validate_task_token_request)
|
|
61
|
+
def validate_task_token
|
|
62
|
+
@etna_client.post('/api/tokens/validate_task')
|
|
64
63
|
end
|
|
65
64
|
|
|
66
65
|
def get_nonce
|
|
67
66
|
@etna_client.get('/api/tokens/nonce').body
|
|
68
67
|
end
|
|
69
68
|
|
|
70
|
-
def generate_token(token_type, signed_nonce: nil, project_name: nil)
|
|
69
|
+
def generate_token(token_type, signed_nonce: nil, project_name: nil, read_only: false)
|
|
71
70
|
response = @etna_client.with_headers(
|
|
72
71
|
'Authorization' => signed_nonce ? "Signed-Nonce #{signed_nonce}" : nil
|
|
73
72
|
) do
|
|
74
|
-
post('/api/tokens/generate', token_type: token_type, project_name: project_name)
|
|
73
|
+
post('/api/tokens/generate', token_type: token_type, project_name: project_name, read_only: read_only)
|
|
75
74
|
end
|
|
76
75
|
|
|
77
76
|
response.body
|
data/lib/etna/spec/vcr.rb
CHANGED
|
@@ -4,13 +4,32 @@ require 'openssl'
|
|
|
4
4
|
require 'digest/sha2'
|
|
5
5
|
require 'base64'
|
|
6
6
|
|
|
7
|
-
def setup_base_vcr(spec_helper_dir)
|
|
7
|
+
def setup_base_vcr(spec_helper_dir, server: nil, application: nil)
|
|
8
8
|
VCR.configure do |c|
|
|
9
9
|
c.hook_into :webmock
|
|
10
10
|
c.cassette_serializers
|
|
11
11
|
c.cassette_library_dir = ::File.join(spec_helper_dir, 'fixtures', 'cassettes')
|
|
12
12
|
c.allow_http_connections_when_no_cassette = true
|
|
13
13
|
|
|
14
|
+
c.register_request_matcher :verify_uri_route do |request_1, request_2|
|
|
15
|
+
next true if server.nil? || application.nil?
|
|
16
|
+
|
|
17
|
+
route_match = request_1.uri =~ /https:\/\/#{application.dev_route}(.*)/
|
|
18
|
+
if route_match && route_match[1]
|
|
19
|
+
def request_1.request_method
|
|
20
|
+
method.to_s.upcase
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def request_1.path
|
|
24
|
+
URI(uri).path
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
!!server.find_route(request_1)
|
|
28
|
+
else
|
|
29
|
+
true
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
14
33
|
c.register_request_matcher :try_body do |request_1, request_2|
|
|
15
34
|
if request_1.headers['Content-Type'].first =~ /application\/json/
|
|
16
35
|
if request_2.headers['Content-Type'].first =~ /application\/json/
|
|
@@ -39,7 +58,7 @@ def setup_base_vcr(spec_helper_dir)
|
|
|
39
58
|
else
|
|
40
59
|
ENV['RERECORD'] ? :all : :once
|
|
41
60
|
end,
|
|
42
|
-
match_requests_on: [:method, :uri, :try_body]
|
|
61
|
+
match_requests_on: [:method, :uri, :try_body, :verify_uri_route]
|
|
43
62
|
}
|
|
44
63
|
|
|
45
64
|
# Filter the authorization headers of any request by replacing any occurrence of that request's
|
data/lib/etna/test_auth.rb
CHANGED
|
@@ -42,7 +42,6 @@ module Etna
|
|
|
42
42
|
# We do this to support Metis client tests, we pass in tokens with multiple "."-separated parts, so
|
|
43
43
|
# have to account for that.
|
|
44
44
|
payload = JSON.parse(Base64.decode64(token.split('.')[1]))
|
|
45
|
-
|
|
46
45
|
request.env['etna.user'] = Etna::User.new(payload.map{|k,v| [k.to_sym, v]}.to_h, token)
|
|
47
46
|
end
|
|
48
47
|
|
data/lib/etna/user.rb
CHANGED
|
@@ -7,7 +7,7 @@ module Etna
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
def initialize params, token=nil
|
|
10
|
-
@name, @email, @encoded_permissions, encoded_flags = params.values_at(:name, :email, :perm, :flags)
|
|
10
|
+
@name, @email, @encoded_permissions, encoded_flags, @task = params.values_at(:name, :email, :perm, :flags, :task)
|
|
11
11
|
|
|
12
12
|
@flags = encoded_flags&.split(/;/) || []
|
|
13
13
|
@token = token unless !token
|
|
@@ -16,6 +16,10 @@ module Etna
|
|
|
16
16
|
|
|
17
17
|
attr_reader :name, :email, :token
|
|
18
18
|
|
|
19
|
+
def task?
|
|
20
|
+
!!@task
|
|
21
|
+
end
|
|
22
|
+
|
|
19
23
|
def permissions
|
|
20
24
|
@permissions ||= @encoded_permissions.split(/\;/).map do |roles|
|
|
21
25
|
role, projects = roles.split(/:/)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: etna
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.36
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Saurabh Asthana
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-05-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rack
|