Skip to content

Commit d0ac1db

Browse files
Merge pull request #18 from FireTail-io/fix-openapi-spec-size-limit
load openapi spec via go middleware
2 parents 3a2c39d + 8cf8c88 commit d0ac1db

File tree

4 files changed

+11
-56
lines changed

4 files changed

+11
-56
lines changed

src/nginx_module/filter_response_body.c

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,21 +96,16 @@ ngx_int_t FiretailResponseBodyFilter(ngx_http_request_t *request, ngx_chain_t *c
9696
}
9797
ngx_log_debug(NGX_LOG_DEBUG, request->connection->log, 0, "Validating response body...");
9898

99-
char *schema = ngx_palloc(request->pool, main_config->FiretailAppSpec.len);
100-
ngx_memcpy(schema, main_config->FiretailAppSpec.data, main_config->FiretailAppSpec.len);
101-
10299
validation_result = response_body_validator(
103100
(char *)main_config->FiretailUrl.data, main_config->FiretailUrl.len, (char *)main_config->FiretailApiToken.data,
104101
main_config->FiretailApiToken.len, (char *)ctx->request_body, (int)ctx->request_body_size,
105-
(char *)ctx->request_headers_json, (int)ctx->request_headers_json_size, schema, strlen(schema),
106-
ctx->response_body, ctx->response_body_size, response_headers_json_string, strlen(response_headers_json_string),
102+
(char *)ctx->request_headers_json, (int)ctx->request_headers_json_size, ctx->response_body,
103+
ctx->response_body_size, response_headers_json_string, strlen(response_headers_json_string),
107104
request->unparsed_uri.data, request->unparsed_uri.len, ctx->status_code, request->method_name.data,
108105
request->method_name.len);
109106
ngx_log_debug(NGX_LOG_DEBUG, request->connection->log, 0, "Validation response result: %d", validation_result.r0);
110107
ngx_log_debug(NGX_LOG_DEBUG, request->connection->log, 0, "Validating response body: %s", validation_result.r1);
111108

112-
ngx_pfree(request->pool, schema);
113-
114109
// if validation result is not successful
115110
if (validation_result.r0 > 0) {
116111
return ngx_http_firetail_send(request, ctx, NULL, validation_result.r1);

src/nginx_module/firetail_module.c

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,8 @@ static ngx_int_t ngx_http_firetail_handler_internal(ngx_http_request_t *request)
8787

8888
// Update the ctx with the new updated body
8989
ctx->request_body = updated_request_body;
90-
// run the validation
91-
FiretailMainConfig *main_config = ngx_http_get_module_main_conf(request, ngx_firetail_module);
9290

91+
// run the validation
9392
void *validator_module = dlopen("/etc/nginx/modules/firetail-validator.so", RTLD_LAZY);
9493
if (!validator_module) {
9594
return NGX_ERROR;
@@ -103,23 +102,17 @@ static ngx_int_t ngx_http_firetail_handler_internal(ngx_http_request_t *request)
103102
}
104103
ngx_log_debug(NGX_LOG_DEBUG, request->connection->log, 0, "Validating request body...");
105104

106-
char *schema = ngx_palloc(request->pool, main_config->FiretailAppSpec.len);
107-
ngx_memcpy(schema, main_config->FiretailAppSpec.data, main_config->FiretailAppSpec.len);
108-
109-
struct ValidateRequestBody_return validation_result = request_body_validator(
110-
schema, strlen(schema), ctx->request_body, ctx->request_body_size, request->unparsed_uri.data,
111-
request->unparsed_uri.len, request->method_name.data, request->method_name.len, (char *)ctx->request_headers_json,
112-
ctx->request_headers_json_size);
105+
struct ValidateRequestBody_return validation_result =
106+
request_body_validator(ctx->request_body, ctx->request_body_size, request->unparsed_uri.data,
107+
request->unparsed_uri.len, request->method_name.data, request->method_name.len,
108+
(char *)ctx->request_headers_json, ctx->request_headers_json_size);
113109

114110
ngx_log_debug(NGX_LOG_DEBUG, request->connection->log, 0, "Validation request result: %d", validation_result.r0);
115111
ngx_log_debug(NGX_LOG_DEBUG, request->connection->log, 0, "Validating request body: %s", validation_result.r1);
116112

117113
// if validation is unsuccessful, return bad request
118114
if (validation_result.r0 > 0) return ngx_http_firetail_request(request, NULL, chain_head, validation_result.r1);
119115

120-
// else continue request
121-
ngx_pfree(request->pool, schema);
122-
123116
dlclose(validator_module);
124117

125118
return NGX_OK; // can be NGX_DECLINED - see ngx_http_mirror_handler_internal
@@ -201,34 +194,6 @@ static void *CreateFiretailMainConfig(ngx_conf_t *configuration_object) {
201194
http_main_config->FiretailApiToken = firetail_api_token;
202195
http_main_config->FiretailUrl = firetail_url;
203196

204-
// load appspec schema
205-
// schema file pointer
206-
FILE *schema;
207-
208-
// initialize variables with an arbitary size
209-
char data[SIZE];
210-
char str[SIZE];
211-
212-
// open schema spec
213-
schema = fopen("/etc/nginx/appspec.yml", "r");
214-
if (schema == NULL) {
215-
printf("Error! count not load schema");
216-
exit(1);
217-
}
218-
219-
// resize data
220-
while (fgets(str, SIZE, schema)) {
221-
// concatenate the string with line termination \0
222-
// at the end
223-
strcat(data, str);
224-
}
225-
226-
ngx_str_t spec = ngx_string(data);
227-
228-
http_main_config->FiretailAppSpec = spec;
229-
230-
fclose(schema);
231-
232197
return http_main_config;
233198
}
234199

src/nginx_module/firetail_module.h

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,17 @@ struct ValidateResponseBody_return {
1010
char* r1;
1111
};
1212
typedef struct ValidateResponseBody_return (*ValidateResponseBody)(char*, int, char*, int, char*, int, char*, int,
13-
char*, int, void*, int, char*, int, void*, int, int,
14-
void*, int);
13+
void*, int, char*, int, void*, int, int, void*, int);
1514

