maestrano 0.11.0 → 0.12.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 94146280a117fc153c4747915002c5697c060788
4
- data.tar.gz: 6ed575bd6107b474f198e8ca06dc05368d4486ff
3
+ metadata.gz: 6a4a440ceef4d8beb0f34cd2b0969c9547568120
4
+ data.tar.gz: 0386626517b5da4d14258d9a47aa9d9b7ce91ddb
5
5
  SHA512:
6
- metadata.gz: e3f33f2d0360c1afca5cdd73dd987156e773eb363db502f5f272f92c2736af38f0d143b26c49847edec71b034c69f4d9aa803acbba7645746b1cf3a6f11335e4
7
- data.tar.gz: a9d42f25ed6d85c22411cf58f5a2d2eba675c7bb1cfd6eda711675bbc659713503224b687607e3f98ffeb897638a0758d50359d01d5bccf503e766ff44c81f78
6
+ metadata.gz: 22a20f362b25e45debc2a744d2a9cc19c9511001bc771a9eca695527e8e2ee15dcd8ce4a2f3ae091da722e0904a16cbf17d5332b8fa48cc58a807135fb126aff
7
+ data.tar.gz: ddf8ad3e3b0f2b47606325c1b8a60c23c9a450f2e7f0d1d66f4a9897d3fa8ff04a498bc4841543442fbcd8b1839f9bfd38407567f2901dcba003eea259ca7ca4
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- maestrano (0.10.0)
4
+ maestrano (0.12.0)
5
5
  httparty (~> 0.13)
6
6
  json (~> 1.8)
7
7
  mime-types (~> 1.25)
@@ -12,10 +12,14 @@ PATH
12
12
  GEM
13
13
  remote: http://rubygems.org/
14
14
  specs:
15
- httparty (0.13.3)
15
+ domain_name (0.5.24)
16
+ unf (>= 0.0.5, < 1.0.0)
17
+ http-cookie (1.0.2)
18
+ domain_name (~> 0.5)
19
+ httparty (0.13.5)
16
20
  json (~> 1.8)
17
21
  multi_xml (>= 0.5.2)
18
- json (1.8.2)
22
+ json (1.8.3)
19
23
  macaddr (1.7.1)
20
24
  systemu (~> 2.6.2)
21
25
  metaclass (0.0.4)
@@ -24,21 +28,26 @@ GEM
24
28
  mocha (0.13.3)
25
29
  metaclass (~> 0.0.1)
26
30
  multi_xml (0.5.5)
27
- netrc (0.10.2)
28
- nokogiri (1.6.5)
31
+ netrc (0.10.3)
32
+ nokogiri (1.6.6.2)
29
33
  mini_portile (~> 0.6.0)
30
34
  rake (10.3.2)
31
- rest-client (1.7.2)
35
+ rest-client (1.8.0)
36
+ http-cookie (>= 1.0.2, < 2.0)
32
37
  mime-types (>= 1.16, < 3.0)
33
38
  netrc (~> 0.7)
34
39
  shoulda (2.11.3)
35
- systemu (2.6.4)
40
+ systemu (2.6.5)
36
41
  test-unit (2.5.5)
37
42
  timecop (0.6.0)
38
- uuid (2.3.7)
43
+ unf (0.1.4)
44
+ unf_ext
45
+ unf_ext (0.0.7.1)
46
+ uuid (2.3.8)
39
47
  macaddr (~> 1.0)
40
48
 
41
49
  PLATFORMS
50
+ java
42
51
  ruby
43
52
 
44
53
  DEPENDENCIES
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Maestrano Pty. Ltd.
1
+ Copyright (c) 2015 Maestrano Pty. Ltd.
2
2
 
3
3
  The MIT License (MIT)
4
4
 
data/README.md CHANGED
@@ -68,6 +68,12 @@ gem 'maestrano'
68
68
  ### Configuration
69
69
  Once installed the first step is to create an initializer to configure the behaviour of the Maestrano gem - including setting your API key.
70
70
 
