jira-ruby 1.7.0 → 1.7.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.
- checksums.yaml +4 -4
- data/jira-ruby.gemspec +0 -2
- data/lib/jira/jwt_client.rb +42 -8
- data/lib/jira/version.rb +1 -1
- data/spec/jira/jwt_uri_builder_spec.rb +59 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 280f02562d113b77a58fa5716f9cf9fe39fe6641893d3aecdd250caf4acf7d33
|
4
|
+
data.tar.gz: f29efc88140a3381b816bcbcec7a977120610470c72b4758bf359353f69eb316
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '087796061f2ef0472f91c36f64de9550ecb3f7ba6028e8ba91de43b3868e898d7ec4e82733bf31cf336f4a4fd4db9f2f89db320b9ff1db0759c303b6fcbf33ca'
|
7
|
+
data.tar.gz: b7fff299ec8eac30ff10f00bf36c6c659a6f29b2ab90a6b62e8ce810167ad9188d497a57f29dd389c536a393a2f8aa9897283c24f37b93ed554e8a21140b1e3e
|
data/jira-ruby.gemspec
CHANGED
@@ -13,8 +13,6 @@ Gem::Specification.new do |s|
|
|
13
13
|
|
14
14
|
s.required_ruby_version = '>= 1.9.3'
|
15
15
|
|
16
|
-
s.rubyforge_project = 'jira-ruby'
|
17
|
-
|
18
16
|
s.files = `git ls-files`.split("\n")
|
19
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
data/lib/jira/jwt_client.rb
CHANGED
@@ -4,7 +4,7 @@ module JIRA
|
|
4
4
|
class JwtClient < HttpClient
|
5
5
|
def make_request(http_method, url, body = '', headers = {})
|
6
6
|
# When a proxy is enabled, Net::HTTP expects that the request path omits the domain name
|
7
|
-
path = request_path(
|
7
|
+
path = request_path(http_method, url)
|
8
8
|
|
9
9
|
request = Net::HTTP.const_get(http_method.to_s.capitalize).new(path, headers)
|
10
10
|
request.body = body unless body.nil?
|
@@ -15,18 +15,52 @@ module JIRA
|
|
15
15
|
response
|
16
16
|
end
|
17
17
|
|
18
|
+
class JwtUriBuilder
|
19
|
+
attr_reader :request_url, :http_method, :shared_secret, :site, :issuer
|
20
|
+
|
21
|
+
def initialize(request_url, http_method, shared_secret, site, issuer)
|
22
|
+
@request_url = request_url
|
23
|
+
@http_method = http_method
|
24
|
+
@shared_secret = shared_secret
|
25
|
+
@site = site
|
26
|
+
@issuer = issuer
|
27
|
+
end
|
28
|
+
|
29
|
+
def build
|
30
|
+
uri = URI.parse(request_url)
|
31
|
+
new_query = URI.decode_www_form(String(uri.query)) << ['jwt', jwt_header]
|
32
|
+
uri.query = URI.encode_www_form(new_query)
|
33
|
+
|
34
|
+
return uri.to_s unless uri.is_a?(URI::HTTP)
|
35
|
+
|
36
|
+
uri.request_uri
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def jwt_header
|
42
|
+
claim = Atlassian::Jwt.build_claims \
|
43
|
+
issuer,
|
44
|
+
request_url,
|
45
|
+
http_method.to_s,
|
46
|
+
site,
|
47
|
+
(Time.now - 60).to_i,
|
48
|
+
(Time.now + 86_400).to_i
|
49
|
+
|
50
|
+
JWT.encode claim, shared_secret
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
18
54
|
private
|
19
55
|
|
20
|
-
def
|
21
|
-
|
22
|
-
@options[:issuer],
|
56
|
+
def request_path(http_method, url)
|
57
|
+
JwtUriBuilder.new(
|
23
58
|
url,
|
24
59
|
http_method.to_s,
|
60
|
+
@options[:shared_secret],
|
25
61
|
@options[:site],
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
JWT.encode claim, @options[:shared_secret]
|
62
|
+
@options[:issuer]
|
63
|
+
).build
|
30
64
|
end
|
31
65
|
end
|
32
66
|
end
|
data/lib/jira/version.rb
CHANGED
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe JIRA::JwtClient::JwtUriBuilder do
|
4
|
+
subject(:url_builder) do
|
5
|
+
JIRA::JwtClient::JwtUriBuilder.new(url, http_method, shared_secret, site, issuer)
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:url) { '/foo' }
|
9
|
+
let(:http_method) { :get }
|
10
|
+
let(:shared_secret) { 'shared_secret' }
|
11
|
+
let(:site) { 'http://localhost:2990' }
|
12
|
+
let(:issuer) { nil }
|
13
|
+
|
14
|
+
describe '#build' do
|
15
|
+
subject { url_builder.build }
|
16
|
+
|
17
|
+
it 'includes the jwt param' do
|
18
|
+
expect(subject).to include('?jwt=')
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'when the url already contains params' do
|
22
|
+
let(:url) { '/foo?expand=projects.issuetypes.fields' }
|
23
|
+
|
24
|
+
it 'includes the jwt param' do
|
25
|
+
expect(subject).to include('&jwt=')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'with a complete url' do
|
30
|
+
let(:url) { 'http://localhost:2990/rest/api/2/issue/createmeta' }
|
31
|
+
|
32
|
+
it 'includes the jwt param' do
|
33
|
+
expect(subject).to include('?jwt=')
|
34
|
+
end
|
35
|
+
|
36
|
+
it { is_expected.to start_with('/') }
|
37
|
+
|
38
|
+
it 'contains only one ?' do
|
39
|
+
expect(subject.count('?')).to eq(1)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'with a complete url containing a param' do
|
44
|
+
let(:url) do
|
45
|
+
'http://localhost:2990/rest/api/2/issue/createmeta?expand=projects.issuetypes.fields'
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'includes the jwt param' do
|
49
|
+
expect(subject).to include('&jwt=')
|
50
|
+
end
|
51
|
+
|
52
|
+
it { is_expected.to start_with('/') }
|
53
|
+
|
54
|
+
it 'contains only one ?' do
|
55
|
+
expect(subject.count('?')).to eq(1)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jira-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SUMO Heavy Industries
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-08-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -289,6 +289,7 @@ files:
|
|
289
289
|
- spec/jira/has_many_proxy_spec.rb
|
290
290
|
- spec/jira/http_client_spec.rb
|
291
291
|
- spec/jira/http_error_spec.rb
|
292
|
+
- spec/jira/jwt_uri_builder_spec.rb
|
292
293
|
- spec/jira/oauth_client_spec.rb
|
293
294
|
- spec/jira/request_client_spec.rb
|
294
295
|
- spec/jira/resource/agile_spec.rb
|
@@ -383,7 +384,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
383
384
|
- !ruby/object:Gem::Version
|
384
385
|
version: '0'
|
385
386
|
requirements: []
|
386
|
-
rubyforge_project:
|
387
|
+
rubyforge_project:
|
387
388
|
rubygems_version: 2.7.6
|
388
389
|
signing_key:
|
389
390
|
specification_version: 4
|
@@ -413,6 +414,7 @@ test_files:
|
|
413
414
|
- spec/jira/has_many_proxy_spec.rb
|
414
415
|
- spec/jira/http_client_spec.rb
|
415
416
|
- spec/jira/http_error_spec.rb
|
417
|
+
- spec/jira/jwt_uri_builder_spec.rb
|
416
418
|
- spec/jira/oauth_client_spec.rb
|
417
419
|
- spec/jira/request_client_spec.rb
|
418
420
|
- spec/jira/resource/agile_spec.rb
|