Skip to content

Commit 20acb4a

Browse files
author
Konstantin Munteanu
authored
Add prefix header (#62)
* Add prefix header * rubocop
1 parent 38b5c1e commit 20acb4a

File tree

4 files changed

+34
-13
lines changed

4 files changed

+34
-13
lines changed

README.md

+18
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,21 @@ gem 'api_valve'
1818

1919
See the [examples](https://github.com/mkon/api_valve/tree/master/examples) section on how to
2020
create & configure your own proxy using this gem.
21+
22+
### Headers
23+
24+
By default the following headers are forwarded:
25+
26+
* `Accept`
27+
* `Content-Type`
28+
* `User-Agent`
29+
* `X-Real-IP`
30+
* `X-Request-Id`
31+
32+
Additionally these headers are generated:
33+
34+
* `X-Forwarded-For`: The ApiGateway is added to the list
35+
* `X-Forwarded-Host`: Filled with original request host
36+
* `X-Forwarded-Port`: Filled with original request port
37+
* `X-Forwarded-Prefix`: Filled with the path prefix of the forwarder within the Api Gateway (eg `SCRIPT_NAME` env)
38+
* `X-Forwarded-Proto`: Filled with original request scheme

api_valve.gemspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ $LOAD_PATH.push File.expand_path('lib', __dir__)
33
# Describe your gem and declare its dependencies:
44
Gem::Specification.new do |s|
55
s.name = 'api_valve'
6-
s.version = ENV.fetch 'VERSION', '0.7.4'
6+
s.version = ENV.fetch 'VERSION', '0.8.0'
77
s.authors = ['mkon']
88
s.email = ['[email protected]']
99
s.homepage = 'https://github.com/mkon/api_valve'

lib/api_valve/forwarder/request.rb

+6-5
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,12 @@ def permission_handler
7676

7777
def forwarded_headers
7878
{
79-
'X-Forwarded-For' => x_forwarded_for,
80-
'X-Forwarded-Host' => original_request.host,
81-
'X-Forwarded-Port' => original_request.port.to_s,
82-
'X-Forwarded-Proto' => original_request.scheme
83-
}
79+
'X-Forwarded-For' => x_forwarded_for,
80+
'X-Forwarded-Host' => original_request.host,
81+
'X-Forwarded-Port' => original_request.port.to_s,
82+
'X-Forwarded-Prefix' => original_request.env['SCRIPT_NAME'].presence,
83+
'X-Forwarded-Proto' => original_request.scheme
84+
}.compact
8485
end
8586

8687
def override_path(options)

spec/api_valve/forwarder/request_spec.rb

+9-7
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
'HTTP_X_FORWARDED_PROTO' => 'https',
1717
'HTTP_X_REQUEST_ID' => 'http-x-request-id-123',
1818
'HTTP_USER_AGENT' => 'Faraday',
19-
'HTTP_OTHER_HEADER' => 'Ignored'
19+
'HTTP_OTHER_HEADER' => 'Ignored',
20+
'SCRIPT_NAME' => '/some-prefix'
2021
}
2122
end
2223

@@ -31,12 +32,13 @@
3132

3233
it 'exposes the headers correctly' do # rubocop:disable RSpec/ExampleLength
3334
expect(headers).to eq(
34-
'User-Agent' => 'Faraday',
35-
'X-Forwarded-For' => '212.122.121.211, 10.0.0.21',
36-
'X-Forwarded-Host' => 'api.example.com',
37-
'X-Forwarded-Port' => '443',
38-
'X-Forwarded-Proto' => 'https',
39-
'X-Request-Id' => 'http-x-request-id-123'
35+
'User-Agent' => 'Faraday',
36+
'X-Forwarded-For' => '212.122.121.211, 10.0.0.21',
37+
'X-Forwarded-Host' => 'api.example.com',
38+
'X-Forwarded-Port' => '443',
39+
'X-Forwarded-Prefix' => '/some-prefix',
40+
'X-Forwarded-Proto' => 'https',
41+
'X-Request-Id' => 'http-x-request-id-123'
4042
)
4143
end
4244
end

0 commit comments

Comments
 (0)