Class: Maestrano::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/maestrano.rb

Constant Summary collapse

EVT_CONFIG =
{
  'test' => {
    'api.host'             => 'http://api-sandbox.maestrano.io',
    'api.base'             => '/api/v1/',
    'sso.idp'              => 'https://maestrano.com',
    'sso.name_id_format'   => Maestrano::Saml::Settings::NAMEID_PERSISTENT,
    'sso.x509_fingerprint' => '01:06:15:89:25:7d:78:12:28:a6:69:c7:de:63:ed:74:21:f9:f5:36',
    'sso.x509_certificate' => "-----BEGIN CERTIFICATE-----\nMIIDezCCAuSgAwIBAgIJAOehBr+YIrhjMA0GCSqGSIb3DQEBBQUAMIGGMQswCQYD\nVQQGEwJBVTEMMAoGA1UECBMDTlNXMQ8wDQYDVQQHEwZTeWRuZXkxGjAYBgNVBAoT\nEU1hZXN0cmFubyBQdHkgTHRkMRYwFAYDVQQDEw1tYWVzdHJhbm8uY29tMSQwIgYJ\nKoZIhvcNAQkBFhVzdXBwb3J0QG1hZXN0cmFuby5jb20wHhcNMTQwMTA0MDUyMjM5\nWhcNMzMxMjMwMDUyMjM5WjCBhjELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA05TVzEP\nMA0GA1UEBxMGU3lkbmV5MRowGAYDVQQKExFNYWVzdHJhbm8gUHR5IEx0ZDEWMBQG\nA1UEAxMNbWFlc3RyYW5vLmNvbTEkMCIGCSqGSIb3DQEJARYVc3VwcG9ydEBtYWVz\ndHJhbm8uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDVkIqo5t5Paflu\nP2zbSbzxn29n6HxKnTcsubycLBEs0jkTkdG7seF1LPqnXl8jFM9NGPiBFkiaR15I\n5w482IW6mC7s8T2CbZEL3qqQEAzztEPnxQg0twswyIZWNyuHYzf9fw0AnohBhGu2\n28EZWaezzT2F333FOVGSsTn1+u6tFwIDAQABo4HuMIHrMB0GA1UdDgQWBBSvrNxo\neHDm9nhKnkdpe0lZjYD1GzCBuwYDVR0jBIGzMIGwgBSvrNxoeHDm9nhKnkdpe0lZ\njYD1G6GBjKSBiTCBhjELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA05TVzEPMA0GA1UE\nBxMGU3lkbmV5MRowGAYDVQQKExFNYWVzdHJhbm8gUHR5IEx0ZDEWMBQGA1UEAxMN\nbWFlc3RyYW5vLmNvbTEkMCIGCSqGSIb3DQEJARYVc3VwcG9ydEBtYWVzdHJhbm8u\nY29tggkA56EGv5giuGMwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCc\nMPgV0CpumKRMulOeZwdpnyLQI/NTr3VVHhDDxxCzcB0zlZ2xyDACGnIG2cQJJxfc\n2GcsFnb0BMw48K6TEhAaV92Q7bt1/TYRvprvhxUNMX2N8PHaYELFG2nWfQ4vqxES\nRkjkjqy+H7vir/MOF3rlFjiv5twAbDKYHXDT7v1YCg==\n-----END CERTIFICATE-----",
    'connec.host'          => 'http://api-sandbox.maestrano.io',
    'connec.base_path'     => '/connec/api/v2'
  },
  'production' => {
    'api.host'             => 'https://maestrano.com',
    'api.base'             => '/api/v1/',
    'sso.idp'              => 'https://maestrano.com',
    'sso.name_id_format'   => Maestrano::Saml::Settings::NAMEID_PERSISTENT,
    'sso.x509_fingerprint' => '2f:57:71:e4:40:19:57:37:a6:2c:f0:c5:82:52:2f:2e:41:b7:9d:7e',
    'sso.x509_certificate' => "-----BEGIN CERTIFICATE-----\nMIIDezCCAuSgAwIBAgIJAPFpcH2rW0pyMA0GCSqGSIb3DQEBBQUAMIGGMQswCQYD\nVQQGEwJBVTEMMAoGA1UECBMDTlNXMQ8wDQYDVQQHEwZTeWRuZXkxGjAYBgNVBAoT\nEU1hZXN0cmFubyBQdHkgTHRkMRYwFAYDVQQDEw1tYWVzdHJhbm8uY29tMSQwIgYJ\nKoZIhvcNAQkBFhVzdXBwb3J0QG1hZXN0cmFuby5jb20wHhcNMTQwMTA0MDUyNDEw\nWhcNMzMxMjMwMDUyNDEwWjCBhjELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA05TVzEP\nMA0GA1UEBxMGU3lkbmV5MRowGAYDVQQKExFNYWVzdHJhbm8gUHR5IEx0ZDEWMBQG\nA1UEAxMNbWFlc3RyYW5vLmNvbTEkMCIGCSqGSIb3DQEJARYVc3VwcG9ydEBtYWVz\ndHJhbm8uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD3feNNn2xfEz5/\nQvkBIu2keh9NNhobpre8U4r1qC7h7OeInTldmxGL4cLHw4ZAqKbJVrlFWqNevM5V\nZBkDe4mjuVkK6rYK1ZK7eVk59BicRksVKRmdhXbANk/C5sESUsQv1wLZyrF5Iq8m\na9Oy4oYrIsEF2uHzCouTKM5n+O4DkwIDAQABo4HuMIHrMB0GA1UdDgQWBBSd/X0L\n/Pq+ZkHvItMtLnxMCAMdhjCBuwYDVR0jBIGzMIGwgBSd/X0L/Pq+ZkHvItMtLnxM\nCAMdhqGBjKSBiTCBhjELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA05TVzEPMA0GA1UE\nBxMGU3lkbmV5MRowGAYDVQQKExFNYWVzdHJhbm8gUHR5IEx0ZDEWMBQGA1UEAxMN\nbWFlc3RyYW5vLmNvbTEkMCIGCSqGSIb3DQEJARYVc3VwcG9ydEBtYWVzdHJhbm8u\nY29tggkA8WlwfatbSnIwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQDE\nhe/18oRh8EqIhOl0bPk6BG49AkjhZZezrRJkCFp4dZxaBjwZTddwo8O5KHwkFGdy\nyLiPV326dtvXoKa9RFJvoJiSTQLEn5mO1NzWYnBMLtrDWojOe6Ltvn3x0HVo/iHh\nJShjAn6ZYX43Tjl1YXDd1H9O+7/VgEWAQQ32v8p5lA==\n-----END CERTIFICATE-----",
    'connec.host'          => 'https://api-connec.maestrano.com',
    'connec.base_path'     => '/api/v2'
  }
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# File 'lib/maestrano.rb', line 154

def initialize
  @environment = 'test'
  
  # App config
  @app = OpenStruct.new({
    host: 'http://localhost:3000'
  })
  
  # API Config
  @api = OpenStruct.new({
    id: nil,
    key: nil,
    token: nil,
    version: nil,
    verify_ssl_certs: false,
    lang: nil, #set in post_initialize
    lang_version: nil #set in post_initialize
  })
  
  # SSO Config
  @sso = OpenStruct.new({
    enabled: true,
    slo_enabled: true,
    creation_mode: 'real',
    init_path: '/maestrano/auth/saml/init',
    consume_path: '/maestrano/auth/saml/consume',
    idm: nil
  })
  
  # WebHooks Config
  @webhook = OpenStruct.new({
    account: OpenStruct.new({
      groups_path: '/maestrano/account/groups/:id',
      group_users_path: '/maestrano/account/groups/:group_id/users/:id',
    }),
    connec: OpenStruct.new({
      notifications_path: '/maestrano/connec/notifications',
      subscriptions: {}
    })
  })
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(meth, *args, &block) ⇒ Object

Handle legacy parameter assignment



232
233
234
235
236
237
238
239
240
241
242
# File 'lib/maestrano.rb', line 232

def method_missing(meth, *args, &block)
  if meth.to_s =~ /^((?:sso|app|api|user)_.*)=$/
    new_meth = self.legacy_param_to_new($1) + '='
    props = new_meth.split('.')
    last_prop = props.pop
    obj = props.inject(self,:send)
    obj.send(last_prop, *args, &block)
  else
    super
  end
end

Instance Attribute Details

#apiObject

Returns the value of attribute api.



152
153
154
# File 'lib/maestrano.rb', line 152

def api
  @api
end

#appObject

Returns the value of attribute app.



152
153
154
# File 'lib/maestrano.rb', line 152

def app
  @app
end

#environmentObject

Returns the value of attribute environment.



152
153
154
# File 'lib/maestrano.rb', line 152

def environment
  @environment
end

#ssoObject

Returns the value of attribute sso.



152
153
154
# File 'lib/maestrano.rb', line 152

def sso
  @sso
end

#webhookObject

Returns the value of attribute webhook.



152
153
154
# File 'lib/maestrano.rb', line 152

def webhook
  @webhook
end

Instance Method Details

#legacy_param_to_new(parameter) ⇒ Object

Transform legacy parameters into new parameter style Dummy mapping



210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
# File 'lib/maestrano.rb', line 210

def legacy_param_to_new(parameter)
  case parameter.to_s
  when 'user_creation_mode'
    return 'sso.creation_mode'
  when 'verify_ssl_certs'
    return 'api.verify_ssl_certs'
  when 'app_id'
    return 'api.id'
  when /^app_(.*)/i
    return "app.#{$1}"
  when /^api_(.*)/i
    return "api.#{$1}"
  when /^sso_app_(.*)/i
    return "sso.#{$1}"
  when /^sso_(.*)/i
    return "sso.#{$1}"
  else
    return parameter.to_s
  end
end

#param(parameter) ⇒ Object

Get configuration parameter value



245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
# File 'lib/maestrano.rb', line 245

def param(parameter)
  real_param = self.legacy_param_to_new(parameter)
  props = real_param.split('.')
  
  # Either respond to param directly or via properties chaining (e.g: webhook.account.groups_path)
  if self.respond_to?(real_param) || props.inject(self) { |result,elem| result && result.respond_to?(elem) ? result.send(elem) || elem : false }
    last_prop = props.pop
    obj = props.inject(self,:send)
    obj.send(last_prop)
  elsif EVT_CONFIG[@environment.to_s].has_key?(real_param.to_s)
    EVT_CONFIG[@environment.to_s][real_param.to_s]
  else
    raise ArgumentError, "No such configuration parameter: '#{parameter}'"
  end
end

#post_initializeObject

Force or default certain parameters Used after configure block



198
199
200
201
202
203
204
205
# File 'lib/maestrano.rb', line 198

def post_initialize
  self.api.token = "#{self.api.id}:#{self.api.key}"
  self.api.version = Maestrano::VERSION
  self.api.lang = 'ruby'
  self.api.lang_version = "#{RUBY_VERSION} p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE})"
  self.sso.idm ||= self.app.host
  self.sso.slo_enabled &&= self.sso.enabled
end