@@ -111,201 +111,201 @@ def call(env)
111
111
112
112
private
113
113
114
- def sanitize_params! ( params )
115
- [ 'openid.sig' , 'openid.response_nonce' ] . each do |param |
116
- ( params [ param ] || '' ) . gsub! ( ' ' , '+' )
117
- end
114
+ def sanitize_params! ( params )
115
+ [ 'openid.sig' , 'openid.response_nonce' ] . each do |param |
116
+ ( params [ param ] || '' ) . gsub! ( ' ' , '+' )
118
117
end
118
+ end
119
119
120
- def begin_authentication ( env , qs )
121
- req = Rack ::Request . new ( env )
122
- params = self . class . parse_header ( qs )
123
- session = env [ "rack.session" ]
120
+ def begin_authentication ( env , qs )
121
+ req = Rack ::Request . new ( env )
122
+ params = self . class . parse_header ( qs )
123
+ session = env [ "rack.session" ]
124
124
125
- unless session
126
- raise RuntimeError , "Rack::OpenID requires a session"
127
- end
125
+ unless session
126
+ raise RuntimeError , "Rack::OpenID requires a session"
127
+ end
128
128
129
- consumer = ::OpenID ::Consumer . new ( session , @store )
130
- identifier = params [ 'identifier' ] || params [ 'identity' ]
131
-
132
- begin
133
- oidreq = consumer . begin ( identifier )
134
- add_simple_registration_fields ( oidreq , params )
135
- add_attribute_exchange_fields ( oidreq , params )
136
- add_oauth_fields ( oidreq , params )
137
- add_pape_fields ( oidreq , params )
138
-
139
- url = open_id_redirect_url ( req , oidreq , params )
140
- return redirect_to ( url )
141
- rescue ::OpenID ::OpenIDError , Timeout ::Error => e
142
- env [ RESPONSE ] = MissingResponse . new
143
- return @app . call ( env )
144
- end
129
+ consumer = ::OpenID ::Consumer . new ( session , @store )
130
+ identifier = params [ 'identifier' ] || params [ 'identity' ]
131
+
132
+ begin
133
+ oidreq = consumer . begin ( identifier )
134
+ add_simple_registration_fields ( oidreq , params )
135
+ add_attribute_exchange_fields ( oidreq , params )
136
+ add_oauth_fields ( oidreq , params )
137
+ add_pape_fields ( oidreq , params )
138
+
139
+ url = open_id_redirect_url ( req , oidreq , params )
140
+ return redirect_to ( url )
141
+ rescue ::OpenID ::OpenIDError , Timeout ::Error => e
142
+ env [ RESPONSE ] = MissingResponse . new
143
+ return @app . call ( env )
145
144
end
145
+ end
146
146
147
- def complete_authentication ( env )
148
- req = Rack ::Request . new ( env )
149
- session = env [ "rack.session" ]
147
+ def complete_authentication ( env )
148
+ req = Rack ::Request . new ( env )
149
+ session = env [ "rack.session" ]
150
150
151
- unless session
152
- raise RuntimeError , "Rack::OpenID requires a session"
153
- end
151
+ unless session
152
+ raise RuntimeError , "Rack::OpenID requires a session"
153
+ end
154
154
155
- oidresp = timeout_protection_from_identity_server {
156
- consumer = ::OpenID ::Consumer . new ( session , @store )
157
- consumer . complete ( flatten_params ( req . params ) , req . url )
158
- }
155
+ oidresp = timeout_protection_from_identity_server {
156
+ consumer = ::OpenID ::Consumer . new ( session , @store )
157
+ consumer . complete ( flatten_params ( req . params ) , req . url )
158
+ }
159
159
160
- env [ RESPONSE ] = oidresp
160
+ env [ RESPONSE ] = oidresp
161
161
162
- method = req . GET [ "_method" ]
163
- override_request_method ( env , method )
162
+ method = req . GET [ "_method" ]
163
+ override_request_method ( env , method )
164
164
165
- sanitize_query_string ( env )
166
- end
165
+ sanitize_query_string ( env )
166
+ end
167
167
168
- def flatten_params ( params )
169
- Rack ::Utils . parse_query ( Rack ::Utils . build_nested_query ( params ) )
170
- end
168
+ def flatten_params ( params )
169
+ Rack ::Utils . parse_query ( Rack ::Utils . build_nested_query ( params ) )
170
+ end
171
171
172
- def override_request_method ( env , method )
173
- return unless method
174
- method = method . upcase
175
- if HTTP_METHODS . include? ( method )
176
- env [ "REQUEST_METHOD" ] = method
177
- end
172
+ def override_request_method ( env , method )
173
+ return unless method
174
+ method = method . upcase
175
+ if HTTP_METHODS . include? ( method )
176
+ env [ "REQUEST_METHOD" ] = method
178
177
end
178
+ end
179
179
180
- def sanitize_query_string ( env )
181
- query_hash = env [ "rack.request.query_hash" ]
182
- query_hash . delete ( "_method" )
183
- query_hash . delete_if do |key , value |
184
- key =~ /^openid\. /
185
- end
186
-
187
- env [ "QUERY_STRING" ] = env [ "rack.request.query_string" ] =
188
- Rack ::Utils . build_query ( env [ "rack.request.query_hash" ] )
189
-
190
- qs = env [ "QUERY_STRING" ]
191
- request_uri = ( env [ "PATH_INFO" ] || "" ) . dup
192
- request_uri << "?" + qs unless qs == ""
193
- env [ "REQUEST_URI" ] = request_uri
180
+ def sanitize_query_string ( env )
181
+ query_hash = env [ "rack.request.query_hash" ]
182
+ query_hash . delete ( "_method" )
183
+ query_hash . delete_if do |key , value |
184
+ key =~ /^openid\. /
194
185
end
195
186
196
- def scheme_with_host_and_port ( req , host = nil )
197
- url = req . scheme + "://"
198
- url << ( host || req . host )
187
+ env [ "QUERY_STRING" ] = env [ "rack.request.query_string" ] =
188
+ Rack ::Utils . build_query ( env [ "rack.request.query_hash" ] )
199
189
200
- scheme , port = req . scheme , req . port
201
- if scheme == "https" && port != 443 ||
202
- scheme == "http" && port != 80
203
- url << ":#{ port } "
204
- end
190
+ qs = env [ "QUERY_STRING" ]
191
+ request_uri = ( env [ "PATH_INFO" ] || "" ) . dup
192
+ request_uri << "?" + qs unless qs == ""
193
+ env [ "REQUEST_URI" ] = request_uri
194
+ end
195
+
196
+ def scheme_with_host_and_port ( req , host = nil )
197
+ url = req . scheme + "://"
198
+ url << ( host || req . host )
205
199
206
- url
200
+ scheme , port = req . scheme , req . port
201
+ if scheme == "https" && port != 443 ||
202
+ scheme == "http" && port != 80
203
+ url << ":#{ port } "
207
204
end
208
205
209
- def realm ( req , domain = nil )
210
- if domain
211
- scheme_with_host_and_port ( req , domain )
212
- else
213
- scheme_with_host_and_port ( req )
214
- end
206
+ url
207
+ end
215
208
209
+ def realm ( req , domain = nil )
210
+ if domain
211
+ scheme_with_host_and_port ( req , domain )
212
+ else
213
+ scheme_with_host_and_port ( req )
216
214
end
217
215
218
- def request_url ( req )
219
- url = scheme_with_host_and_port ( req )
220
- url << req . script_name
221
- url << req . path_info
222
- url << "?#{ req . query_string } " if req . query_string . to_s . length > 0
223
- url
224
- end
216
+ end
225
217
226
- def redirect_to ( url )
227
- [ 303 , { "Content-Type" => "text/html" , "Location" => url } , [ ] ]
228
- end
218
+ def request_url ( req )
219
+ url = scheme_with_host_and_port ( req )
220
+ url << req . script_name
221
+ url << req . path_info
222
+ url << "?#{ req . query_string } " if req . query_string . to_s . length > 0
223
+ url
224
+ end
229
225
230
- def open_id_redirect_url ( req , oidreq , options )
231
- trust_root = options [ "trust_root" ]
232
- return_to = options [ "return_to" ]
233
- method = options [ "method" ]
234
- immediate = options [ "immediate" ] == "true"
226
+ def redirect_to ( url )
227
+ [ 303 , { "Content-Type" => "text/html" , "Location" => url } , [ ] ]
228
+ end
235
229
236
- realm = realm ( req , options [ "realm_domain" ] )
237
- request_url = request_url ( req )
230
+ def open_id_redirect_url ( req , oidreq , options )
231
+ trust_root = options [ "trust_root" ]
232
+ return_to = options [ "return_to" ]
233
+ method = options [ "method" ]
234
+ immediate = options [ "immediate" ] == "true"
238
235
239
- if return_to
240
- method ||= "get"
241
- else
242
- return_to = request_url
243
- method ||= req . request_method
244
- end
236
+ realm = realm ( req , options [ "realm_domain" ] )
237
+ request_url = request_url ( req )
245
238
246
- method = method . to_s . downcase
247
- oidreq . return_to_args [ '_method' ] = method unless method == "get"
248
- oidreq . redirect_url ( trust_root || realm , return_to || request_url , immediate )
239
+ if return_to
240
+ method ||= "get"
241
+ else
242
+ return_to = request_url
243
+ method ||= req . request_method
249
244
end
250
245
251
- def add_simple_registration_fields ( oidreq , fields )
252
- sregreq = ::OpenID ::SReg ::Request . new
253
-
254
- required = Array ( fields [ 'required' ] ) . reject ( &URL_FIELD_SELECTOR )
255
- sregreq . request_fields ( required , true ) if required . any?
246
+ method = method . to_s . downcase
247
+ oidreq . return_to_args [ '_method' ] = method unless method == "get"
248
+ oidreq . redirect_url ( trust_root || realm , return_to || request_url , immediate )
249
+ end
256
250
257
- optional = Array ( fields [ 'optional' ] ) . reject ( & URL_FIELD_SELECTOR )
258
- sregreq . request_fields ( optional , false ) if optional . any?
251
+ def add_simple_registration_fields ( oidreq , fields )
252
+ sregreq = :: OpenID :: SReg :: Request . new
259
253
260
- policy_url = fields [ 'policy_url' ]
261
- sregreq . policy_url = policy_url if policy_url
254
+ required = Array ( fields [ 'required' ] ) . reject ( & URL_FIELD_SELECTOR )
255
+ sregreq . request_fields ( required , true ) if required . any?
262
256
263
- oidreq . add_extension ( sregreq )
264
- end
257
+ optional = Array ( fields [ 'optional' ] ) . reject ( & URL_FIELD_SELECTOR )
258
+ sregreq . request_fields ( optional , false ) if optional . any?
265
259
266
- def add_attribute_exchange_fields ( oidreq , fields )
267
- axreq = :: OpenID :: AX :: FetchRequest . new
260
+ policy_url = fields [ 'policy_url' ]
261
+ sregreq . policy_url = policy_url if policy_url
268
262
269
- required = Array ( fields [ 'required' ] ) . select ( & URL_FIELD_SELECTOR )
270
- optional = Array ( fields [ 'optional' ] ) . select ( & URL_FIELD_SELECTOR )
263
+ oidreq . add_extension ( sregreq )
264
+ end
271
265
272
- if required . any? || optional . any?
273
- required . each do |field |
274
- axreq . add ( ::OpenID ::AX ::AttrInfo . new ( field , nil , true ) )
275
- end
266
+ def add_attribute_exchange_fields ( oidreq , fields )
267
+ axreq = ::OpenID ::AX ::FetchRequest . new
276
268
277
- optional . each do |field |
278
- axreq . add ( ::OpenID ::AX ::AttrInfo . new ( field , nil , false ) )
279
- end
269
+ required = Array ( fields [ 'required' ] ) . select ( &URL_FIELD_SELECTOR )
270
+ optional = Array ( fields [ 'optional' ] ) . select ( &URL_FIELD_SELECTOR )
280
271
281
- oidreq . add_extension ( axreq )
272
+ if required . any? || optional . any?
273
+ required . each do |field |
274
+ axreq . add ( ::OpenID ::AX ::AttrInfo . new ( field , nil , true ) )
282
275
end
283
- end
284
276
285
- def add_oauth_fields ( oidreq , fields )
286
- if ( consumer = fields [ 'oauth[consumer]' ] ) &&
287
- ( scope = fields [ 'oauth[scope]' ] )
288
- oauthreq = ::OpenID ::OAuth ::Request . new ( consumer , Array ( scope ) . join ( ' ' ) )
289
- oidreq . add_extension ( oauthreq )
277
+ optional . each do |field |
278
+ axreq . add ( ::OpenID ::AX ::AttrInfo . new ( field , nil , false ) )
290
279
end
280
+
281
+ oidreq . add_extension ( axreq )
291
282
end
283
+ end
292
284
293
- def add_pape_fields ( oidreq , fields )
294
- preferred_auth_policies = fields [ 'pape[preferred_auth_policies]' ]
295
- max_auth_age = fields [ 'pape[max_auth_age]' ]
296
- if preferred_auth_policies || max_auth_age
297
- preferred_auth_policies = preferred_auth_policies . split if preferred_auth_policies . is_a? ( String )
298
- pape_request = ::OpenID ::PAPE ::Request . new ( preferred_auth_policies || [ ] , max_auth_age )
299
- oidreq . add_extension ( pape_request )
300
- end
285
+ def add_oauth_fields ( oidreq , fields )
286
+ if ( consumer = fields [ 'oauth[consumer]' ] ) &&
287
+ ( scope = fields [ 'oauth[scope]' ] )
288
+ oauthreq = ::OpenID ::OAuth ::Request . new ( consumer , Array ( scope ) . join ( ' ' ) )
289
+ oidreq . add_extension ( oauthreq )
301
290
end
291
+ end
302
292
303
- def default_store
304
- require 'openid/store/memory'
305
- ::OpenID ::Store ::Memory . new
293
+ def add_pape_fields ( oidreq , fields )
294
+ preferred_auth_policies = fields [ 'pape[preferred_auth_policies]' ]
295
+ max_auth_age = fields [ 'pape[max_auth_age]' ]
296
+ if preferred_auth_policies || max_auth_age
297
+ preferred_auth_policies = preferred_auth_policies . split if preferred_auth_policies . is_a? ( String )
298
+ pape_request = ::OpenID ::PAPE ::Request . new ( preferred_auth_policies || [ ] , max_auth_age )
299
+ oidreq . add_extension ( pape_request )
306
300
end
301
+ end
302
+
303
+ def default_store
304
+ require 'openid/store/memory'
305
+ ::OpenID ::Store ::Memory . new
306
+ end
307
307
308
- def timeout_protection_from_identity_server
308
+ def timeout_protection_from_identity_server
309
309
yield
310
310
rescue Timeout ::Error
311
311
TimeoutResponse . new
0 commit comments