ey_services_api 0.3.7 → 0.3.8

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.
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
13
13
 
14
14
  s.rubyforge_project = "ey_services_api"
15
15
 
16
- s.files = `git ls-files`.split("\n")
16
+ s.files = (`git ls-files`.split("\n") - `git ls-files -- fake`.split("\n"))
17
17
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
@@ -1,5 +1,5 @@
1
1
  module EY
2
2
  module ServicesAPI
3
- VERSION = "0.3.7"
3
+ VERSION = "0.3.8"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ey_services_api
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 7
10
- version: 0.3.7
9
+ - 8
10
+ version: 0.3.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jacob & Thorben & David & mkb & Josh & Others
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-03-16 00:00:00 Z
18
+ date: 2012-04-04 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rspec
@@ -82,15 +82,6 @@ files:
82
82
  - Rakefile
83
83
  - ci.yml
84
84
  - ey_services_api.gemspec
85
- - fake/ey_services_fake.gemspec
86
- - fake/lib/ey_services_fake/mock_backend.rb
87
- - fake/lib/ey_services_fake/mocking_bird_service.rb
88
- - fake/lib/ey_services_fake/models.rb
89
- - fake/lib/ey_services_fake/reacharound_awsm.rb
90
- - fake/lib/ey_services_fake/tresfiestas_fake.rb
91
- - fake/lib/ey_services_fake/tresfiestas_fake_rack_app.rb
92
- - fake/lib/ey_services_fake/url_generator.rb
93
- - fake/lib/ey_services_fake/version.rb
94
85
  - lib/ey_services_api.rb
95
86
  - lib/ey_services_api/api_struct.rb
96
87
  - lib/ey_services_api/connection.rb
@@ -139,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
130
  requirements: []
140
131
 
141
132
  rubyforge_project: ey_services_api
142
- rubygems_version: 1.8.10
133
+ rubygems_version: 1.8.19
143
134
  signing_key:
144
135
  specification_version: 3
145
136
  summary: API for Partner Services (talks to services.engineyard.com)
