@@ -29,9 +29,12 @@ type SwaggerLoader struct {
29
29
// IsExternalRefsAllowed enables visiting other files
30
30
IsExternalRefsAllowed bool
31
31
32
- // LoadSwaggerFromURIFunc allows overriding the file/URL reading func
32
+ // LoadSwaggerFromURIFunc allows overriding the swagger file/URL reading func
33
33
LoadSwaggerFromURIFunc func (loader * SwaggerLoader , url * url.URL ) (* Swagger , error )
34
34
35
+ // ReadFromURIFunc allows overriding the any file/URL reading func
36
+ ReadFromURIFunc func (loader * SwaggerLoader , url * url.URL ) ([]byte , error )
37
+
35
38
Context context.Context
36
39
37
40
visitedFiles map [string ]struct {}
@@ -68,7 +71,7 @@ func (swaggerLoader *SwaggerLoader) loadSwaggerFromURIInternal(location *url.URL
68
71
if f != nil {
69
72
return f (swaggerLoader , location )
70
73
}
71
- data , err := readURL (location )
74
+ data , err := swaggerLoader . readURL (location )
72
75
if err != nil {
73
76
return nil , err
74
77
}
@@ -96,7 +99,7 @@ func (swaggerLoader *SwaggerLoader) loadSingleElementFromURI(ref string, rootPat
96
99
return fmt .Errorf ("could not resolve path: %v" , err )
97
100
}
98
101
99
- data , err := readURL (resolvedPath )
102
+ data , err := swaggerLoader . readURL (resolvedPath )
100
103
if err != nil {
101
104
return err
102
105
}
@@ -107,7 +110,12 @@ func (swaggerLoader *SwaggerLoader) loadSingleElementFromURI(ref string, rootPat
107
110
return nil
108
111
}
109
112
110
- func readURL (location * url.URL ) ([]byte , error ) {
113
+ func (swaggerLoader * SwaggerLoader ) readURL (location * url.URL ) ([]byte , error ) {
114
+ f := swaggerLoader .ReadFromURIFunc
115
+ if f != nil {
116
+ return f (swaggerLoader , location )
117
+ }
118
+
111
119
if location .Scheme != "" && location .Host != "" {
112
120
resp , err := http .Get (location .String ())
113
121
if err != nil {
@@ -143,7 +151,7 @@ func (swaggerLoader *SwaggerLoader) loadSwaggerFromFileInternal(path string) (*S
143
151
x , err := f (swaggerLoader , pathAsURL )
144
152
return x , err
145
153
}
146
- data , err := ioutil . ReadFile ( path )
154
+ data , err := swaggerLoader . readURL ( pathAsURL )
147
155
if err != nil {
148
156
return nil , err
149
157
}
0 commit comments