File tree Expand file tree Collapse file tree 2 files changed +55
-2
lines changed
lib/grape-swagger/openapi_3 Expand file tree Collapse file tree 2 files changed +55
-2
lines changed Original file line number Diff line number Diff line change @@ -23,13 +23,18 @@ def content_types_for(target_class)
23
23
# openapi 3.0 related parts
24
24
#
25
25
# required keys for SwaggerObject
26
- def swagger_object ( _target_class , _request , options )
26
+ def swagger_object ( _target_class , request , options )
27
+ url = GrapeSwagger ::DocMethods ::OptionalObject . build ( :host , options , request )
28
+ base_path = GrapeSwagger ::DocMethods ::OptionalObject . build ( :base_path , options , request )
29
+ servers = options [ :servers ] || [ { url : "#{ request . scheme } ://#{ url } #{ base_path } " } ]
30
+ servers = servers . is_a? ( Hash ) ? [ servers ] : servers
31
+
27
32
object = {
28
33
info : info_object ( options [ :info ] . merge ( version : options [ :doc_version ] ) ) ,
29
34
openapi : '3.0.0' ,
30
35
security : options [ :security ] ,
31
36
authorizations : options [ :authorizations ] ,
32
- servers : options [ : servers] . is_a? ( Hash ) ? [ options [ :servers ] ] : options [ :servers ]
37
+ servers : servers
33
38
}
34
39
35
40
if options [ :security_definitions ] || options [ :security ]
Original file line number Diff line number Diff line change
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe 'host in the swagger_doc' do
6
+ before :all do
7
+ module TheApi
8
+ class EmptyApi < Grape ::API
9
+ format :json
10
+
11
+ desc 'This gets something.'
12
+ get '/something' do
13
+ { bla : 'something' }
14
+ end
15
+
16
+ add_swagger_documentation openapi_version : '3.0'
17
+ end
18
+ end
19
+ end
20
+
21
+ def app
22
+ TheApi ::EmptyApi
23
+ end
24
+
25
+ describe 'host should include port' do
26
+ subject do
27
+ get 'http://example.com:8080/swagger_doc'
28
+ JSON . parse ( last_response . body )
29
+ end
30
+
31
+ specify do
32
+ expect ( subject [ 'servers' ] . first [ 'url' ] ) . to eq 'http://example.com:8080'
33
+ end
34
+ end
35
+
36
+ describe 'respect X-Forwarded-Host over Host header' do
37
+ subject do
38
+ header 'Host' , 'dummy.example.com'
39
+ header 'X-Forwarded-Host' , 'real.example.com'
40
+ get '/swagger_doc'
41
+ JSON . parse ( last_response . body )
42
+ end
43
+
44
+ specify do
45
+ expect ( subject [ 'servers' ] . first [ 'url' ] ) . to eq 'http://real.example.com'
46
+ end
47
+ end
48
+ end
You can’t perform that action at this time.
0 commit comments