71
+ You can add configuration presets by putting additional configuration blocks in your maestrano.rb initializer. These additional presets can then be specified when doing particular action, such as initializing a Connec!™ client or triggering a SSO handshake. These presets are particularly useful if you are dealing with multiple Maestrano-style marketplaces (multi-enterprise integration).
72
+
73
+ If this is the first time you integrate with Maestrano, we recommend adopting a multi-tenant approach. All code samples in this documentation provide examples on how to handle multi-tenancy by scoping method calls to a specific configuration preset.
74
+
75
+ More information about multi-tenant integration can be found on [Our Multi-Tenant Integration Guide](https://maestrano.atlassian.net/wiki/display/CONNECAPIV2/Multi-Tenant+Integration)
76
+
71
77
  The initializer should look like this:
72
78
  ```ruby
73
79
  # Use this block to configure the behaviour of Maestrano
@@ -204,18 +210,52 @@ Maestrano.configure do |config|
204
210
  # notified upon creation/update in Connec!™
205
211
  #
206
212
  # config.webhook.connec.subscriptions = {
207
- # accounts: false,
208
- # company: false,
209
- # invoices: false,
210
- # items: false,
211
- # organizations: false,
212
- # people: false,
213
- # tax_codes: false,
214
- # tax_rates: false
213
+ # accounts: true,
214
+ # company: true,
215
+ # employees: false,
216
+ # events: false,
217
+ # event_orders: false,
218
+ # invoices: true,
219
+ # items: true,
220
+ # journals: false,
221
+ # opportunities: true,
222
+ # organizations: true,
223
+ # payments: false,
224
+ # pay_items: false,
225
+ # pay_schedules: false,
226
+ # pay_stubs: false,
227
+ # pay_runs: false,
228
+ # people: true,
229
+ # projects: false,
230
+ # purchase_orders: false,
231
+ # quotes: false,
232
+ # sales_orders: false,
233
+ # tax_codes: true,
234
+ # tax_rates: false,
235
+ # time_activities: false,
236
+ # time_sheets: false,
237
+ # venues: false,
238
+ # warehouses: false,
239
+ # work_locations: false
215
240
  # }
216
241
  end
217
242
  ```
218
243
 
244
+ If you need to support multiple marketplace providers, you can define configuration presets and switch between these at runtime:
245
+ ```ruby
246
+ Maestrano['my-preset1'].configure do |config|
247
+ config.environment = 'production'
248
+ config.app.host = 'https://my-custom-provider1.com'
249
+ ...
250
+ end
251
+
252
+ Maestrano['my-preset2'].configure do |config|
253
+ config.environment = 'production'
254
+ config.app.host = 'https://my-custom-provider2.com'
255
+ ...
256
+ end
257
+ ```
258
+
219
259
  ### Metadata Endpoint
220
260
  Your configuration initializer is now all setup and shiny. Great! But need to know about it. Of course
221
261
  we could propose a long and boring form on maestrano.com for you to fill all these details (especially the webhooks) but we thought it would be more convenient to fetch that automatically.
@@ -235,6 +275,8 @@ class MaestranoMetaDataController < ApplicationController
235
275
 
236
276
  def metadata
237
277
  render json: Maestrano.to_metadata
278
+ # Or using presets
279
+ # render json: Maestrano['my-preset'].to_metadata
238
280
  end
239
281
 
240
282
  private
@@ -252,6 +294,9 @@ end
252
294
  ```
253
295
 
254
296
  ## Single Sign-On Setup
297
+
298
+ > **Heads up!** Prefer to use OpenID rather than our SAML implementation? Just look at our [OpenID Guide](https://maestrano.atlassian.net/wiki/display/CONNECAPIV2/SSO+via+OpenID) to get started!
299
+
255
300
  In order to get setup with single sign-on you will need a user model and a group model. It will also require you to write a controller for the init phase and consume phase of the single sign-on handshake.
256
301
 
257
302
  You might wonder why we need a 'group' on top of a user. Well Maestrano works with businesses and as such expects your service to be able to manage groups of users. A group represents 1) a billing entity 2) a collaboration group. During the first single sign-on handshake both a user and a group should be created. Additional users logging in via the same group should then be added to this existing group (see controller setup below)
@@ -342,7 +387,7 @@ Your controller will need to have two actions: init and consume. The init action
342
387
  The init action is all handled via Maestrano methods and should look like this:
343
388
  ```ruby
344
389
  def init
345
- redirect_to Maestrano::Saml::Request.new(params,session).redirect_url
390
+ redirect_to Maestrano::Saml::Request['my-preset'].new(params,session).redirect_url
346
391
  end
347
392
  ```
348
393
  The params variable should contain the GET parameters of the request. The session variable should be the actual client session.
@@ -351,7 +396,7 @@ Based on your application requirements the consume action might look like this:
351
396
  ```ruby
352
397
  def consume
353
398
  # Process the response and extract information
354
- saml_response = Maestrano::Saml::Response.new(params[:SAMLResponse])
399
+ saml_response = Maestrano::Saml::Response['my-preset'].new(params[:SAMLResponse])
355
400
  user_hash = Maestrano::SSO::BaseUser.new(saml_response).to_hash
356
401
  group_hash = Maestrano::SSO::BaseGroup.new(saml_response).to_hash
357
402
  membership_hash = Maestrano::SSO::BaseMembership.new(saml_response).to_hash
@@ -383,9 +428,9 @@ If you want your users to benefit from single logout then you should define the
383
428
 
384
429
  ```ruby
385
430
  def verify_maestrano_session
386
- if Maestrano.param(:sso_enabled)
387
- if session && session[:maestrano] && !Maestrano::SSO::Session.new(session).valid?
388
- redirect_to Maestrano::SSO.init_url
431
+ if Maestrano['my-preset'].param(:sso_enabled)
432
+ if session && session[:maestrano] && !Maestrano::SSO['my-preset']::Session.new(session).valid?
433
+ redirect_to Maestrano::SSO['my-preset'].init_url
389
434
  end
390
435
  end
391
436
  true
@@ -658,6 +703,14 @@ bill = Maestrano::Account::Bill.retrieve("bill-f1d2s54")
658
703
  bill.cancel
659
704
  ```
660
705
 
706
+ ##### Using presets
707
+
708
+ All actions can be performed with presets, for instance to list all bills with presets
709
+ ```ruby
710
+ bills = Maestrano::Account::Bill['my-preset'].all
711
+ bills.each { |b| puts b.id }
712
+ ```
713
+
661
714
  #### Recurring Bill
662
715
  A recurring bill charges a given customer at a regular interval without you having to do anything.
663
716
 
@@ -822,6 +875,13 @@ rec_bill = Maestrano::Account::RecurringBill.retrieve("rbill-f1d2s54")
822
875
  rec_bill.cancel
823
876
  ```
824
877
 
878
+ ##### Using presets
879
+
880
+ All actions can be performed with presets, for instance to list all recurring bills with presets
881
+ ```ruby
882
+ rec_bills = Maestrano::Account::RecurringBill['my-preset'].all
883
+ rec_bills.each { |b| puts b.id }
884
+ ```
825
885
 
826
886
  ### Membership API
827
887
 
@@ -930,6 +990,13 @@ Access a single user by id
930
990
  user = Maestrano::Account::User.retrieve("usr-f1d2s54");
931
991
  ```
932
992
 
993
+ ##### Using presets
994
+
995
+ All actions can be performed with presets, for instance to list all users with presets
996
+ ```ruby
997
+ users = Maestrano::Account::User['my-preset'].all
998
+ ```
999
+
933
1000
  #### Group
934
1001
  A group represents a customer account and is composed of members (users) having access to your application. A group also represents a chargeable account (see Bill/RecurringBill). Typically you can remotely check if a group has entered a credit card on Maestrano.
935
1002
 
@@ -1065,6 +1132,12 @@ Access a single group by id
1065
1132
  group = Maestrano::Account::Group.retrieve("usr-f1d2s54");
1066
1133
  ```
1067
1134
 
1135
+ ##### Using presets
1136
+
1137
+ All actions can be performed with presets, for instance to list all groups with presets
1138
+ ```ruby
1139
+ groups = Maestrano::Account::Group['my-preset'].all
1140
+ ```
1068
1141
 
1069
1142
  ## Connec!™ Data Sharing
1070
1143
  Maestrano offers the capability to share actual business data between applications via its data sharing platform Connec!™.
@@ -1096,6 +1169,10 @@ client.post('/organizations', { organizations: { name: "DoeCorp Inc."} })
1096
1169
 
1097
1170
  # Update an organization
1098
1171
  client.put('/organizations/e32303c1-5102-0132-661e-600308937d74', { organizations: { is_customer: true} })
1172
+
1173
+ # With presets
1174
+ client_presets = Maestrano::Connec::Client['my-preset'].new("cld-f7f5g4")
1175
+ client_presets.get('/organizations')
1099
1176
  ```
1100
1177
 
1101
1178
 
@@ -1127,6 +1204,6 @@ So if you have any question or need help integrating with us just let us know at
1127
1204
 
1128
1205
  ## License
1129
1206
 
1130
- MIT License. Copyright 2014 Maestrano Pty Ltd. https://maestrano.com
1207
+ MIT License. Copyright 2015 Maestrano Pty Ltd. https://maestrano.com
1131
1208
 
1132
1209
  You are not granted rights or licenses to the trademarks of Maestrano.
@@ -5,7 +5,7 @@ module Maestrano
5
5
  include Maestrano::API::Operation::Create
6
6
 
7
7
  def cancel
8
- response, api_token = Maestrano::API::Operation::Base.request(:delete, url, @api_token)
8
+ response, api_token = Maestrano::API::Operation::Base[self.class.preset].request(:delete, url, @api_token)
9
9
  refresh_from(response, api_token)
10
10
  self
11
11
  end
@@ -5,7 +5,7 @@ module Maestrano
5
5
  include Maestrano::API::Operation::Create
6
6
 
7
7
  def cancel
8
- response, api_token = Maestrano::API::Operation::Base.request(:delete, url, @api_token)
8
+ response, api_token = Maestrano::API::Operation::Base[self.class.preset].request(:delete, url, @api_token)
9
9
  refresh_from(response, api_token)
10
10
  self
11
11
  end
@@ -1,6 +1,7 @@
1
1
  module Maestrano
2
2
  module API
3
3
  class Object
4
+ include Preset
4
5
  include Enumerable
5
6
 
6
7
  attr_accessor :api_token
@@ -2,17 +2,15 @@ module Maestrano
2
2
  module API
3
3
  module Operation
4
4
  module Base
5
- # class << self
6
- # attr_accessor :api_token, :api_base, :verify_ssl_certs, :api_version
7
- # end
8
-
5
+ include Preset
6
+
9
7
  def self.api_url(url='')
10
- Maestrano.param('api.host') + Maestrano.param('api.base') + url
8
+ Maestrano[self.preset].param('api.host') + Maestrano[self.preset].param('api.base') + url
11
9
  end
12
10
 
13
11
  # Perform remote request
14
12
  def self.request(method, url, api_token, params={}, headers={})
15
- unless api_token ||= Maestrano.param('api_token')
13
+ unless api_token ||= Maestrano[self.preset].param('api_token')
16
14
  raise Maestrano::API::Error::AuthenticationError.new('No API key provided.')
17
15
  end
18
16
 
@@ -21,7 +19,7 @@ module Maestrano
21
19
  if self.ssl_preflight_passed?
22
20
  request_opts.update(
23
21
  verify_ssl: OpenSSL::SSL::VERIFY_PEER,
24
- ssl_ca_file: Maestrano.param('ssl_bundle_path')
22
+ ssl_ca_file: Maestrano[self.preset].param('ssl_bundle_path')
25
23
  )
26
24
  end
27
25
 
@@ -69,13 +67,13 @@ module Maestrano
69
67
  private
70
68
 
71
69
  def self.ssl_preflight_passed?
72
- if !Maestrano.param('api.verify_ssl_certs')
70
+ if !Maestrano[self.preset].param('api.verify_ssl_certs')
73
71
  #$stderr.puts "WARNING: Running without SSL cert verification. " +
74
72
  # "Execute 'Maestrano.configure { |config| config.verify_ssl_certs = true' } to enable verification."
75
73
  return false
76
- elsif !Util.file_readable(Maestrano.param('ssl_bundle_path'))
74
+ elsif !Util.file_readable(Maestrano[self.preset].param('ssl_bundle_path'))
77
75
  $stderr.puts "WARNING: Running without SSL cert verification " +
78
- "because #{Maestrano.param('ssl_bundle_path')} isn't readable"
76
+ "because #{Maestrano[self.preset].param('ssl_bundle_path')} isn't readable"
79
77
 
80
78
  return false
81
79
  end
@@ -87,9 +85,9 @@ module Maestrano
87
85
  @uname ||= get_uname
88
86
 
89
87
  {
90
- :bindings_version => Maestrano.param('api.version'),
91
- :lang => Maestrano.param('api.lang'),
92
- :lang_version => Maestrano.param('api.lang_version'),
88
+ :bindings_version => Maestrano[self.preset].param('api.version'),
89
+ :lang => Maestrano[self.preset].param('api.lang'),
90
+ :lang_version => Maestrano[self.preset].param('api.lang_version'),
93
91
  :platform => RUBY_PLATFORM,
94
92
  :publisher => 'maestrano',
95
93
  :uname => @uname
@@ -110,12 +108,12 @@ module Maestrano
110
108
 
111
109
  def self.request_headers(api_token)
112
110
  headers = {
113
- :user_agent => "Maestrano/v1 RubyBindings/#{Maestrano.param('api.version')}",
111
+ :user_agent => "Maestrano/v1 RubyBindings/#{Maestrano[self.preset].param('api.version')}",
114
112
  :authorization => "Basic #{Base64.strict_encode64(api_token)}",
115
113
  :content_type => 'application/x-www-form-urlencoded'
116
114
  }
117
115
 
118
- api_version = Maestrano.param('api_version')
116
+ api_version = Maestrano[self.preset].param('api_version')
119
117
  headers[:maestrano_version] = api_version if api_version
120
118
 
121
119
  begin
@@ -4,7 +4,7 @@ module Maestrano
4
4
  module Create
5
5
  module ClassMethods
6
6
  def create(params={}, api_token=nil)
7
- response, api_token = Maestrano::API::Operation::Base.request(:post, self.url, api_token, params)
7
+ response, api_token = Maestrano::API::Operation::Base[self.preset].request(:post, self.url, api_token, params)
8
8
  Util.convert_to_maestrano_object(response, api_token)
9
9
  end
10
10
  end
@@ -3,7 +3,7 @@ module Maestrano
3
3
  module Operation
4
4
  module Delete
5
5
  def delete(params = {})
6
- response, api_token = Maestrano::API::Operation::Base.request(:delete, url, @api_token, params)
6
+ response, api_token = Maestrano::API::Operation::Base[self.class.preset].request(:delete, url, @api_token, params)
7
7
  refresh_from(response, api_token)
8
8
  self
9
9
  end
@@ -4,7 +4,7 @@ module Maestrano
4
4
  module List
5
5
  module ClassMethods
6
6
  def all(filters={}, api_token=nil)
7
- response, api_token = Maestrano::API::Operation::Base.request(:get, url, api_token, filters)
7
+ response, api_token = Maestrano::API::Operation::Base[self.preset].request(:get, url, api_token, filters)
8
8
  Util.convert_to_maestrano_object(response, api_token)
9
9
  end
10
10
  end
@@ -12,7 +12,7 @@ module Maestrano
12
12
  if values.length > 0
13
13
  values.delete(:id)
14
14
 
15
- response, api_token = Maestrano::API::Operation::Base.request(:put, url, @api_token, values)
15
+ response, api_token = Maestrano::API::Operation::Base[self.class.preset].request(:put, url, @api_token, values)
16
16
  refresh_from(response, api_token)
17
17
  end
18
18
  self
@@ -2,8 +2,8 @@ require 'httparty'
2
2
 
3
3
  module Maestrano
4
4
  module Connec
5
-
6
5
  class Client
6
+ include Preset
7
7
  include ::HTTParty
8
8
  headers 'Accept' => 'application/vnd.api+json'
9
9
  headers 'Content-Type' => 'application/vnd.api+json'
@@ -13,7 +13,7 @@ module Maestrano
13
13
 
14
14
  def initialize(group_id)
15
15
  @group_id = group_id
16
- self.class.base_uri("#{Maestrano.param('connec.host')}#{Maestrano.param('connec.base_path')}")
16
+ self.class.base_uri("#{Maestrano[self.class.preset].param('connec.host')}#{Maestrano[self.class.preset].param('connec.base_path')}")
17
17
  end
18
18
 
19
19
  # Return the default options which includes
@@ -21,9 +21,10 @@ module Maestrano
21
21
  def default_options
22
22
  {
23
23
  basic_auth: {
24
- username: Maestrano.param('api.id'),
25
- password: Maestrano.param('api.key')
26
- }
24
+ username: Maestrano[self.class.preset].param('api.id'),
25
+ password: Maestrano[self.class.preset].param('api.key')
26
+ },
27
+ timeout: Maestrano[self.class.preset].param('connec.timeout')
27
28
  }
28
29
  end
29
30
 
@@ -0,0 +1,23 @@
1
+ # When included, this module allows another module to be called setting a default preset
2
+ #
3
+ # Examples:
4
+ # Maestrano::Settings.new # Uses 'default' preset
5
+ # Maestrano['mypreset']::Settings.new # Uses 'mypreset'
6
+ module Maestrano
7
+ module Preset
8
+ def self.included(base)
9
+ base.extend ClassMethods
10
+ end
11
+
12
+ module ClassMethods
13
+ def [](preset)
14
+ define_singleton_method(:preset) { preset }
15
+ self
16
+ end
17
+
18
+ def preset
19
+ 'default'
20
+ end
21
+ end
22
+ end
23
+ end
@@ -7,12 +7,13 @@ require "rexml/xpath"
7
7
 
8
8
  module Maestrano
9
9
  module Saml
10
- include REXML
10
+ include REXML
11
11
  class Request
12
+ include Preset
12
13
  attr_accessor :settings, :params, :session
13
-
14
+
14
15
  def initialize(params = {}, session = {})
15
- self.settings = Maestrano::SSO.saml_settings
16
+ self.settings = Maestrano::SSO[self.class.preset].saml_settings
16
17
  self.params = params
17
18
  self.session = session
18
19
  end
@@ -4,8 +4,9 @@ require "nokogiri"
4
4
  # Only supports SAML 2.0
5
5
  module Maestrano
6
6
  module Saml
7
-
8
7
  class Response
8
+ include Preset
9
+
9
10
  ASSERTION = "urn:oasis:names:tc:SAML:2.0:assertion"
10
11
  PROTOCOL = "urn:oasis:names:tc:SAML:2.0:protocol"
11
12
  DSIG = "http://www.w3.org/2000/09/xmldsig#"
@@ -22,7 +23,7 @@ module Maestrano
22
23
  @options = options
23
24
  @response = (response =~ /^</) ? response : Base64.decode64(response)
24
25
  @document = Maestrano::XMLSecurity::SignedDocument.new(@response)
25
- @settings = Maestrano::SSO.saml_settings
26
+ @settings = Maestrano::SSO[self.class.preset].saml_settings
26
27
  end
27
28
 
28
29
  def is_valid?
@@ -1,6 +1,7 @@
1
1
  module Maestrano
2
2
  module SSO
3
3
  class BaseUser
4
+ include Preset
4
5
  attr_accessor :local_id
5
6
  attr_reader :sso_session,:sso_session_recheck,
6
7
  :group_uid,:group_role,:uid,:virtual_uid,:email,
@@ -26,7 +27,7 @@ module Maestrano
26
27
  end
27
28
 
28
29
  def to_uid
29
- if Maestrano.param('sso.creation_mode') == 'real'
30
+ if Maestrano[self.class.preset].param('sso.creation_mode') == 'real'
30
31
  return self.uid
31
32
  else
32
33
  return self.virtual_uid
@@ -34,7 +35,7 @@ module Maestrano
34
35
  end
35
36
 
36
37
  def to_email
37
- if Maestrano.param('sso.creation_mode') == 'real'
38
+ if Maestrano[self.class.preset].param('sso.creation_mode') == 'real'
38
39
  return self.email
39
40
  else
40
41
  return self.virtual_email
@@ -1,6 +1,7 @@
1
1
  module Maestrano
2
2
  module SSO
3
3
  class Session
4
+ include Preset
4
5
  attr_accessor :session, :uid, :session_token, :recheck, :group_uid
5
6
 
6
7
  # Load a Maestrano::SSO::Session object from a
@@ -49,7 +50,7 @@ module Maestrano
49
50
  # false otherwise
50
51
  def perform_remote_check
51
52
  # Get remote session info
52
- url = Maestrano::SSO.session_check_url(self.uid, self.session_token)
53
+ url = Maestrano::SSO[self.class.preset].session_check_url(self.uid, self.session_token)
53
54
  begin
54
55
  response = RestClient.get(url)
55
56
  response = JSON.parse(response)
@@ -78,7 +79,7 @@ module Maestrano
78
79
  # a session should be restricted to maestrano users only
79
80
  # within an application
80
81
  def valid?(opts = {})
81
- return true unless Maestrano.param('sso.slo_enabled')
82
+ return true unless Maestrano[self.class.preset].param('sso.slo_enabled')
82
83
  return true if opts[:if_session] && (!self.session || (!self.session[:maestrano] && !self.session['maestrano']))
83
84
  return false unless self.session
84
85
 
data/lib/maestrano/sso.rb CHANGED
@@ -1,66 +1,67 @@
1
1
  module Maestrano
2
2
  module SSO
3
+ include Preset
3
4
 
4
5
  # Return the saml_settings based on
5
6
  # Maestrano configuration
6
7
  def self.saml_settings
7
8
  settings = Maestrano::Saml::Settings.new
8
9
  settings.assertion_consumer_service_url = self.consume_url
9
- settings.issuer = Maestrano.param('api.id')
10
+ settings.issuer = Maestrano[preset].param('api.id')
10
11
  settings.idp_sso_target_url = self.idp_url
11
- settings.idp_cert_fingerprint = Maestrano.param('sso_x509_fingerprint')
12
- settings.name_identifier_format = Maestrano.param('sso_name_id_format')
12
+ settings.idp_cert_fingerprint = Maestrano[preset].param('sso_x509_fingerprint')
13
+ settings.name_identifier_format = Maestrano[preset].param('sso_name_id_format')
13
14
  settings
14
15
  end
15
16
 
16
17
  # Build a new SAML Request
17
18
  def self.build_request(get_params = {})
18
- Maestrano::Saml::Request.new(get_params)
19
+ Maestrano::Saml::Request[preset].new(get_params)
19
20
  end
20
21
 
21
22
  # Build a new SAML response
22
23
  def self.build_response(saml_post_param)
23
- Maestrano::Saml::Response.new(saml_post_param)
24
+ Maestrano::Saml::Response[preset].new(saml_post_param)
24
25
  end
25
26
 
26
27
  def self.enabled?
27
- !!Maestrano.param('sso.enabled')
28
+ !!Maestrano[preset].param('sso.enabled')
28
29
  end
29
30
 
30
31
  def self.init_url
31
- host = Maestrano.param('sso.idm')
32
- path = Maestrano.param('sso.init_path')
32
+ host = Maestrano[preset].param('sso.idm')
33
+ path = Maestrano[preset].param('sso.init_path')
33
34
  return "#{host}#{path}"
34
35
  end
35
36
 
36
37
  def self.consume_url
37
- host = Maestrano.param('sso.idm')
38
- path = Maestrano.param('sso.consume_path')
38
+ host = Maestrano[preset].param('sso.idm')
39
+ path = Maestrano[preset].param('sso.consume_path')
39
40
  return "#{host}#{path}"
40
41
  end
41
42
 
42
43
  def self.logout_url
43
- host = Maestrano.param('api_host')
44
+ host = Maestrano[preset].param('api_host')
44
45
  path = '/app_logout'
45
46
  return "#{host}#{path}"
46
47
  end
47
48
 
48
49
  def self.unauthorized_url
49
- host = Maestrano.param('api_host')
50
+ host = Maestrano[preset].param('api_host')
50
51
  path = '/app_access_unauthorized'
51
52
  return "#{host}#{path}";
52
53
  end
53
54
 
54
55
  def self.idp_url
55
- host = Maestrano.param('api_host')
56
- api_base = Maestrano.param('api_base')
56
+ host = Maestrano[preset].param('api_host')
57
+ api_base = Maestrano[preset].param('api_base')
57
58
  endpoint = 'auth/saml'
58
59
  return "#{host}#{api_base}#{endpoint}"
59
60
  end
60
61
 
61
62
  def self.session_check_url(user_uid,sso_session)
62
- host = Maestrano.param('api_host')
63
- api_base = Maestrano.param('api_base')
63
+ host = Maestrano[preset].param('api_host')
64
+ api_base = Maestrano[preset].param('api_base')
64
65
  endpoint = 'auth/saml'
65
66
  return URI.escape("#{host}#{api_base}#{endpoint}/#{user_uid}?session=#{sso_session}")
66
67
  end
@@ -69,7 +70,7 @@ module Maestrano
69
70
  # Takes the BaseUser hash representation and current session
70
71
  # in arguments
71
72
  def self.set_session(session, auth)
72
- Maestrano::SSO::Session.from_user_auth_hash(session,auth).save
73
+ Maestrano::SSO::Session[preset].from_user_auth_hash(session,auth).save
73
74
  end
74
75
 
75
76
  # Destroy the maestrano session in http session
@@ -1,3 +1,3 @@
1
1
  module Maestrano
2
- VERSION = '0.11.0'
2
+ VERSION = '0.12.0'
3
3
  end