# Instale Process Request Data Into Headers

**Process Request Data Into Headers** é uma integração *serverless* disponível no **Marketplace** da Azion.

O objetivo desta função é interromper uma requisição sempre que um `request body field` estiver vazio. Usando regex, o usuário pode validar não apenas se o campo existe, mas também os padrões criados por ele. Além disso, os usuários têm a opção de utilizar qualquer comportamento que escolherem, sem ficarem presos a um `Deny Request` pré-determinado.

---

## Obtenha a integração

Para instalar a integração, siga estes passos:

1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Marketplace**.
2. Na homepage do Marketplace, selecione o card da integração.
3. Quando a página da integração abrir, clique no botão **Install**, localizado no canto inferior da direita.

Aparecerá uma mensagem indicando que sua integração foi instalada com sucesso.

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

---

## Configure a integração

### Crie um firewall

Para instanciar a integração **Process Request Data Into Header**, siga os passos:

1. No **Products menu**, selecione **Firewall** na seção **SECURE**.
2. Clique no botão **+ Firewall**.
3. Dê um nome fácil de lembrar para seu firewall.
4. Habilite o switch **Functions**.
5. Clique no botão **Save**.

Pronto. Agora você instanciou um firewall para sua função.

### Instancie a integração

Para terminar de instanciar a integração, ainda na página **Firewall**:

1. Selecione a aba **Functions Instances**.
2. Clique no botão **+ Function Instance**.
3. Dê um nome fácil de lembrar para a sua instância.
4. No menu suspenso, selecione a função **Process Request Data Into Header**.
    - Esta função não precisa de nenhum parâmetro na aba **Arguments**, mas você pode testá-la utilizando o comando `curl`.


#### Exemplos do comando curl

| Comando Curl                                                                                                                                                                | Request headers adicionados pela function                                                                |
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|
| `curl https://mydomain/function`                                                                                                                                            | `X-Body-Error": "CT001`                                                                              |
| `curl -H "Content-Type: application/x-www-form-urlencoded" --request POST --data 'param1=v1&param2=v2&param3=v3' https://mydomain/function`                                | `X-Body-Param1": "v1"` <br /> `X-Body-Param2": "v2"` <br /> `X-Body-Param3": "v3"`                                 |
| `curl -H "Content-Type: application/json" --request POST --data '{"my_data": {"abc": {"def": {"g": "xyz","h": false,"e": null}}, "number": 1}}' https://mydomain/function` | `X-Body-My-Data-Abc-Def-G": "xyz"` <br /> `X-Body-My-Data-Abc-Def-H": "false"` <br />`X-Body-My-Data-Number": "1"` |
| `curl -H "Content-Type: text/plain" --request POST --data 'plain=text' https://mydomain /function`                                                                         | `X-Body-Error": "CT002"`                                                                             |
| `curl -H "Content-Type: application/json" --request POST --data '{"my_data": {"abc": {"def": {"g": "xyz","h": false,"e": null}}, "number": 1}' https://mydomain/function`  | `X-Body-Error": "FD001"`                                                                             |

:::note
Desde que a request tenha um `Content-Type` válido juntamente de uma `request body` válida, a integração converte em os campos presentes em `body` para `headers`. Esta integração suporta dados de objetos aninhados. Neste caso, cada "nível" será separado por um hífen.
:::

#### Alguns erros possíveis

Esta integração pode provocar erros. Neste caso, os erros serão anexados a um novo cabeçalho chamado `X-Body-Error`.

| Código do erro | Descrição                                                                |
|------------|--------------------------------------------------------------------------------|
| `CT001`    | O cabeçalho `Content-Type` está faltando ou é nulo (null) |
| `CT002`    | O cabeçalho `Content-Type` contém um valor não suportado pela function |
| `FD001`    | O `request body` não está formatado corretamente e não pode ser decodificado |

## Configure o Rules Engine

Para terminar o processo, é preciso configurar o [Rules Engine](/pt-br/documentacao/produtos/build/applications/rules-engine/) indicando o *behavior* e o *criteria* necessários para executar a integraçã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 **Process Request Data Into Headers**.
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 está sendo executada para cada requisição feita ao domínio que você indicou.

---