# Method and Route Validator

import Tag from '~/components/webkit/Tag.vue';

<Tag severity="info">
Preview
</Tag>

A integração **Method and Route Validator** pode ser usada para proteger sua aplicação bloqueando requisições com base na URI e método utilizados. Ela funciona validando os argumentos e verificando se a requisição coincide com os padrões definidos em qualquer um dos valores.

Com essa integração, você pode definir uma lista de rotas e qual método cada rota espera. Cada vez que a função é executada, ela seguirá as seguintes etapas:

1. Validará os argumentos passados para a function.
2. Verificará se a requisição coincide com os padrões definidos para as rotas.
  - Se uma correspondência for encontrada, a função executará uma ação de bloqueio especificada pelo usuário.
  - Se não for encontrada nenhuma correspondência, a função pode ser configurada para continuar a requisição ou bloqueá-la.
3. Se os argumentos forem inválidos, ela escreverá uma mensagem de log e continuará a requisição.

---

## Obtenha a integração

Para instalar esta integração:

1. Acesse [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Marketplace**.
2. Na página inicial do Marketplace, selecione o cartão da **Method and Route Validator**.
3. Na página de integração, clique no botão **Install**.

Você verá uma mensagem indicando que sua integração foi instalada com sucesso.

:::tip
Você pode procurar qualquer integração navegando pelos cards ou digitando uma palavra-chave na barra de busca.
:::

---

## Configure a integração

Depois de instalar a integração **Method and Route Validator**, você precisará concluir as etapas explicadas abaixo para configurá-la.

### Configure uma regra no Firewall

Siga estes passos:

1. No canto superior esquerdo, abra o **Products menu** e selecione **Firewall** na seção **Secure**.
2. Clique no botão **+ Firewall**.
3. Dê um nome fácil de lembrar ao seu firewall.
4. Ative a opção **Functions** na seção **Firewall Modules**.
  - Esta ação dá acesso a functions no firewall.
5. Clique no botão **Save**.

Pronto. Agora você instanciou o firewall para sua função e tem acesso a functions em seu firewall.

:::caution[Atenção]
Se um produto ou módulo estiver ativado, pode gerar custos relacionados ao uso. Consulte a [página de preços](/pt-br/documentacao/produtos/precos/) para obter mais informações.
:::

### Configure uma função no Firewall

Enquanto ainda estiver na página do **Firewall**:

1. Selecione a aba **Functions Instances**.
2. Clique no botão **+ Function Instance**.
3. Dê um nome fácil de lembrar à sua instância.
4. No menu suspenso, selecione a função **Method and Route Validator**.
5. Na caixa **Arguments**, passe suas variáveis, como no exemplo:

```json
{
  "restricted_mode": false,
  "action": "deny",
  "routes": [
    {
      "match_type": "equals",
      "path": "/my/route/",
      "methods": ["GET", "POST"]
    },
    {
      "match_type": "contains",
      "path": "/something/",
      "methods": ["POST"]
    },
    {
      "match_type": "regex",
      "path": "^.test.*",
      "methods": ["GET", "POST", "PATCH", "DELETE"]
    }
  ]
}
```

Onde:

| Propriedade | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `restricted_mode` | Boolean | Não | Indica se a função deve operar no modo restrito. Valor padrão: `false`. |
| `action` | String | Sim | Define qual ação usar quando a função identifica a requisição como inválida. |
| `routes` | Array | Sim | Contém todas as URIs que a aplicação protegida espera lidar. |
| `routes.match_type` | String | Sim | String que especifica o tipo de match a ser realizado no caminho. |
| `routes.path` | String | Sim | Define qual argumento será usado para validar a URI da requisição. |
| `routes.methods` | Array | Sim | Array de strings especificando quais métodos podem ser usados ao fazer a requisição para o caminho dado. |
| `redirect_to` | String | Apenas quando `action` é `redirect` | URL para a qual a requisição deve ser redirecionada quando a ação `redirect` é acionada. Pode ser uma URL de requisição completa ou um caminho relativo. |
| `custom_response_body` | String | Apenas quando `action` é `custom_response` | Corpo de resposta personalizado a ser enviado quando a ação `custom_response` é acionada. |
| `custom_response_status` | Number | Não | Código de status de resposta a ser enviado quando a ação `custom_response` é acionada. Valor padrão: `400`. |
| `custom_response_content_type` | String | Não | Tipo de conteúdo de resposta a ser enviado quando a ação `custom_response` é acionada. Valor padrão: `plain/text`. |

:::caution
Se `restricted_mode` estiver habilitado, a função bloqueará toda requisição cuja URI não coincida com nenhuma das rotas possíveis listadas no array `routes`.
:::

Os valores possíveis para o argumento `action` são:

| Ação | Descrição |
| --- | --- |
| `deny` | Fecha a requisição com uma resposta HTTP 403 Forbidden. |
| `drop` | Fecha a requisição sem enviar nenhuma resposta ao cliente. |
| `redirect` | Redireciona a requisição para outra localização. |
| `custom_response` | Fecha a requisição com uma resposta estática a ela. |

Os valores possíveis para o argumento `match_type` são:

| Tipo de Match | Descrição |
| --- | --- |
| `equals` | O caminho deve ser igual ao definido no argumento `path`. |
| `contains` | O caminho deve conter o definido no argumento `path`. |
| `regex` | O caminho deve coincidir com a expressão regular definida no argumento `path`. |

:::note
O argumento `routes.methods` espera valores em maiúsculas. Exemplo: `["GET", "POST"]`.
:::

6. Clique no botão **Save**.

### Configure uma regra no Rules Engine

Para concluir, você deve configurar uma regra no **Rules Engine** para definir os critérios (*criteria*) e o comportamento (*behavior*) para executar a função.

Ainda na página do **Firewall**:

1. Selecione a aba **Rules Engine**.
2. Clique no botão **+ Rule Engine**.
3. Dê um nome fácil de lembrar à sua nova regra.
4. Selecione um *criteria* (critério) para executar a integração.
  - Exemplo: if `Host` *matches* `yourdomain.com`.
5. Abaixo, selecione um *behavior* (comportamento) para os *criteria* (critérios). Neste caso, será **Run Function**.
   - Selecione a função adequada de acordo com o nome que você deu na etapa de instanciação.
6. Clique no botão **Save**.

Agora, no Console, você deve configurar seu domínio para que ele seja protegido pelo seu Firewall.

7. No **Products menu**, selecione **Workloads**.
8. Clique no domínio que você deseja proteger com sua função **Method and Route Validator**.
9. Na seção **Settings**, clique no seletor de `Firewall` e escolha o Firewall que você acabou de criar.
10. Clique no botão **Save**.

Pronto. Agora a integração **Method and Route Validator** está em execução.