lib/maestrano.rb in maestrano-0.12.5 vs lib/maestrano.rb in maestrano-1.0.0.pre.RC1
- old
+ new
@@ -1,8 +1,8 @@
# libs
-require 'rest_client'
require 'json'
+require 'rest-client'
# OpenStruct (Extended)
require 'ostruct'
require 'maestrano/open_struct'
@@ -58,32 +58,42 @@
require 'maestrano/account/recurring_bill'
# Connec
require 'maestrano/connec/client'
+# Dev platform
+require 'maestrano/auto_configure'
+
+
module Maestrano
include Preset
-
+
class << self
attr_accessor :configs
end
-
+
+ # Reset Maesrtano configuration
+ def self.reset!
+ self.configs = {}
+ return self
+ end
+
# Maestrano Configuration block
def self.configure
self.configs ||= {}
self.configs[preset] ||= Configuration.new
yield(configs[preset])
self.configs[preset].post_initialize
return self
end
-
+
# Check that app_id and api_key passed
# in argument match
def self.authenticate(app_id,api_key)
self.param(:app_id) == app_id && self.param(:api_key) == api_key
end
-
+
# Take a user uid (either real or virtual)
# and a group id and return the user uid that should
# be used within the app based on the user_creation_mode
# parameter:
# 'real': then the real user uid is returned (usr-4d5sfd)
@@ -94,44 +104,44 @@
return "#{sanitized_user_uid}.#{group_uid}"
else
return sanitized_user_uid
end
end
-
+
# Take a user uid (either real or virtual)
# and return the real uid part
def self.unmask_user(user_uid)
user_uid.split(".").first
end
-
+
# Get configuration parameter value
# E.g:
# Maestrano.param('api.key')
# Maestrano.param(:api_key)
# Maestrano['preset'].param('api.key')
def self.param(parameter)
(self.configs[preset] || Configuration.new).param(parameter)
end
-
+
# Return a hash describing the current
# Maestrano configuration. The metadata
# will be remotely fetched by Maestrano
# Exclude any info containing an api key
def self.to_metadata
hash = {}
hash['environment'] = self.param('environment')
-
+
config_groups = ['app','api','sso','webhook']
blacklist = ['api.key','api.token']
-
+
config_groups.each do |cgroup_name|
cgroup = self.configs[preset].send(cgroup_name)
-
+
attr_list = cgroup.attributes.map(&:to_s)
attr_list += Configuration::EVT_CONFIG[hash['environment']].keys.select { |k| k =~ Regexp.new("^#{cgroup_name}\.") }.map { |k| k.gsub(Regexp.new("^#{cgroup_name}\."),'') }
attr_list.uniq!
-
+
attr_list.each do |first_lvl|
if cgroup.send(first_lvl).is_a?(OpenStruct)
c2group = cgroup.send(first_lvl)
c2group.attributes.each do |secnd_lvl|
full_param = [cgroup_name,first_lvl,secnd_lvl].join('.')
@@ -148,46 +158,52 @@
hash[cgroup_name.to_s][first_lvl.to_s] = self.param(full_param)
end
end
end
end
-
+
return hash
end
+ def self.auto_configure(config_file_path = nil)
+ AutoConfigure.get_marketplace_configurations(config_file_path)
+ rescue => e
+ raise "Error while fetching dynamic configuration: #{e}. Backtrace: #{e.backtrace}"
+ end
+
class Configuration
attr_accessor :environment, :app, :sso, :api, :webhook, :connec
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',
@@ -201,22 +217,22 @@
# Connec! Config
@connec = OpenStruct.new({
enabled: true
})
end
-
+
# Force or default certain parameters
# Used after configure block
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
-
+
# Transform legacy parameters into new parameter
# style
# Dummy mapping
def legacy_param_to_new(parameter)
case parameter.to_s
@@ -236,11 +252,11 @@
return "sso.#{$1}"
else
return parameter.to_s
end
end
-
+
# Handle legacy parameter assignment
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('.')
@@ -249,16 +265,16 @@
obj.send(last_prop, *args, &block)
else
super
end
end
-
+
# Get configuration parameter value
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)
@@ -266,12 +282,12 @@
EVT_CONFIG[@environment.to_s][real_param.to_s]
else
raise ArgumentError, "No such configuration parameter: '#{parameter}'"
end
end
-
- EVT_CONFIG = {
+
+ EVT_CONFIG ||= {
'local' => {
'api.host' => 'http://application.maestrano.io',
'api.base' => '/api/v1/',
'connec.enabled' => true,
'connec.host' => 'http://connec.maestrano.io',
@@ -323,9 +339,37 @@
'connec.timeout' => 180,
'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-----",
+ },
+ 'maestrano-uat' => {
+ 'api.host' => 'https://uat.maestrano.io',
+ 'api.base' => '/api/v1/',
+ 'connec.enabled' => true,
+ 'connec.host' => 'https://api-connec-uat.maestrano.io',
+ 'connec.base_path' => '/api/v2',
+ 'connec.v2_path' => '/v2',
+ 'connec.reports_path' => '/reports',
+ 'connec.timeout' => 180,
+ 'sso.idp' => 'https://uat.maestrano.io',
+ 'sso.name_id_format' => Maestrano::Saml::Settings::NAMEID_PERSISTENT,
+ 'sso.x509_fingerprint' => '8a:1e:2e:76:c4:67:80:68:6c:81:18:f7:d3:29:5d:77:f8:79:54:2f',
+ 'sso.x509_certificate' => "-----BEGIN CERTIFICATE-----\nMIIDezCCAuSgAwIBAgIJAMzy+weDPp7qMA0GCSqGSIb3DQEBBQUAMIGGMQswCQYD\nVQQGEwJBVTEMMAoGA1UECBMDTlNXMQ8wDQYDVQQHEwZTeWRuZXkxGjAYBgNVBAoT\nEU1hZXN0cmFubyBQdHkgTHRkMRYwFAYDVQQDEw1tYWVzdHJhbm8uY29tMSQwIgYJ\nKoZIhvcNAQkBFhVzdXBwb3J0QG1hZXN0cmFuby5jb20wHhcNMTQwMTA0MDUyMzE0\nWhcNMzMxMjMwMDUyMzE0WjCBhjELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA05TVzEP\nMA0GA1UEBxMGU3lkbmV5MRowGAYDVQQKExFNYWVzdHJhbm8gUHR5IEx0ZDEWMBQG\nA1UEAxMNbWFlc3RyYW5vLmNvbTEkMCIGCSqGSIb3DQEJARYVc3VwcG9ydEBtYWVz\ndHJhbm8uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+2uyQeAOc/iro\nhCyT33RkkWfTGeJ8E/mu9F5ORWoCZ/h2J+QDuzuc69Rf1LoO4wZVQ8LBeWOqMBYz\notYFUIPlPfIBXDNL/stHkpg28WLDpoJM+46WpTAgp89YKgwdAoYODHiUOcO/uXOO\n2i9Ekoa+kxbvBzDJf7uuR/io6GERXwIDAQABo4HuMIHrMB0GA1UdDgQWBBTGRDBT\nie5+fHkB0+SZ5g3WY/D2RTCBuwYDVR0jBIGzMIGwgBTGRDBTie5+fHkB0+SZ5g3W\nY/D2RaGBjKSBiTCBhjELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA05TVzEPMA0GA1UE\nBxMGU3lkbmV5MRowGAYDVQQKExFNYWVzdHJhbm8gUHR5IEx0ZDEWMBQGA1UEAxMN\nbWFlc3RyYW5vLmNvbTEkMCIGCSqGSIb3DQEJARYVc3VwcG9ydEBtYWVzdHJhbm8u\nY29tggkAzPL7B4M+nuowDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQAw\nRxg3rZrML//xbsS3FFXguzXiiNQAvA4KrMWhGh3jVrtzAlN1/okFNy6zuN8gzdKD\nYw2n0c/u3cSpUutIVZOkwQuPCMC1hoP7Ilat6icVewNcHayLBxKgRxpBhr5Sc4av\n3HOW5Bi/eyC7IjeBTbTnpziApEC7uUsBou2rlKmTGw==\n-----END CERTIFICATE-----"
+ },
+ 'maestrano-production' => {
+ 'api.host' => 'https://maestrano.com',
+ 'api.base' => '/api/v1/',
+ 'connec.enabled' => true,
+ 'connec.host' => 'https://api-connec.maestrano.com',
+ 'connec.base_path' => '/api/v2',
+ 'connec.v2_path' => '/v2',
+ 'connec.reports_path' => '/reports',
+ 'connec.timeout' => 180,
+ '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-----",
}
}
end
-end
\ No newline at end of file
+end