fastify-openapi-glue
Version:
generate a fastify configuration from an openapi specification
68 lines (56 loc) • 2.76 kB
Markdown
<h1 align="center">fastify-openapi-glue</h1>
The [OpenApi](https://www.openapis.org/) `Operation` object allows for security requirements that specify which security scheme(s) should be applied to this operation. OpenApi also allows for global security requirements via the `/components/security` property (v3) or the `/security` property (v2).
You can specify your own securityHandlers with the `securityHandlers` option.
If the provided object has an async `initialize` function then fastify-openapi-glue will call this function with the `/components/securitySchemes` property (v3) or the `/securityDefinitions` property (v2) of the specification provided.
In the petstore example specification there is a section:
```json
"/pet": {
"post": {
...
"summary": "Add a new pet to the store",
"description": "",
"operationId": "addPet",
...
"security": [
{
"petstore_auth": [
"write:pets",
"read:pets"
]
}
],
```
If you provide a securityHandler called `petstore_auth` then it will be called as `petstore_auth(request,reply, params)` where request and reply will be fastify request and reply objects and params contains `["write:pets", "read:pets"]`.
If you want authentication to succeed you can simply return. If you want authentication to fail you can just throw an error.
If your error contains a `statusCode` property then the status code of the last failing handler will be passed to fastify. The default status code that is returned upon validation failure is `401`.
Any errors that result from `securityHandlers` are available to registered error handlers. E.g.:
```javascript
fastify.setErrorHandler((err, req, reply) => {
reply.code(err.statusCode).send(err);
});
```
will return errors originating from the securityHandlers as well in `err.errors`.
**Please make sure this does not expose sensitive information to the requestor!**
You can use `err.errors` also to trigger other behaviour in a registered error handler.
Using multiple securityHandlers it is possible to use AND and OR logic:
E.g.:
```json
...
{
"petstore_auth1": [
"read:pets"
],
"petstore_auth2": [
"read:pets"
],
},
{
"petstore_auth3": [
"read:pets"
],
},
```
means that authorization is granted if `((petstore_auth1("read:pets") AND petstore_auth2("read:pets")) OR (petstore_auth3("read:pets")))` returns without error.
For a more elaborate example see the [examples/generated-javascript-project](/examples/generated-javascript-project) folder.