aggcat 1.0.0 → 1.0.1

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
  SHA1:
3
- metadata.gz: b7128de0de414d469b30c900737a1454019994b1
4
- data.tar.gz: f59e147d86ed693e4fcd8d34a9432b9c158543b0
3
+ metadata.gz: 04cae6d196e8a35478b7c0264578977c7a8c3b24
4
+ data.tar.gz: 9488dfe842aced92961c1c7833ed982683633c81
5
5
  SHA512:
6
- metadata.gz: 514d0f917da953a9fec391f7f6461014310ba4d15aeac6538ef7d5a308f2550e75cddf417468de5e17b35848623afa6deff352c848285d0df832982088e554c4
7
- data.tar.gz: dfa5dd47cc3de5d14e437544af3169965d3c5fbc758ac1b52365c2f8d1220e7ced6f7487ccceb9ff1bc5f319e1ec7975656130c5b0a01c03fee9b4ea9c3ab676
6
+ metadata.gz: 520b7105368d998757a51606ae920dd19c26aecfed002889c4108b1daa52a00fb8d40dfad59f8c3e6130b73f1ed371316d5a6c74ba5e7598b353c67612d3f94e
7
+ data.tar.gz: d9dd0219d569e94069be492157f3bf01d3163b77a2ef86595df2086e7badd3ed7d464e0c4d9b3343b74b4780ecd27a60ad15b9b19b8348694e1ba6d92403ae15
data/README.md CHANGED
@@ -36,6 +36,7 @@ Aggcat.configure do |config|
36
36
  config.consumer_key = 'your consumer key'
37
37
  config.consumer_secret = 'your consumer secret'
38
38
  config.certificate_path = '/path/to/your/certificate/key'
39
+ config.verbose = false # verpose = true will output all raw XML API requests/responses to STDOUT
39
40
  # certificate could be provided as a string instead of a path to a file using certificate_value
40
41
  # certificate_value takes precedence over certificate_path
41
42
  # certificate_value should contain newline characters as appropriate
@@ -54,7 +54,7 @@ module Aggcat
54
54
  end
55
55
 
56
56
  def new_token(message)
57
- uri = URI.parse(SAML_URL)
57
+ uri = URI.parse(@oauth_url)
58
58
  http = Net::HTTP.new(uri.host, uri.port)
59
59
  request = Net::HTTP::Post.new(uri.request_uri)
60
60
  request['Authorization'] = %[OAuth oauth_consumer_key="#{@consumer_key}"]
@@ -77,7 +77,7 @@ module Aggcat
77
77
  signature_value = Base64.encode64(key.sign(OpenSSL::Digest::SHA1.new(nil), signed_info)).gsub(/\n/, '')
