kensa 1.1.4 → 1.2.0rc1

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.
@@ -1,72 +0,0 @@
1
- require 'test/helper'
2
-
3
- class ProvisionResponseCheckTest < Test::Unit::TestCase
4
- include Heroku::Kensa
5
-
6
- def check ; ProvisionResponseCheck ; end
7
-
8
- setup do
9
- @response = { "id" => "123" }
10
- @data = Manifest.new.skeleton.merge(:provision_response => @response)
11
- @data['api']['config_vars'] << "MYADDON_CONFIG"
12
- end
13
-
14
- test "is valid if no errors" do
15
- assert_valid
16
- end
17
-
18
- test "has an id" do
19
- @response.delete("id")
20
- assert_invalid
21
- end
22
-
23
- describe "when config is present" do
24
-
25
- test "is a hash" do
26
- @response["config"] = ""
27
- assert_invalid
28
- end
29
-
30
- test "each key is previously set in the manifest" do
31
- @response["config"] = { "MYSQL_URL" => "http://..." }
32
- assert_invalid
33
- end
34
-
35
- test "each value is a string" do
36
- @response["config"] = { "MYADDON_URL" => {} }
37
- assert_invalid
38
- end
39
-
40
- test "asserts _URL vars are valid URIs" do
41
- @response["config"] = { "MYADDON_URL" => "abc:" }
42
- assert_invalid
43
- end
44
-
45
- test "asserts _URL vars have a host" do
46
- @response["config"] = { "MYADDON_URL" => "path" }
47
- assert_invalid
48
- end
49
-
50
- test "asserts _URL vars have a scheme" do
51
- @response["config"] = { "MYADDON_URL" => "//host/path" }
52
- assert_invalid
53
- end
54
-
55
- test "doesn't run URI test against other vars" do
56
- @response["config"] = { "MYADDON_CONFIG" => "abc:" }
57
- assert_valid
58
- end
59
-
60
- test "doesn't allow localhost URIs on production" do
61
- @data[:env] = 'production'
62
- @response["config"] = { "MYADDON_URL" => "http://localhost/abc" }
63
- assert_invalid
64
- end
65
-
66
- test "is valid otherwise" do
67
- @response["config"] = { "MYADDON_URL" => "http://localhost/abc" }
68
- assert_valid
69
- end
70
- end
71
-
72
- end
@@ -1 +0,0 @@
1
- exit(1) if ARGV.first == 'fail'
@@ -1,207 +0,0 @@
1
- require 'rubygems'
2
- require 'sinatra'
3
- require 'json'
4
-
5
- enable :sessions
6
-
7
- helpers do
8
- def heroku_only!
9
- unless auth_heroku?
10
- response['WWW-Authenticate'] = %(Basic realm="Kensa Test Server")
11
- unauthorized!(401)
12
- end
13
- end
14
-
15
- def auth_heroku?
16
- @auth ||= Rack::Auth::Basic::Request.new(request.env)
17
- @auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials == ['myaddon', 'secret']
18
- end
19
-
20
- def unauthorized!(status=403)
21
- throw(:halt, [status, "Not authorized\n"])
22
- end
23
-
24
- def make_token
25
- Digest::SHA1.hexdigest([params[:id], 'SSO_SALT', params[:timestamp]].join(':'))
26
- end
27
-
28
- def login(heroku_user=true)
29
- session.clear
30
- session[:logged_in] = true
31
- session[:heroku] = heroku_user
32
- redirect '/'
33
- end
34
- end
35
-
36
- post '/working/heroku/resources' do
37
- heroku_only!
38
- { :id => 123 }.to_json
39
- end
40
-
41
- post '/invalid-json/heroku/resources' do
42
- heroku_only!
43
- 'invalidjson'
44
- end
45
-
46
- post '/invalid-response/heroku/resources' do
47
- heroku_only!
48
- nil.to_json
49
- end
50
-
51
- post '/invalid-status/heroku/resources' do
52
- heroku_only!
53
- status 422
54
- { :id => 123 }.to_json
55
- end
56
-
57
- post '/invalid-missing-id/heroku/resources' do
58
- heroku_only!
59
- { :noid => 123 }.to_json
60
- end
61
-
62
- post '/invalid-missing-auth/heroku/resources' do
63
- { :id => 123 }.to_json
64
- end
65
-
66
-
67
- put '/working/heroku/resources/:id' do
68
- heroku_only!
69
- {}.to_json
70
- end
71
-
72
- put '/invalid-missing-auth/heroku/resources/:id' do
73
- { :id => 123 }.to_json
74
- end
75
-
76
- put '/invalid-status/heroku/resources/:id' do
77
- heroku_only!
78
- status 422
79
- {}.to_json
80
- end
81
-
82
-
83
- delete '/working/heroku/resources/:id' do
84
- heroku_only!
85
- "Ok"
86
- end
87
-
88
- def sso
89
- unauthorized! unless params[:id] && params[:token]
90
- unauthorized! unless params[:timestamp].to_i > (Time.now-60*2).to_i
91
- unauthorized! unless params[:token] == make_token
92
- response.set_cookie('heroku-nav-data', params['nav-data'])
93
- login
94
- end
95
-
96
- get '/working/heroku/resources/:id' do
97
- sso
98
- end
99
-
100
- post '/working/heroku/resources/:id/sso' do
101
- sso
102
- end
103
-
104
- def notoken
105
- unauthorized! unless params[:id] && params[:token]
106
- unauthorized! unless params[:timestamp].to_i > (Time.now-60*2).to_i
107
- response.set_cookie('heroku-nav-data', params['nav-data'])
108
- login
109
- end
110
-
111
- get '/notoken/heroku/resources/:id' do
112
- notoken
113
- end
114
-
115
- post '/notoken/heroku/resources/:id/sso' do
116
- notoken
117
- end
118
-
119
- def notimestamp
120
- unauthorized! unless params[:id] && params[:token]
121
- unauthorized! unless params[:token] == make_token
122
- response.set_cookie('heroku-nav-data', params['nav-data'])
123
- login
124
- end
125
-
126
- get '/notimestamp/heroku/resources/:id' do
127
- notimestamp
128
- end
129
-
130
- post '/notimestamp/heroku/resources/:id/sso' do
131
- notimestamp
132
- end
133
-
134
- def nolayout
135
- unauthorized! unless params[:id] && params[:token]
136
- unauthorized! unless params[:timestamp].to_i > (Time.now-60*2).to_i
137
- unauthorized! unless params[:token] == make_token
138
- response.set_cookie('heroku-nav-data', params['nav-data'])
139
- login(false)
140
- end
141
-
142
- get '/nolayout/heroku/resources/:id' do
143
- nolayout
144
- end
145
-
146
- post '/nolayout/heroku/resources/:id/sso' do
147
- nolayout
148
- end
149
-
150
- def nocookie
151
- unauthorized! unless params[:id] && params[:token]
152
- unauthorized! unless params[:timestamp].to_i > (Time.now-60*2).to_i
153
- unauthorized! unless params[:token] == make_token
154
- login
155
- end
156
-
157
- get '/nocookie/heroku/resources/:id' do
158
- nocookie
159
- end
160
-
161
- post '/nocookie/heroku/resources/:id/sso' do
162
- nocookie
163
- end
164
-
165
- def badcookie
166
- unauthorized! unless params[:id] && params[:token]
167
- unauthorized! unless params[:timestamp].to_i > (Time.now-60*2).to_i
168
- unauthorized! unless params[:token] == make_token
169
- response.set_cookie('heroku-nav-data', 'wrong value')
170
- login
171
- end
172
-
173
- get '/badcookie/heroku/resources/:id' do
174
- badcookie
175
- end
176
-
177
- post '/badcookie/heroku/resources/:id/sso' do
178
- badcookie
179
- end
180
-
181
- def sso_user
182
- head 404 unless params[:user] == 'username@example.com'
183
- sso
184
- end
185
-
186
- get '/user/heroku/resources/:id' do
187
- sso_user
188
- end
189
-
190
- post '/user/heroku/resources/:id/sso' do
191
- sso_user
192
- end
193
-
194
- get '/' do
195
- unauthorized! unless session[:logged_in]
196
- haml :index
197
- end
198
-
199
- __END__
200
-
201
- @@ index
202
- %html
203
- %body
204
- - if session[:heroku]
205
- #heroku-header
206
- %h1 Heroku
207
- %h1 Sample Addon
@@ -1,59 +0,0 @@
1
- require 'test/helper'
2
-
3
- class SsoCheckTest < Test::Unit::TestCase
4
- include Heroku::Kensa
5
-
6
- setup do
7
- @data = Manifest.new.skeleton.merge :id => 123
8
- @data['api']['sso_salt'] = 'SSO_SALT'
9
- end
10
-
11
- def check ; SsoCheck ; end
12
-
13
- ['POST', 'GET'].each do |method|
14
- context "via #{method}" do
15
- setup { @data['api']['sso'] = method }
16
-
17
- test "working sso request" do
18
- @data['api']['test'] += "working"
19
- assert_valid
20
- end
21
-
22
- test "rejects bad token" do
23
- @data['api']['test'] += "notoken"
24
- assert_invalid
25
- end
26
-
27
- test "rejects old timestamp" do
28
- @data['api']['test'] += "notimestamp"
29
- assert_invalid
30
- end
31
-
32
- test "reject omitted sso salt" do
33
- @data['api'].delete 'sso_salt'
34
- @data['api']['test'] += "working"
35
- assert_invalid
36
- end
37
-
38
- test "reject missing heroku layout" do
39
- @data['api']['test'] += "nolayout"
40
- assert_invalid
41
- end
42
-
43
- test "reject missing cookie" do
44
- @data['api']['test'] += "nocookie"
45
- assert_invalid
46
- end
47
-
48
- test "reject invalid cookie value" do
49
- @data['api']['test'] += "badcookie"
50
- assert_invalid
51
- end
52
-
53
- test "sends user param" do
54
- @data['api']['test'] += "user"
55
- assert_valid
56
- end
57
- end
58
- end
59
- end