Skip to content
This repository was archived by the owner on Dec 10, 2022. It is now read-only.

Commit 2db1514

Browse files
committed
http_servlet: pass servlet attributes to Rack
This is for plugins to get access to killbill_tenant, set by the TenantFilter. Signed-off-by: Pierre-Alexandre Meyer <pierre@mouraf.org>
1 parent 0342813 commit 2db1514

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

lib/killbill/http_servlet.rb

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,14 @@ def service(servlet_request, servlet_response)
5555
headers[name] = servlet_request.get_headers(name).to_a
5656
end
5757

58-
response_status, response_headers, response_body = rack_service(request_uri, method, query_string, input, scheme, server_name, server_port, content_type, content_length, headers)
58+
# Pass original attributes (e.g. to get access to killbill_tenant)
59+
attributes = {}
60+
servlet_request.attribute_names.each do |name|
61+
value = servlet_request.get_attribute(name)
62+
attributes[name] = value || ''
63+
end
64+
65+
response_status, response_headers, response_body = rack_service(request_uri, method, query_string, input, scheme, server_name, server_port, content_type, content_length, headers, attributes)
5966

6067
# Set status
6168
servlet_response.status = response_status
@@ -80,10 +87,10 @@ def service(servlet_request, servlet_response)
8087
response_body.close if response_body.respond_to? :close
8188
end
8289

83-
def rack_service(request_uri = '/', method = 'GET', query_string = '', input = '', scheme = 'http', server_name = 'localhost', server_port = 4567, content_type = 'text/plain', content_length = 0, headers = {})
90+
def rack_service(request_uri = '/', method = 'GET', query_string = '', input = '', scheme = 'http', server_name = 'localhost', server_port = 4567, content_type = 'text/plain', content_length = 0, headers = {}, attributes = {})
8491
return 503, {}, [] if @app.nil?
8592

86-
rack_env = {
93+
rack_env = attributes.merge({
8794
'rack.version' => Rack::VERSION,
8895
'rack.multithread' => true,
8996
'rack.multiprocess' => false,
@@ -99,7 +106,7 @@ def rack_service(request_uri = '/', method = 'GET', query_string = '', input = '
99106
'QUERY_STRING' => (query_string || ""),
100107
'SERVER_NAME' => server_name,
101108
'SERVER_PORT' => server_port.to_s
102-
}
109+
})
103110

104111
rack_env['CONTENT_TYPE'] = content_type unless content_type.nil?
105112
rack_env['CONTENT_LENGTH'] = content_length unless content_length.nil?

0 commit comments

Comments
 (0)