78
78
  signature = %[<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><ds:Reference URI="#_#{reference_id}"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>#{digest}</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>#{signature_value}</ds:SignatureValue></ds:Signature>]
79
79
  assertion_with_signature = assertion.sub(/saml2:Issuer\>\<saml2:Subject/, "saml2:Issuer>#{signature}<saml2:Subject")
80
- Base64.encode64(assertion_with_signature)
80
+ Base64.strict_encode64(assertion_with_signature)
81
81
  end
82
82
 
83
83
  def certificate
@@ -5,6 +5,8 @@ module Aggcat
5
5
 
6
6
  def initialize(options={})
7
7
  raise ArgumentError.new('customer_id is required for scoping all requests') if options[:customer_id].nil? || options[:customer_id].to_s.empty?
8
+ options[:oauth_url] ||= SAML_URL
9
+ options[:base_url] ||= BASE_URL
8
10
  options[:open_timeout] ||= OPEN_TIMEOUT
9
11
  options[:read_timeout] ||= READ_TIMEOUT
10
12
  options[:verbose] ||= false
@@ -115,7 +117,7 @@ module Aggcat
115
117
  def request(http_method, path, *options)
116
118
  tries = 0
117
119
  begin
118
- response = oauth_client.send(http_method, BASE_URL + path, *options)
120
+ response = oauth_client.send(http_method, @base_url + path, *options)
119
121
  result = {:status_code => response.code, :result => parse_xml(response.body)}
120
122
  if response['challengeSessionId']
121
123
  result[:challenge_session_id] = response['challengeSessionId']
@@ -200,5 +202,3 @@ module Aggcat
200
202
  end
201
203
  end
202
204
  end
203
-
204
-
@@ -1,7 +1,7 @@
1
1
  module Aggcat
2
2
  module Configurable
3
3
 
4
- KEYS = [:issuer_id, :consumer_key, :consumer_secret, :certificate_value, :certificate_password, :certificate_path, :customer_id, :open_timeout, :read_timeout, :verbose]
4
+ KEYS = [:oauth_url, :base_url, :issuer_id, :consumer_key, :consumer_secret, :certificate_value, :certificate_password, :certificate_path, :customer_id, :open_timeout, :read_timeout, :verbose]
5
5
 
6
6
  attr_writer *KEYS
7
7
 
@@ -1,3 +1,3 @@
1
1
  module Aggcat
2
- VERSION = '1.0.0'
2
+ VERSION = '1.0.1'
3
3
  end
@@ -1,8 +1,13 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class AggcatTest < Test::Unit::TestCase
4
+ OAUTH_URL = Aggcat::Base::SAML_URL
5
+ BASE_URL = Aggcat::Client::BASE_URL
6
+
4
7
  def setup
5
8
  Aggcat.configure do |config|
9
+ config.oauth_url = OAUTH_URL
10
+ config.base_url = BASE_URL
6
11
  config.issuer_id = 'issuer_id'
7
12
  config.consumer_key = 'consumer_key'
8
13
  config.consumer_secret = 'consumer_secret'
@@ -12,6 +17,8 @@ class AggcatTest < Test::Unit::TestCase
12
17
 
13
18
  def test_configure
14
19
  configurable = Aggcat.configure do |config|
20
+ config.oauth_url = OAUTH_URL
21
+ config.base_url = BASE_URL
15
22
  config.issuer_id = 'issuer_id'
16
23
  config.consumer_key = 'consumer_key'
17
24
  config.consumer_secret = 'consumer_secret'
@@ -19,6 +26,8 @@ class AggcatTest < Test::Unit::TestCase
19
26
  config.open_timeout = 5
20
27
  config.read_timeout = 30
21
28
  end
29
+ assert_equal OAUTH_URL, configurable.instance_variable_get(:'@oauth_url')
30
+ assert_equal BASE_URL, configurable.instance_variable_get(:'@base_url')
22
31
  assert_equal 'issuer_id', configurable.instance_variable_get(:'@issuer_id')
23
32
  assert_equal 'consumer_key', configurable.instance_variable_get(:'@consumer_key')
24
33
  assert_equal 'consumer_secret', configurable.instance_variable_get(:'@consumer_secret')
@@ -30,6 +39,8 @@ class AggcatTest < Test::Unit::TestCase
30
39
  def test_configure_certificate_by_value
31
40
  cert_value = File.read("#{fixture_path}/cert.key")
32
41
  configurable = Aggcat.configure do |config|
42
+ config.oauth_url = OAUTH_URL
43
+ config.base_url = BASE_URL
33
44
  config.issuer_id = 'issuer_id'
34
45
  config.consumer_key = 'consumer_key'
35
46
  config.consumer_secret = 'consumer_secret'
@@ -37,6 +48,8 @@ class AggcatTest < Test::Unit::TestCase
37
48
  config.open_timeout = 5
38
49
  config.read_timeout = 30
39
50
  end
51
+ assert_equal OAUTH_URL, configurable.instance_variable_get(:'@oauth_url')
52
+ assert_equal BASE_URL, configurable.instance_variable_get(:'@base_url')
40
53
  assert_equal 'issuer_id', configurable.instance_variable_get(:'@issuer_id')
41
54
  assert_equal 'consumer_key', configurable.instance_variable_get(:'@consumer_key')
42
55
  assert_equal 'consumer_secret', configurable.instance_variable_get(:'@consumer_secret')
@@ -48,12 +61,16 @@ class AggcatTest < Test::Unit::TestCase
48
61
  def test_configure_certificate_with_password
49
62
  cert_value = File.read("#{fixture_path}/cert.key")
50
63
  configurable = Aggcat.configure do |config|
64
+ config.oauth_url = OAUTH_URL
65
+ config.base_url = BASE_URL
51
66
  config.issuer_id = 'issuer_id'
52
67
  config.consumer_key = 'consumer_key'
53
68
  config.consumer_secret = 'consumer_secret'
54
69
  config.certificate_value = cert_value
55
70
  config.certificate_password = 'cert_password'
56
71
  end
72
+ assert_equal OAUTH_URL, configurable.instance_variable_get(:'@oauth_url')
73
+ assert_equal BASE_URL, configurable.instance_variable_get(:'@base_url')
57
74
  assert_equal 'issuer_id', configurable.instance_variable_get(:'@issuer_id')
58
75
  assert_equal 'consumer_key', configurable.instance_variable_get(:'@consumer_key')
59
76
  assert_equal 'consumer_secret', configurable.instance_variable_get(:'@consumer_secret')
@@ -64,6 +81,8 @@ class AggcatTest < Test::Unit::TestCase
64
81
  def test_scope
65
82
  client1 = Aggcat.scope('1')
66
83
  assert_true client1.is_a?(Aggcat::Client)
84
+ assert_equal OAUTH_URL, client1.instance_variable_get(:'@oauth_url')
85
+ assert_equal BASE_URL, client1.instance_variable_get(:'@base_url')
67
86
  assert_equal 'issuer_id', client1.instance_variable_get(:'@issuer_id')
68
87
  assert_equal 'consumer_key', client1.instance_variable_get(:'@consumer_key')
69
88
  assert_equal 'consumer_secret', client1.instance_variable_get(:'@consumer_secret')
@@ -83,7 +102,7 @@ class AggcatTest < Test::Unit::TestCase
83
102
  end
84
103
 
85
104
  def test_client_api
86
- stub_request(:post, Aggcat::Base::SAML_URL).to_return(:status => 200, :body => fixture('oauth_token.txt'))
105
+ stub_request(:post, OAUTH_URL).to_return(:status => 200, :body => fixture('oauth_token.txt'))
87
106
  Aggcat.scope('1')
88
107
  stub_get('/institutions').to_return(:body => fixture('institutions.xml'), :headers => {:content_type => 'application/xml; charset=utf-8'})
89
108
  response = Aggcat.institutions
@@ -1,8 +1,14 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class ClientTest < Test::Unit::TestCase
4
+ INTUIT_OAUTH_URL = Aggcat::Base::SAML_URL
5
+ INTUIT_BASE_URL = Aggcat::Client::BASE_URL
6
+
7
+ FINICITY_OAUTH_URL = 'https://api.finicity.com/oauth/v1/get_access_token_by_saml'
8
+ FINICITY_BASE_URL = 'https://api.finicity.com/financialdatafeed/v1'
9
+
4
10
  def setup
5
- stub_request(:post, Aggcat::Base::SAML_URL).to_return(:status => 200, :body => fixture('oauth_token.txt'))
11
+ stub_request(:post, INTUIT_OAUTH_URL).to_return(:status => 200, :body => fixture('oauth_token.txt'))
6
12
  @client = Aggcat::Client.new(
7
13
  {
8
14
  issuer_id: 'issuer_id',
@@ -12,20 +18,53 @@ class ClientTest < Test::Unit::TestCase
12
18
  customer_id: 'default'
13
19
  }
14
20
  )
21
+
22
+ stub_request(:post, FINICITY_OAUTH_URL).to_return(:status => 200, :body => fixture('oauth_token.txt'))
23
+ @finicity_client = Aggcat::Client.new(
24
+ {
25
+ oauth_url: FINICITY_OAUTH_URL,
26
+ base_url: FINICITY_BASE_URL,
27
+ issuer_id: 'issuer_id',
28
+ consumer_key: 'consumer_key',
29
+ consumer_secret: 'consumer_secret',
30
+ certificate_path: "#{fixture_path}/cert.key",
31
+ customer_id: 'default'
32
+ }
33
+ )
34
+ end
35
+
36
+ def test_intuit_arguments
37
+ assert_equal INTUIT_OAUTH_URL, @client.instance_variable_get(:'@oauth_url')
38
+ assert_equal INTUIT_BASE_URL, @client.instance_variable_get(:'@base_url')
39
+ check_arguments @client
40
+ end
41
+
42
+ def test_finicity_arguments
43
+ assert_equal FINICITY_OAUTH_URL, @finicity_client.instance_variable_get(:'@oauth_url')
44
+ assert_equal FINICITY_BASE_URL, @finicity_client.instance_variable_get(:'@base_url')
45
+ check_arguments @finicity_client
15
46
  end
16
47
 
17
- def test_arguments
18
- assert_equal 'issuer_id', @client.instance_variable_get(:'@issuer_id')
19
- assert_equal 'consumer_key', @client.instance_variable_get(:'@consumer_key')
20
- assert_equal 'consumer_secret', @client.instance_variable_get(:'@consumer_secret')
21
- assert_equal "#{fixture_path}/cert.key", @client.instance_variable_get(:'@certificate_path')
22
- assert_equal 'default', @client.instance_variable_get(:'@customer_id')
23
- assert_equal false, @client.instance_variable_get(:'@verbose')
48
+ def check_arguments(client)
49
+ assert_equal 'issuer_id', client.instance_variable_get(:'@issuer_id')
50
+ assert_equal 'consumer_key', client.instance_variable_get(:'@consumer_key')
51
+ assert_equal 'consumer_secret', client.instance_variable_get(:'@consumer_secret')
52
+ assert_equal "#{fixture_path}/cert.key", client.instance_variable_get(:'@certificate_path')
53
+ assert_equal 'default', client.instance_variable_get(:'@customer_id')
54
+ assert_equal false, client.instance_variable_get(:'@verbose')
24
55
  end
25
56
 
26
57
  def test_institutions
27
- stub_get('/institutions').to_return(:body => fixture('institutions.xml'), :headers => {:content_type => 'application/xml; charset=utf-8'})
28
- response = @client.institutions
58
+ check_institutions INTUIT_BASE_URL, @client
59
+ end
60
+
61
+ def test_finicity_institutions
62
+ check_institutions FINICITY_BASE_URL, @finicity_client
63
+ end
64
+
65
+ def check_institutions(base_url, client)
66
+ stub_request(:get, base_url + '/institutions').to_return(:body => fixture('institutions.xml'), :headers => {:content_type => 'application/xml; charset=utf-8'})
67
+ response = client.institutions
29
68
  assert_equal response[:result][:institutions][:institution][0][:institution_id].to_i, 100000
30
69
  end
31
70
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aggcat
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gene Drabkin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-20 00:00:00.000000000 Z
11
+ date: 2016-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oauth