# Kibana plugin. Is it possible to use joi validation in router?

**URL:** <https://discuss.elastic.co/t/kibana-plugin-is-it-possible-to-use-joi-validation-in-router/255438>\
**Category:** Kibana\
**Tags:** kibana-plugin-development\
**Created:** [November 15, 2020, 1:13pm UTC](https://discuss.elastic.co/t/kibana-plugin-is-it-possible-to-use-joi-validation-in-router/255438 "2020-11-15T13:13:35Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![16318a22907f3cbfa04b](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/16318a22907f3cbfa04b/32/36875_2.png) [@16318a22907f3cbfa04b](https://discuss.elastic.co/u/16318a22907f3cbfa04b)\
**Post date:** [November 15, 2020, 1:13pm UTC](https://discuss.elastic.co/t/kibana-plugin-is-it-possible-to-use-joi-validation-in-router/255438/1 "2020-11-15T13:13:35Z")

</div>

the schema from @kibana/config-schema has too few features

---

<div class="post-metadata">

**Author:** ![Mikhail\_Shustov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/mikhail_shustov/32/49186_2.png) [@Mikhail\_Shustov](https://discuss.elastic.co/u/Mikhail_Shustov)\
**Post date:** [November 16, 2020, 1:09pm UTC](https://discuss.elastic.co/t/kibana-plugin-is-it-possible-to-use-joi-validation-in-router/255438/2 "2020-11-16T13:09:51Z")

</div>

yes, `validation` supports a custom validation function [https://github.com/elastic/kibana/blob/4c49d5d1be0b959be515307131c1a420226c372b/src/core/server/http/http\_server.test.ts#L454-L460](https://github.com/elastic/kibana/blob/4c49d5d1be0b959be515307131c1a420226c372b/src/core/server/http/http_server.test.ts#L454-L460)

---

<div class="post-metadata">

**Author:** ![Pierre\_Gayvallet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/pierre_gayvallet/32/77239_2.png) [@Pierre\_Gayvallet](https://discuss.elastic.co/u/Pierre_Gayvallet)\
**Post date:** [November 17, 2020, 3:46pm UTC](https://discuss.elastic.co/t/kibana-plugin-is-it-possible-to-use-joi-validation-in-router/255438/3 "2020-11-17T15:46:09Z")

</div>

Just for our information, which `joi` feature do you need to use that is not supported by `config-schema`?

---

<div class="post-metadata">

**Author:** ![16318a22907f3cbfa04b](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/16318a22907f3cbfa04b/32/36875_2.png) [@16318a22907f3cbfa04b](https://discuss.elastic.co/u/16318a22907f3cbfa04b)\
**Post date:** [November 27, 2020, 11:03am UTC](https://discuss.elastic.co/t/kibana-plugin-is-it-possible-to-use-joi-validation-in-router/255438/4 "2020-11-27T11:03:43Z")

</div>

First of all, config-schema is not documented or I couldn't find the documentation.  
In practice, I need more specific definitions of the schema of such entities as a string, for example. What string is this? Alphanumeric? Hostname? IP address? Email address?  
Joi has a very large set of definitions. I can add Joi to my dependencies, import it, and use Joi.validate inside the route handle. But the code in this case is not so clear.

---

<div class="post-metadata">

**Author:** ![Pierre\_Gayvallet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/pierre_gayvallet/32/77239_2.png) [@Pierre\_Gayvallet](https://discuss.elastic.co/u/Pierre_Gayvallet)\
**Post date:** [December 1, 2020, 7:20am UTC](https://discuss.elastic.co/t/kibana-plugin-is-it-possible-to-use-joi-validation-in-router/255438/5 "2020-12-01T07:20:18Z")

</div>

> First of all, config-schema is not documented or I couldn't find the documentation

The documentation for `config-schema` is available in the package's readme: [https://github.com/elastic/kibana/blob/9318862f1967d6fefdfca5e94417ff1617e5ba06/packages/kbn-config-schema/README.md](https://github.com/elastic/kibana/blob/9318862f1967d6fefdfca5e94417ff1617e5ba06/packages/kbn-config-schema/README.md)

> I need more specific definitions of the schema of such entities as a string, for example. What string is this? Alphanumeric? Hostname? IP address? Email address

We do have specific types for `string`, `ip` and `uri`, but we don't have out-of the box types for `email` or `alphanum` for example.

Now, all `config-schema` types support a custom `validate` option, that would answer this need:

```auto
const alphanum = schema.string({
   validate: (value) => {
      if(!alphanumRegexp.test(value)) {
          return 'my error message';
      }
   }
})

```

That being said, if you do want to use another validation lib such as `joi`, it is possible, as the route validation supports custom validation functions, as @Mikhail_Shustov mentioned

```auto
router.post(
    {
      path: '/',
      validate: {
        body: (body= {}, { ok, badRequest }) => {
           const { value, error } = myJoiSchema.validate(body);
           if (error) return badRequest(error.msg, ['body']);
           return ok(body);
        },
      },
    },
    handler
  );

```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [December 29, 2020, 7:20am UTC](https://discuss.elastic.co/t/kibana-plugin-is-it-possible-to-use-joi-validation-in-router/255438/6 "2020-12-29T07:20:28Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