@@ -1,24 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "ey_services_fake/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "ey_services_fake"
7
- s.version = EyServicesFake::VERSION
8
- s.authors = ["Jacob Burkhart & Josh Lane"]
9
- s.email = ["jacob@engineyard.com"]
10
- s.homepage = "https://github.com/engineyard/ey_services_api"
11
- s.summary = %q{A fake for use when writting tests against the ey_services_api}
12
- s.description = %q{A fake for use when writting tests against the ey_services_api}
13
-
14
- s.rubyforge_project = "ey_services_fake"
15
-
16
- s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
- s.require_paths = ["lib"]
20
-
21
- s.add_dependency "sinatra"
22
- s.add_dependency "cubbyhole", ">= 0.2.0"
23
- s.add_dependency "request_visualizer"
24
- end
@@ -1,210 +0,0 @@
1
- module EyServicesFake
2
- class MockBackend
3
-
4
- def self.tresfiestas_fake
5
- require 'ey_services_fake/tresfiestas_fake'
6
- TresfiestasFake
7
- end
8
-
9
- def self.setup!(actors = {})
10
- unless actors[:awsm]
11
- require 'ey_services_fake/reacharound_awsm'
12
- actors[:awsm] = ReacharoundAwsm.new
13
- end
14
- unless actors[:service_provider]
15
- require 'ey_services_fake/mocking_bird_service'
16
- actors[:service_provider] = MockingBirdService.new
17
- end
18
- unless actors[:tresfiestas]
19
- actors[:tresfiestas] = tresfiestas_fake.new
20
- end
21
- new(actors)
22
- end
23
-
24
- def app_for(actor_name)
25
- this = self
26
- @apps ||= {}
27
- @apps[actor_name] ||= Rack::Builder.new do
28
- this.actors.each do |k, actor|
29
- if actor.respond_to?(:extra_middlewares)
30
- self.instance_eval(&actor.extra_middlewares)
31
- end
32
- end
33
- if ENV["REQUEST_DEBUG"]
34
- require 'request_visualizer'
35
- use RequestVisualizer do |str|
36
- found = str
37
- this.actors.each do |k, actor|
38
- if str.match(actor.base_url)
39
- found = k.to_s
40
- end
41
- end
42
- found
43
- end
44
- end
45
- run this.actors[actor_name].app
46
- end
47
- end
48
-
49
- def app
50
- this = self
51
- @app ||= Rack::Builder.new do
52
- this.actors.each do |k, actor|
53
- map "#{actor.base_url}/" do
54
- run this.app_for(k)
55
- end
56
- end
57
- end
58
- end
59
-
60
- attr_reader :actors
61
- def initialize(actors)
62
- @actors = actors
63
- end
64
-
65
- def actor(role)
66
- @actors[role] or raise "No actor registered as #{role}, I have #{@actors.keys.inspect}"
67
- end
68
-
69
- def reset!
70
- @actors.values.each do |v|
71
- v.reset!
72
- end
73
- end
74
-
75
- def awsm
76
- awsm_hash = actor(:tresfiestas).find_awsm
77
- unless awsm_hash
78
- awsm_hash = actor(:tresfiestas).create_awsm(actor(:awsm).base_url, app_for(:awsm))
79
- actor(:awsm).setup(awsm_hash[:auth_id], awsm_hash[:auth_key], actor(:tresfiestas).base_url, app_for(:tresfiestas))
80
- end
81
- awsm_hash
82
- end
83
-
84
- def partner
85
- partner_hash = actor(:tresfiestas).find_partner(sso_user)
86
- unless partner_hash
87
- partner_hash = actor(:tresfiestas).create_partner(sso_user, actor(:service_provider).base_url, app_for(:service_provider))
88
- @actors.values.each do |actor|
89
- if actor.respond_to?(:service_provider_setup)
90
- actor.service_provider_setup(partner_hash[:auth_id], partner_hash[:auth_key], actor(:service_provider).base_url, app_for(:service_provider))
91
- end
92
- end
93
- actor(:service_provider).setup(partner_hash[:auth_id], partner_hash[:auth_key], actor(:tresfiestas).base_url, app_for(:tresfiestas))
94
- end
95
- partner_hash
96
- end
97
-
98
- def service
99
- partner_hash = self.partner
100
- service_hash = actor(:tresfiestas).find_service(partner_hash[:id])
101
- unless service_hash
102
- actor(:service_provider).register_service(partner_hash[:registration_url])
103
- service_hash = actor(:tresfiestas).find_service(partner_hash[:id])
104
- end
105
- if actor(:tresfiestas).respond_to?(:document_service)
106
- service_hash.merge!(:service_doc => actor(:tresfiestas).document_service(service_hash[:id]))
107
- end
108
- service_hash.merge(:partner => partner_hash)
109
- end
110
-
111
- def sso_user
112
- actor(:awsm).sso_user #allows for nils (some implementations of AWSM may decide this is ok)
113
- end
114
-
115
- def sso_account
116
- awsm #need to have setup awsm before you can create accounts!
117
- sso_user_something = sso_user #the sso_user is a somehting, not necessarily a hash
118
- sso_account_hash = actor(:awsm).find_sso_account(sso_user_something)
119
- unless sso_account_hash
120
- sso_account_hash = actor(:awsm).create_sso_account(sso_user_something)
121
- end
122
- sso_account_hash
123
- end
124
-
125
- def service_enablement
126
- sso_account_hash = self.sso_account
127
- service_hash = self.service
128
- unless actor(:tresfiestas).service_available_for_account?(service_hash[:id], sso_account_hash[:id])
129
- actor(:tresfiestas).make_service_available_for_account(service_hash[:id], sso_account_hash[:id])
130
- end
131
- {
132
- :service => service_hash,
133
- :sso_account => sso_account_hash,
134
- }
135
- end
136
-
137
- def service_account
138
- service_enablement_hash = self.service_enablement
139
- sso_account_hash = service_enablement_hash[:sso_account]
140
- service_hash = service_enablement_hash[:service]
141
- service_account_hash = actor(:tresfiestas).find_service_account(service_hash[:id], sso_account_hash[:id])
142
- unless service_account_hash
143
- actor(:awsm).enable_service(service_hash[:id], sso_account_hash[:id])
144
- service_account_hash = actor(:tresfiestas).find_service_account(service_hash[:id], sso_account_hash[:id])
145
- end
146
- service_account_hash.merge(:name => sso_account_hash[:name], :service => service_hash, :sso_account => sso_account_hash)
147
- end
148
-
149
- def destroy_service_account
150
- actor(:awsm).disable_service(service_account[:id])
151
- end
152
-
153
- def app_deployment
154
- app_deployment_hash = actor(:awsm).find_app_deployment(sso_account[:id])
155
- unless app_deployment_hash
156
- actor(:awsm).create_app_deployment(sso_account[:id], "myapp", "myenv", "production")
157
- app_deployment_hash = actor(:awsm).find_app_deployment(sso_account[:id])
158
- end
159
- app_deployment_hash
160
- end
161
-
162
- def provisioned_service
163
- service_account_hash = self.service_account
164
- sso_account_hash = service_account_hash[:sso_account]
165
- app_deployment_hash = self.app_deployment
166
- provisioned_service_hash = actor(:tresfiestas).find_provisioned_service(service_account_hash[:id], app_deployment_hash[:id])
167
- unless provisioned_service_hash
168
- actor(:awsm).provision_service(sso_account_hash[:id], service_account_hash[:id], app_deployment_hash[:id])
169
- provisioned_service_hash = actor(:tresfiestas).find_provisioned_service(service_account_hash[:id], app_deployment_hash[:id])
170
- end
171
- provisioned_service_hash.merge(:service_account => service_account_hash, :app_deployment => app_deployment_hash)
172
- end
173
-
174
- def destroy_provisioned_service
175
- actor(:awsm).deprovision_service(provisioned_service[:id])
176
- end
177
-
178
- def latest_invoice
179
- actor(:tresfiestas).latest_invoice
180
- end
181
-
182
- def latest_status_message
183
- actor(:tresfiestas).latest_status_message
184
- end
185
-
186
- def send_message(message_url, message_type, message_subject, message_body = nil)
187
- actor(:service_provider).send_message(message_url, message_type, message_subject, message_body)
188
- end
189
-
190
- def send_invoice(invoices_url, total_amount_cent, line_item_description)
191
- actor(:service_provider).send_invoice(invoices_url, total_amount_cent, line_item_description)
192
- end
193
-
194
- def service_account_sso_url
195
- configuration_url = service_account[:pushed_service_account][:configuration_url]
196
- params = {
197
- 'timestamp' => Time.now.iso8601,
198
- 'ey_user_id' => sso_user.id,
199
- 'ey_user_name' => "Person Name",
200
- 'ey_return_to_url' => "https://cloud.engineyard.com/dashboard",
201
- 'access_level' => 'owner',
202
- }
203
- EY::ApiHMAC::SSO.sign(configuration_url,
204
- params,
205
- partner[:auth_id],
206
- partner[:auth_key])
207
- end
208
-
209
- end
210
- end
@@ -1,155 +0,0 @@
1
- require 'sinatra/base'
2
-
3
- module EyServicesFake
4
- class MockingBirdService
5
- class Application < Sinatra::Base
6
- enable :raise_errors
7
- disable :dump_errors
8
- disable :show_exceptions
9
-
10
- delete '/api/1/some_provisioned_service' do
11
- if MockingBirdService.service_deprovisioning_handler
12
- instance_eval(&MockingBirdService.service_deprovisioning_handler)
13
- else
14
- {}.to_json
15
- end
16
- end
17
-
18
- delete '/api/1/some_service_account' do
19
- if MockingBirdService.service_account_cancel_handler
20
- instance_eval(&MockingBirdService.service_account_cancel_handler)
21
- else
22
- {}.to_json
23
- end
24
- end
25
-
26
- post '/api/1/service_accounts_callback' do
27
- if MockingBirdService.service_account_creation_handler
28
- instance_eval(&MockingBirdService.service_account_creation_handler)
29
- else
30
- service_account = EY::ServicesAPI::ServiceAccountCreation.from_request(request.body.read)
31
- standard_response_params = MockingBirdService.service_account_creation_params
32
- EY::ServicesAPI::ServiceAccountResponse.new(
33
- :provisioned_services_url => standard_response_params[:provisioned_services_url],
34
- :url => standard_response_params[:url],
35
- :configuration_url => standard_response_params[:configuration_url],
36
- :configuration_required => standard_response_params[:configuration_required],
37
- :message => EY::ServicesAPI::Message.new(:message_type => "status", :subject => "some messages")
38
- ).to_hash.to_json
39
- end
40
- end
41
-
42
- post '/api/1/provisioned_services_callback' do
43
- if MockingBirdService.service_provisioning_handler
44
- instance_eval(&MockingBirdService.service_provisioning_handler)
45
- else
46
- provisioned_service = EY::ServicesAPI::ProvisionedServiceCreation.from_request(request.body.read)
47
- standard_response_params = MockingBirdService.service_provisioned_params
48
- EY::ServicesAPI::ProvisionedServiceResponse.new(
49
- :url => standard_response_params[:url],
50
- :vars => standard_response_params[:vars],
51
- :configuration_required => false,
52
- :configuration_url => standard_response_params[:configuration_url],
53
- :message => EY::ServicesAPI::Message.new(:message_type => "status", :subject => "some provisioned service messages")
54
- ).to_hash.to_json
55
- end
56
- end
57
-
58
- get '/sso/some_service_account' do
59
- "SSO Hello Service Account"
60
- end
61
-
62
- get '/sso/some_provisioned_service' do
63
- "SSO Hello Provisioned Service"
64
- end
65
- end
66
-
67
- class << self
68
- attr_accessor :service_account_creation_handler
69
- attr_accessor :service_provisioning_handler
70
- attr_accessor :service_deprovisioning_handler
71
- attr_accessor :service_account_cancel_handler
72
- end
73
-
74
- def reset!
75
- MockingBirdService.service_account_creation_handler = nil
76
- MockingBirdService.service_provisioning_handler = nil
77
- MockingBirdService.service_deprovisioning_handler = nil
78
- MockingBirdService.service_account_cancel_handler = nil
79
- end
80
-
81
- def app
82
- Application
83
- end
84
-
85
- def setup(auth_id, auth_key, base_url = nil, backend = nil)
86
- require 'ey_services_api'
87
- connection = EY::ServicesAPI.setup!(:auth_id => auth_id, :auth_key => auth_key)
88
- if backend
89
- connection.backend = backend
90
- end
91
- end
92
-
93
- def base_url
94
- self.class.base_url
95
- end
96
- def self.base_url
97
- "http://mock.service/"
98
- end
99
-
100
- def registration_params
101
- self.class.registration_params
102
- end
103
- def self.registration_params
104
- {
105
- :name => "Mocking Bird",
106
- :label => "mocking_bird",
107
- :description => "a mock service",
108
- :service_accounts_url => "#{base_url}api/1/service_accounts_callback",
109
- :home_url => "#{base_url}",
110
- :terms_and_conditions_url => "#{base_url}terms",
111
- :vars => ["some_var", "other_var"]
112
- }
113
- end
114
-
115
- def service_account_creation_params
116
- self.class.service_account_creation_params
117
- end
118
- def self.service_account_creation_params
119
- {
120
- :provisioned_services_url => "#{base_url}api/1/provisioned_services_callback",
121
- :url => "#{base_url}api/1/some_service_account",
122
- :configuration_url => "#{base_url}sso/some_service_account",
123
- :configuration_required => false
124
- }
125
- end
126
-
127
- def service_provisioned_params
128
- self.class.service_provisioned_params
129
- end
130
- def self.service_provisioned_params
131
- {
132
- :vars => {"some_var" => "value", "other_var" => "blah"},
133
- :configuration_url => "#{base_url}sso/some_provisioned_service",
134
- :configuration_required => false,
135
- :url => "#{base_url}api/1/some_provisioned_service",
136
- }
137
- end
138
-
139
- def register_service(registration_url)
140
- EY::ServicesAPI.connection.register_service(registration_url, MockingBirdService.registration_params)
141
- end
142
-
143
- def send_message(message_url, message_type, message_subject, message_body)
144
- message = EY::ServicesAPI::Message.new(:message_type => message_type, :subject => message_subject, :body => message_body)
145
- EY::ServicesAPI.connection.send_message(message_url, message)
146
- end
147
-
148
- def send_invoice(invoices_url, total_amount_cent, line_item_description)
149
- invoice = EY::ServicesAPI::Invoice.new(:total_amount_cents => total_amount_cent,
150
- :line_item_description => line_item_description)
151
- EY::ServicesAPI.connection.send_invoice(invoices_url, invoice)
152
- end
153
-
154
- end
155
- end
@@ -1,74 +0,0 @@
1
- require 'cubbyhole/base'
2
-
3
- module EyServicesFake
4
- class Model < Cubbyhole::Base
5
- def self.inherited(klass)
6
- decendants << klass
7
- end
8
- class << self
9
- attr_accessor :current_id
10
- end
11
- self.current_id = 0
12
- def self.next_id
13
- Model.current_id += 1
14
- end
15
- def self.nuke_all
16
- decendants.map(&:nuke)
17
- end
18
- def self.backend
19
- @backend ||= Hash.new
20
- end
21
- def self.decendants
22
- @decendants ||= []
23
- end
24
- def self.belongs_to(model, name, key)
25
- search_context = self.to_s.split("::")
26
- search_context.pop
27
- search_context = eval(search_context.join("::").to_s)
28
- self.class_eval do
29
- define_method(name) do
30
- klass = search_context.const_get(model)
31
- klass.all.find{|s| self.send(key).to_i == s.id.to_i }
32
- end
33
- end
34
- end
35
- def self.has_many(model, name, key)
36
- search_context = self.to_s.split("::")
37
- search_context.pop
38
- search_context = eval(search_context.join("::").to_s)
39
- self.class_eval do
40
- define_method(name) do
41
- klass = search_context.const_get(model)
42
- Cubbyhole::Collection.new(klass.all.select{|s| s.send(key).to_s == self.id.to_s })
43
- end
44
- end
45
- end
46
- end
47
- class Partner < Model
48
- has_many :Service, :services, :partner_id
49
- end
50
- class Service < Model
51
- has_many :ServiceEnablement, :service_enablements, :service_id
52
- has_many :ServiceAccount, :service_accounts, :service_id
53
- belongs_to :Partner, :partner, :partner_id
54
- end
55
- class ServiceAccount < Model
56
- has_many :ProvisionedService, :provisioned_services, :service_account_id
57
- has_many :Message, :messages, :service_account_id
58
- belongs_to :Service, :service, :service_id
59
- has_many :Invoice, :invoices, :service_account_id
60
- end
61
- class ProvisionedService < Model
62
- has_many :Message, :messages, :provisioned_service_id
63
- belongs_to :ServiceAccount, :service_account, :service_account_id
64
- end
65
- class ServiceEnablement < Model; end
66
- class Invoice < Model
67
- belongs_to :ServiceAccount, :service_account, :service_account_id
68
- end
69
- class Message < Model
70
- belongs_to :ServiceAccount, :service_account, :service_account_id
71
- belongs_to :ProvisionedService, :provisioned_service, :provisioned_service_id
72
- end
73
- class Awsm < Model; end
74
- end
@@ -1,166 +0,0 @@
1
- require 'sinatra/base'
2
- require 'ey_services_fake/models'
3
-
4
- module EyServicesFake
5
- class ReacharoundAwsm
6
- class Application < Sinatra::Base
7
- enable :raise_errors
8
- disable :dump_errors
9
- disable :show_exceptions
10
-
11
- post '/dashboard_notifications_url' do
12
- {}.to_json
13
- end
14
-
15
- get '/dashboard' do
16
- "Hello this is fake AWSM dashboard"
17
- end
18
-
19
- end
20
-
21
- def app
22
- Application
23
- end
24
-
25
- def reset!
26
- #no-op
27
- end
28
-
29
- def base_url
30
- "http://cloud.engineyard.com"
31
- end
32
-
33
- class Account < EyServicesFake::Model; end
34
- class AppDeployment < EyServicesFake::Model
35
- belongs_to :App, :app, :app_id
36
- belongs_to :Environment, :environment, :environment_id
37
- end
38
- class App < EyServicesFake::Model; end
39
- class Environment < EyServicesFake::Model; end
40
- class User < EyServicesFake::Model
41
- has_many :Account, :accounts, :owner_id
42
- end
43
-
44
- def service_provider_setup(auth_id, auth_key, service_provider_url, service_provider_rackapp)
45
- @connection = EY::ApiHMAC::AuthedConnection.new(auth_id, auth_key).tap{|c| c.backend = service_provider_rackapp}
46
- end
47
- def setup(auth_id, auth_key, tresfiestas_url, tresfiestas_rackapp)
48
- #ignored... we don't talk to tresfiestas, we talk to service_provider
49
- end
50
-
51
- def sso_user
52
- the_one_email = "the-one-user@example.com"
53
- User.first(:email => the_one_email) || User.create(:email => the_one_email)
54
- end
55
-
56
- def find_sso_account(sso_user)
57
- account = sso_user.accounts.first
58
- account && {
59
- :id => account.id,
60
- :name => account.name,
61
- }
62
- end
63
- def create_sso_account(sso_user)
64
- Account.create(:owner_id => sso_user.id, :name => 'some-account')
65
- find_sso_account(sso_user)
66
- end
67
-
68
- def find_app_deployment(sso_account_id)
69
- app_deployment = AppDeployment.first(:account_id => sso_account_id)
70
- app_deployment && {
71
- :id => app_deployment.id,
72
- :app => {
73
- :id => app_deployment.app.id,
74
- :name => app_deployment.app.name,
75
- },
76
- :environment => {
77
- :id => app_deployment.environment.id,
78
- :name => app_deployment.environment.name,
79
- :framework_env => app_deployment.environment.framework_env,
80
- :aws_region => app_deployment.environment.aws_region
81
- }
82
- }
83
- end
84
- def create_app_deployment(sso_account_id, app_name, env_name, framework_env)
85
- app = App.create(:name => app_name)
86
- env = Environment.create(:name => env_name, :framework_env => framework_env, :aws_region => 'us-east-1')
87
- AppDeployment.create(:account_id => sso_account_id, :app_id => app.id, :environment_id => env.id)
88
- end
89
-
90
- #Normal implmentations of AWSM would not be posting to service_accounts_url;
91
- #they would be posting to private API to say that they wish to create a service account
92
- #but this is reacharound AWSM, and so it plays the role of tresfiestas internals here
93
- # def enable_service(connection, sso_account, service_hash)
94
- def enable_service(service_id, sso_account_id)
95
- url_gen = EyServicesFake::URL_GEN
96
- service_account = ServiceAccount.create(:sso_account_id => sso_account_id, :active => false, :service_id => service_id, :dashboard_notifications_url => "#{base_url}/dashboard_notifications_url")
97
- service = Service.get(service_id)
98
- creation_attributes = {
99
- :name => Account.get(sso_account_id).name,
100
- :url => url_gen.partner_service_account(service, service_account),
101
- :messages_url => url_gen.messages(service, service_account),
102
- :invoices_url => url_gen.invoices(service, service_account),
103
- }
104
- @connection.post(service.service_accounts_url, creation_attributes) do |result, location|
105
- service_account.active = true
106
- if result["service_account"]
107
- service_account.provisioned_services_url = result["service_account"]['provisioned_services_url']
108
- service_account.configuration_url = result["service_account"]['configuration_url']
109
- service_account.url = result["service_account"]['url']
110
- service_account.configuration_required = result["service_account"]['configuration_required']
111
- end
112
- if result["message"] && result["message"]["message_type"]
113
- Message.create(
114
- :service_account_id => service_account.id,
115
- :message_type => result["message"]["message_type"],
116
- :subject => result["message"]["subject"],
117
- :body => result["message"]["body"])
118
- end
119
- service_account.save
120
- end
121
- end
122
-
123
- def disable_service(service_account_id)
124
- service_account = ServiceAccount.get(service_account_id)
125
- @connection.delete(service_account.url)
126
- end
127
-
128
- def provision_service(sso_account_id, service_account_id, app_deployment_id)
129
- url_gen = EyServicesFake::URL_GEN
130
- provisioned_service = ProvisionedService.create(:app_deployment_id => app_deployment_id.to_i, :active => false, :service_account_id => service_account_id.to_i, :dashboard_notifications_url => "#{base_url}/dashboard_notifications_url")
131
- service_account_object = ServiceAccount.get(service_account_id)
132
- app_deployment = AppDeployment.get(app_deployment_id)
133
- app = app_deployment.app
134
- environment = app_deployment.environment
135
- provision_attribtues = {
136
- :url => url_gen.partner_provisioned_service(service_account_object, provisioned_service),
137
- :messages_url => url_gen.messages(service_account_object.service, service_account_object, provisioned_service),
138
- :app => {:id => app.id, :name => app.name},
139
- :environment => {:id => environment.id, :name => environment.name, :framework_env => environment.framework_env, :aws_region => environment.aws_region},
140
- }
141
- @connection.post(service_account_object.provisioned_services_url, provision_attribtues) do |result, location|
142
- provisioned_service.active = true
143
- if result['provisioned_service']
144
- provisioned_service.vars = result['provisioned_service']["vars"]
145
- provisioned_service.configuration_url = result['provisioned_service']["configuration_url"]
146
- provisioned_service.configuration_required = result['provisioned_service']["configuration_required"]
147
- provisioned_service.url = result['provisioned_service']["url"]
148
- if result["message"] && result["message"]["message_type"]
149
- Message.create(
150
- :provisioned_service_id => provisioned_service.id,
151
- :message_type => result["message"]["message_type"],
152
- :subject => result["message"]["subject"],
153
- :body => result["message"]["body"])
154
- end
155
- end
156
- provisioned_service.save
157
- end
158
- end
159
-
160
- def deprovision_service(provisioned_service_id)
161
- provisioned_service = ProvisionedService.get(provisioned_service_id)
162
- @connection.delete(provisioned_service.url)
163
- end
164
-
165
- end
166
- end
@@ -1,137 +0,0 @@
1
- require 'ey_services_fake/url_generator'
2
- require 'ey_services_fake/models'
3
- require 'ey_services_fake/tresfiestas_fake_rack_app'
4
-
5
- module EyServicesFake
6
- BASE_URL = "http://services.engineyard.com"
7
- URL_GEN = EyServicesFake::UrlGenerator.new(BASE_URL)
8
-
9
- class TresfiestasFake
10
-
11
- def reset!
12
- Model.nuke_all
13
- end
14
-
15
- def base_url
16
- BASE_URL
17
- end
18
-
19
- def app
20
- TresfiestasFakeRackApp
21
- end
22
-
23
- def find_awsm
24
- awsm_object = Awsm.first
25
- awsm_object && {
26
- :id => awsm_object.id,
27
- :auth_id => awsm_object.auth_id,
28
- :auth_key => awsm_object.auth_key,
29
- }
30
- end
31
-
32
- def create_awsm(awsm_base_url, awsm_app)
33
- Awsm.create(:auth_id => "789eef", :auth_key => "009abb")
34
- app.awsm_connection = EY::ApiHMAC::AuthedConnection.new("789eef", "009abb")
35
- app.awsm_connection.backend = awsm_app
36
- find_awsm
37
- end
38
-
39
- def find_partner(sso_user)
40
- partner_object = Partner.first
41
- partner_object && {
42
- :id => partner_object.id,
43
- :name => partner_object.name,
44
- :auth_id => partner_object.auth_id,
45
- :auth_key => partner_object.auth_key,
46
- :registration_url => URL_GEN.service_registration(partner_object),
47
- }
48
- end
49
-
50
- def create_partner(sso_user, partner_base_url, partner_app)
51
- Partner.create(:auth_id => "123edf", :auth_key => "abc456", :name => "Some-Partner")
52
- app.partner_connection = EY::ApiHMAC::AuthedConnection.new("123edf", "abc456")
53
- app.partner_connection.backend = partner_app
54
- find_partner(sso_user)
55
- end
56
-
57
- def find_service(partner_id)
58
- partner_object = Partner.get!(partner_id)
59
- service_object = partner_object.services.first
60
- service_object && {
61
- :id => service_object.id,
62
- :name => service_object.name,
63
- :label => service_object.label,
64
- :revenue_share => service_object.revenue_share,
65
- :service_accounts_url => service_object.service_accounts_url
66
- }
67
- end
68
-
69
- def service_available_for_account?(service_id, sso_account_id)
70
- Service.get(service_id).service_enablements.first(:sso_account_id => sso_account_id.to_s)
71
- end
72
-
73
- def make_service_available_for_account(service_id, sso_account_id, reason = "test")
74
- ServiceEnablement.create(:service_id => service_id.to_i, :sso_account_id => sso_account_id.to_s, :reason => reason)
75
- end
76
-
77
- def find_service_account(service_id, sso_account_id)
78
- service_object = Service.get(service_id)
79
- service_account_object = service_object.service_accounts.first(:sso_account_id => sso_account_id.to_s)
80
- service_account_object && {
81
- :id => service_account_object.id,
82
- :url => URL_GEN.partner_service_account(service_object, service_account_object),
83
- :messages_url => URL_GEN.messages(service_object, service_account_object),
84
- :invoices_url => URL_GEN.invoices(service_object, service_account_object),
85
- :pushed_service_account => {
86
- :provisioned_services_url => service_account_object.provisioned_services_url,
87
- :configuration_url => service_account_object.configuration_url,
88
- :url => service_account_object.url,
89
- :configuration_required => service_account_object.configuration_required,
90
- }
91
- }
92
- end
93
-
94
- def find_provisioned_service(service_account_id, app_deployment_id)
95
- service_account = ServiceAccount.get(service_account_id)
96
- provisioned_service = service_account.provisioned_services.first(:app_deployment_id => app_deployment_id)
97
- provisioned_service && {
98
- :id => provisioned_service.id,
99
- :url => URL_GEN.partner_provisioned_service(service_account, provisioned_service),
100
- :messages_url => URL_GEN.messages(service_account.service, service_account, provisioned_service),
101
- :pushed_provisioned_service => {
102
- :vars => provisioned_service.vars,
103
- :configuration_url => provisioned_service.configuration_url,
104
- :configuration_required => provisioned_service.configuration_required,
105
- :url => provisioned_service.url
106
- }
107
- }
108
- end
109
-
110
- def latest_invoice
111
- invoice = Invoice.last
112
- {
113
- :total_amount_cents => invoice.total_amount_cents,
114
- :line_item_description => invoice.line_item_description,
115
- :service_account_id => invoice.service_account_id,
116
- }
117
- end
118
-
119
- def latest_status_message
120
- if message = Message.last(:message_type => "status")
121
- to_return = {
122
- :id => message.id,
123
- :subject => message.subject,
124
- :body => message.body
125
- }
126
- if message.respond_to?(:service_account) && message.service_account
127
- to_return[:service_account_id] = message.service_account.id
128
- end
129
- if message.respond_to?(:provisioned_service) && message.provisioned_service
130
- to_return[:provisioned_service_id] = message.provisioned_service.id
131
- end
132
- to_return
133
- end
134
- end
135
-
136
- end
137
- end
@@ -1,160 +0,0 @@
1
- require 'sinatra/base'
2
-
3
- module EyServicesFake
4
- class TresfiestasFakeRackApp < Sinatra::Base
5
- enable :raise_errors
6
- disable :dump_errors
7
- disable :show_exceptions
8
-
9
- class << self
10
- attr_accessor :partner_connection
11
- attr_accessor :awsm_connection
12
- end
13
-
14
- ################
15
- # External API #
16
- ################
17
-
18
- get '/api/1/partners/:partner_id/services' do |partner_id|
19
- partner = Partner.get!(partner_id)
20
- to_return = []
21
- partner.services.each do |service|
22
- to_return << {"service" => service.attributes.merge('url' => URL_GEN.service(service)) }
23
- end
24
- to_return.to_json
25
- end
26
-
27
- #TODO: auth!
28
- post '/api/1/partners/:partner_id/services' do |partner_id|
29
- partner = Partner.get!(partner_id)
30
- service_json = JSON.parse(request.body.read)["service"]
31
- if service_json["name"].to_s.empty?
32
- status 400
33
- {:error_messages => ["Name can't be blank"]}.to_json
34
- else
35
- service = Service.create(service_json.merge(:partner_id => partner.id, :revenue_share => 0.3))
36
- status 201
37
- headers 'Location' => URL_GEN.service(service)
38
- {}.to_json
39
- end
40
- end
41
-
42
- get '/api/1/partners/:partner_id/services/:service_id' do |partner_id, service_id|
43
- partner = Partner.get!(partner_id)
44
- if service = partner.services.detect{ |s| s.id.to_s == service_id.to_s }
45
- {"service" => service.attributes}.to_json
46
- else
47
- status 404
48
- {}.to_json
49
- end
50
- end
51
-
52
- put '/api/1/partners/:partner_id/services/:service_id' do |partner_id, service_id|
53
- partner = Partner.get!(partner_id)
54
- service = partner.services.detect{ |s| s.id.to_s == service_id.to_s }
55
- update_params = JSON.parse(request.body.read)["service"]
56
- if update_params.key?("name") && update_params["name"].to_s.empty?
57
- status 400
58
- {:error_messages => ["Name can't be blank"]}.to_json
59
- else
60
- service.update_attributes(update_params)
61
- {}.to_json
62
- end
63
- end
64
-
65
- delete '/api/1/partners/:partner_id/services/:service_id' do |partner_id, service_id|
66
- partner = Partner.get!(partner_id)
67
- service = partner.services.detect{ |s| s.id.to_s == service_id.to_s }
68
- service.destroy
69
- {}.to_json
70
- end
71
-
72
- put '/api/1/partners/:partner_id/services/:service_id/service_accounts/:service_account_id' do |partner_id, service_id, service_account_id|
73
- partner = Partner.get!(partner_id)
74
- service = partner.services.detect{ |s| s.id.to_s == service_id.to_s }
75
- service_account = service.service_accounts.detect{ |sa| sa.id.to_s == service_account_id.to_s }
76
- service_account_atts = JSON.parse(request.body.read)["service_account"]
77
- service_account.update_attributes(service_account_atts)
78
- {}.to_json
79
- end
80
-
81
- put '/api/1/service_accounts/:service_account_id/provisioned_service/:provisioned_service_id' do |service_account_id, provisioned_service_id|
82
- service_account = ServiceAccount.get!(service_account_id)
83
- provisioned_service = service_account.provisioned_services.detect{ |ps| ps.id.to_s == provisioned_service_id.to_s}
84
- atts = JSON.parse(request.body.read)["provisioned_service"]
85
- provisioned_service.update_attributes(atts)
86
- {}.to_json
87
- end
88
-
89
- post '/api/1/partners/:partner_id/services/:service_id/service_accounts/:service_account_id/invoices' do |partner_id, service_id, service_account_id|
90
- invoice_params = JSON.parse(request.body.read)["invoice"]
91
- unless invoice_params['total_amount_cents'].is_a?(Fixnum)
92
- status 400
93
- return {:error_messages => ["Total Amount Cents must be an integer"]}.to_json
94
- end
95
- if invoice_params["line_item_description"].to_s.empty?
96
- status 400
97
- return {:error_messages => ["Line item description can't be blank"]}.to_json
98
- end
99
- if invoice_params['total_amount_cents'] < 0
100
- status 400
101
- return {:error_messages => ["Total amount cents must be greater than or equal to 0"]}.to_json
102
- end
103
- Invoice.create(invoice_params.merge(:service_account_id => service_account_id.to_i))
104
- {}.to_json
105
- end
106
-
107
- post '/api/1/partners/:partner_id/services/:service_id/service_accounts/:service_account_id/messages' do |partner_id, service_id, service_account_id|
108
- message_params = JSON.parse(request.body.read)["message"]
109
- message_type = message_params['message_type']
110
- subject = message_params['subject']
111
-
112
- if subject.to_s.empty?
113
- status 400
114
- return {:error_messages => ["Subject can't be blank."]}.to_json
115
- end
116
-
117
- unless ['status', 'notification', 'alert'].include? message_type
118
- status 400
119
- return {:error_messages => ['Message type must be one of: status, notification or alert']}.to_json
120
- end
121
-
122
- service_account = ServiceAccount.get(service_account_id)
123
- message = Message.create(message_params.merge(:service_account_id => service_account.id))
124
- forward_service_account_message_to_awsm(service_account, message)
125
- {}.to_json
126
- end
127
-
128
- def forward_service_account_message_to_awsm(service_account, message)
129
- #no-op
130
- end
131
-
132
- post '/api/1/partners/:partner_id/services/:service_id/service_accounts/:service_account_id/provisioned_service/:provisioned_service_id/messages' do |partner_id, service_id, service_account_id, provisioned_service_id|
133
- message_params = JSON.parse(request.body.read)["message"]
134
- subject = message_params['subject']
135
- message_type = message_params['message_type']
136
-
137
- if subject.to_s.empty?
138
- status 400
139
- return {:error_messages => ["Subject can't be blank."]}.to_json
140
- end
141
-
142
- unless ['status', 'notification', 'alert'].include? message_type
143
- status 400
144
- return {:error_messages => ['Message type must be one of: status, notification or alert']}.to_json
145
- end
146
-
147
- message = Message.create(message_params.merge(:provisioned_service_id => provisioned_service_id.to_i))
148
- provisioned_service = ProvisionedService.get(provisioned_service_id)
149
- service_account = provisioned_service.service_account
150
- message = Message.create(message_params.merge(:provisioned_service_id => provisioned_service.id))
151
- forward_provisioned_service_message_to_awsm(provisioned_service, message)
152
- {}.to_json
153
- end
154
-
155
- def forward_provisioned_service_message_to_awsm(provisioned_service, message)
156
- #no-op
157
- end
158
-
159
- end
160
- end
@@ -1,37 +0,0 @@
1
- module EyServicesFake
2
- class UrlGenerator
3
-
4
- def initialize(base_url)
5
- @base_url = base_url
6
- end
7
-
8
- def service_registration(partner)
9
- "#{@base_url}/api/1/partners/#{partner.id}/services"
10
- end
11
-
12
- def service(service)
13
- "#{@base_url}/api/1/partners/#{service.partner_id}/services/#{service.id}"
14
- end
15
-
16
- def partner_service_account(service, service_account)
17
- "#{@base_url}/api/1/partners/#{service.partner_id}/services/#{service.id}/service_accounts/#{service_account.id}"
18
- end
19
-
20
- def messages(service, service_account, provisioned_service = nil)
21
- if provisioned_service
22
- "#{@base_url}/api/1/partners/#{service.partner_id}/services/#{service.id}/service_accounts/#{service_account.id}/provisioned_service/#{provisioned_service.id}/messages"
23
- else
24
- "#{@base_url}/api/1/partners/#{service.partner_id}/services/#{service.id}/service_accounts/#{service_account.id}/messages"
25
- end
26
- end
27
-
28
- def invoices(service, service_account)
29
- "#{@base_url}/api/1/partners/#{service.partner_id}/services/#{service.id}/service_accounts/#{service_account.id}/invoices"
30
- end
31
-
32
- def partner_provisioned_service(service_account, provisioned_service)
33
- "#{@base_url}/api/1/service_accounts/#{service_account.id}/provisioned_service/#{provisioned_service.id}"
34
- end
35
-
36
- end
37
- end
@@ -1,3 +0,0 @@
1
- module EyServicesFake
2
- VERSION = "0.3.7"
3
- end