nginxinc / crossplane

Quick and reliable way to convert NGINX configurations into JSON and back.
Apache License 2.0
717 stars 86 forks source link

`http` `types` blocks trigger various analyser failures #101

Open chrisnovakovic opened 2 years ago

chrisnovakovic commented 2 years ago

Describe the bug

The analyser doesn't take into account the special syntax of http types blocks, in which directives are arbitrary MIME types. This means that crossplane doesn't recognise Nginx configurations containing types blocks as valid when running in strict mode, which verifies that directive names are present in the analyser's allowlist. A similar problem occurs when check_ctx=True is set via the API.

To Reproduce

Run crossplane parse --strict on the following Nginx configuration:

http {
    types {
        text/html  html;
        image/gif  gif;
        image/jpeg jpg jpeg;
    }
}

This outputs:

{"status":"failed","errors":[{"file":"nginx.conf","error":"unknown directive \"text/html\" in nginx.conf:3","line":3},{"file":"nginx.conf","error":"unknown directive \"image/gif\" in nginx.conf:4","line":4},{"file":"nginx.conf","error":"unknown directive \"image/jpeg\" in nginx.conf:5","line":5}],"config":[{"file":"nginx.conf","status":"failed","errors":[{"error":"unknown directive \"text/html\" in nginx.conf:3","line":3},{"error":"unknown directive \"image/gif\" in nginx.conf:4","line":4},{"error":"unknown directive \"image/jpeg\" in nginx.conf:5","line":5}],"parsed":[{"directive":"http","line":1,"args":[],"block":[{"directive":"types","line":2,"args":[],"block":[]}]}]}]}

Expected behavior

No errors are encountered, and an AST is printed.

Your environment

crossplane v0.5.7 (although the problem also exists on master)