1615
struct ValidateRequestBody_return {
1716
int r0;
1817
char* r1;
1918
};
20-
typedef struct ValidateRequestBody_return (*ValidateRequestBody)(char*, int, void*, int, void*, int, void*, int, void*,
21-
int);
19+
typedef struct ValidateRequestBody_return (*ValidateRequestBody)(void*, int, void*, int, void*, int, void*, int);
2220

2321
// This config struct will hold our API key
2422
typedef struct {
2523
ngx_str_t FiretailApiToken; // TODO: this should probably be a *ngx_str_t
26-
ngx_str_t FiretailAppSpec;
2724
ngx_str_t FiretailUrl;
2825
} FiretailMainConfig;
2926

src/validator/main.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ var firetailResponseMiddleware func(next http.Handler) http.Handler
2323

2424
//export ValidateRequestBody
2525
func ValidateRequestBody(
26-
specBytes unsafe.Pointer, specLength C.int,
2726
bodyCharPtr unsafe.Pointer, bodyLength C.int,
2827
pathCharPtr unsafe.Pointer, pathLength C.int,
2928
methodCharPtr unsafe.Pointer, methodLength C.int,
@@ -33,7 +32,7 @@ func ValidateRequestBody(
3332
if firetailRequestMiddleware == nil {
3433
var err error
3534
firetailRequestMiddleware, err = firetail.GetMiddleware(&firetail.Options{
36-
OpenapiBytes: C.GoBytes(specBytes, specLength),
35+
OpenapiSpecPath: "/etc/nginx/appspec.yml",
3736
LogsApiToken: "",
3837
LogsApiUrl: "",
3938
DebugErrs: true,
@@ -97,7 +96,6 @@ func ValidateResponseBody(
9796
tokenCharPtr unsafe.Pointer, tokenLength C.int,
9897
reqBodyCharPtr unsafe.Pointer, reqBodyLength C.int,
9998
reqHeadersJsonCharPtr unsafe.Pointer, reqHeadersJsonLength C.int,
100-
specBytes unsafe.Pointer, specLength C.int,
10199
resBodyCharPtr unsafe.Pointer, resBodyLength C.int,
102100
resHeadersJsonCharPtr unsafe.Pointer, resHeadersJsonLength C.int,
103101
pathCharPtr unsafe.Pointer, pathLength C.int,
@@ -107,7 +105,7 @@ func ValidateResponseBody(
107105
if firetailResponseMiddleware == nil {
108106
var err error
109107
firetailResponseMiddleware, err = firetail.GetMiddleware(&firetail.Options{
110-
OpenapiBytes: C.GoBytes(specBytes, specLength),
108+
OpenapiSpecPath: "/etc/nginx/appspec.yml",
111109
LogsApiToken: strings.TrimSpace(string(C.GoBytes(tokenCharPtr, tokenLength))),
112110
LogsApiUrl: strings.TrimSpace(string(C.GoBytes(urlCharPtr, urlLength))),
113111
DebugErrs: true,

0 commit comments

Comments
 (0)