# Serviço de Notificação por Email

## Introdução

O Serviço de Notificação por Email do GBDS fornece um recurso para auditoria. Através deste serviço, é possível configurar uma lista de email que será avisada sempre que for solicitada uma pesquisa facial 1:N.

É possível utilizar este recurso com qualquer servidor SMTP, configurando o serviço conforme descrito na seção [Configurando o Notificador de Email](#configurando-o-notificador-de-email). Quando nenhum servidor SMTP estiver disponível, o usuário deverá criá-lo e instalar as dependências do serviço.

## Configurando o Notificador de Email

### Propriedades

O arquivo de configuração do Serviço de Notificação por Email está localizado em `etc/griaule/conf/email-notifier/config.properties` e contém os seguintes parâmetros:

```properties
# GBS Email Notifier

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://<mysql/mariadb ip>:<port>/enotifier?useSSL=false
jdbc.username=<username>
jdbc.password=<encrypted password>
jdbc.dialect=org.hibernate.dialect.MySQLDialect
jdbc.showSql=false

locale=en_US

gbds.url=http://<gbds api host>:<port>
gbds.user=<gbds user>
gbds.key=<gbds password>
gbds.logLevel=INFO
gbds.timeout=300 # seconds
```

{% hint style="warning" %}
Os valores dos parâmetros entre `<>` devem ser editador de acordo com o ambiente.
{% endhint %}

### Banco de Dados

A tabela `enotifier.settings` do banco de dados contém o modelo e o assunto do email e todas as informações para conexão SMTP:

<table><thead><tr><th width="300">Key</th><th>Description</th></tr></thead><tbody><tr><td>mail.smtp.auth</td><td>autorização do SMTP: NONE, TLS, SSL</td></tr><tr><td>mail.smtp.from.email</td><td>email do emissor do SMTP</td></tr><tr><td>mail.smtp.from.name</td><td>nome do emissor do SMTP</td></tr><tr><td>mail.smtp.host</td><td>host do SMTP</td></tr><tr><td>mail.smtp.password</td><td>senha do SMTP para TLS e SSL</td></tr><tr><td>mail.smtp.port</td><td>porta do SMTP: NONE=25; TLS=587; SSL=465</td></tr><tr><td>mail.identify.request.single.subject</td><td>Assunto do email; o notificador irá concatenar o id hash para separação de threads.</td></tr><tr><td>mail.identify.request.single.template</td><td>Modelo do corpo do email: Campos:<br><br>&#x3C;username>: nome do usuário<br>&#x3C;timestamp:date/time pattern>: se nenhum padrão for fornecido, será usado MM/dd/YYYY HH:mm:ss<br>&#x3C;biographics>: itera sobre os biográficos; dentro da iteração: &#x3C;biographic:key> e &#x3C;biographic:value> fornecem chave/valor<br><br>imagens serão enviadas como anexo.</td></tr><tr><td>mail.identify.result.subject</td><td>Assunto da notificação por email do resultado da pesquisa</td></tr><tr><td>mail.identify.result.template</td><td>Modelo da notificação por email do resultado da pesquisa</td></tr><tr><td>mail.identify.request.multiple</td><td>Ativa/desativa o envio de vários emails com notificações de solicitação de pesquisa de identificação de rosto</td></tr><tr><td>mail.identify.request.multiple.period</td><td>Período para consolidar notificações por email</td></tr><tr><td>mail.identify.request.multiple.subject</td><td>Assunto para email notificações múltiplas</td></tr><tr><td>mail.identify.request.multiple.template</td><td>Modelo de corpo do email de multiplas notificações. Os emails empacotam um arquivo zip com todas as imagens listadas.</td></tr></tbody></table>

{% hint style="warning" %}
O arquivo zip da lista de imagens anexadas pode conter no máximo 24 MB. Acima disso, a listagem é dividida em mais de um email.
{% endhint %}

Para criar a tabela, execute o arquivo de dump do banco de dados necessário.

{% hint style="info" %}
Se nenhum arquivo de dump foi fornecido, contate com a Equipe de Suporte da Griaule.
{% endhint %}

{% hint style="warning" %}
Quaisquer alterações aplicadas a esta tabela serão refletidas no próximo email enviado.
{% endhint %}

## Operação

Os binários serão colocados em `/var/lib/griaule/email-notifier/gbs-email-notifier-xxx.jar` e `/var/lib/griaule/email-notifier/lib`.

### Iniciando e parando o Notificador de Email

Para iniciar o Serviço de Notificação de Email, execute:

```sh
/var/lib/griaule/email-notifier/scripts/start-email-notifier.sh
```

E para pará-lo:

```sh
/var/lib/griaule/email-notifier/scripts/kill-email-notifier.sh
```

### Logs

O notificador de emails usa o arquivo de configuração do log4j em `/etc/griaule/conf/email-notifier/email-notifier-log4j.xml`. Todos os logs ficarão em `/var/logs/griaule/email-notifier/`.

Shutdown log will be generated on `/var/log/griaule/email-notifier/email-notifier.log`

### Ações

O serviço de email pode conter uma lista de interesses por meio do GBDS para algumas pessoas. Algumas ações podem ser feitas quando uma pesquisa é necessária e essas pessoas aparecem nos resultados da pesquisa. As ações são:

* Ocultar pessoa do resultado da pesquisa;
* Ocultar informações da pessoa no resultado da pesquisa se o usuário autorizado não tiver acesso para vê-la;
* Notificar por email o resultado da pesquisa com a pessoa.

Para configurar a ação, é necessário acessar as tabelas `gbds.people_transparency` e `gbds.people_transparency_group` para informar se alguma pessoa deve ser removida, ocultada ou notificada a cada busca de identificação realizada.

A tabela contém PGUID, ação e flag para habilitar a transparência dessa pessoa. Tabela de grupos retém grupos de email para notificação.

Com o PGUI inserido, as ações devem ser: REMOVE, CLASSIFIED, ou NOTIFY:

* Ao remover (REMOVE), o endpoint get result não retornará a pessoa;
* Ao definir como informação oculta (CLASSIFIED), o resultado da pesquisa retornará a pessoa, mas os campos pguid/tguid serão com texto *classified*, todas os seus casamentos (matches) com a pontuação, consulta e índice de referência como -1. Se o usuário autenticado tiver a permissão `transparency_show_classified_people` todos os dados pessoais serão mostrados novamente.
* Na notificação (NOTIFY), a tabela `gbds.people_transparency_group` contém grupos de email informando quais emails devem ser notificados com o resultado da pesquisa de pessoa.

{% hint style="info" %}
Na tabela `gbds.people_transparency`, um pguid pode aparecer mais de uma vez, então mais de uma ação pode ser feita para este pguid, por exemplo: remover e notificar ou classificar e notificar.
{% endhint %}

## Informações Adicionais

### Configurações da API e do Banco de Dados

Este serviço é ativado por algumas configurações em `gbdsapi.properties` ou na tabela `gbds.settings` no banco de dados. Esses são:

* gbds.transparency.search.identify.send-email.enabled

  > Ativar ou desativar este serviço
* gbds.transparency.email-notifier.log-level

  > Define o nível de log
* gbds.transparency.email-notifier.timeout

  > Define o timeout.
* gbds.transparency.email-notifier.url

  > Define a URL de notificação

Mais informações sobre essas configurações podem ser vistas no Manual de Configuração da API GBDS.

### Endpoints do GBDS para o Serviço de Notificação de Email

GBDS fornece uma API simples para armazenar e recuperar usuários/emails para enviar. A documentação completa pode ser vista na [API GBDS](https://docs.griaule.com/apis/)

* Inserir ou atualizar grupos e emails: [POST Email Notify Group](https://gitbook.griaule.com/apis/gbds-4/email#post-notify-group)

  > Esta chamada insere/atualiza grupos e emails relativos a esses grupos.
* Recuperar Grupo: [Get Email Group](https://gitbook.griaule.com/apis/gbds-4/email#get-notify-group-group)

  > Essa chamada retorna o grupo e os emails no grupo.
* Inserir ou atualizar o usuário e seus grupos: [POST Email Notify User](https://gitbook.griaule.com/apis/gbds-4/email#post-notify-user)

  > Esta chamada insere/atualiza um usuário individual e o associa a grupos.
* Recuperar usuário: [Get Email User](https://gitbook.griaule.com/apis/gbds-4/email#get-notify-user-user)

  > Essa chamada retorna o usuário e seus grupos associados.

### Endpoints de Get List do Notificador

O notificador de email tem um endpoint para listar as solicitações de email notificadas:

* GET `http://host:port/gbs-email-notifier/notify/list` (a porta usualmente é 8086)

  > Filtros de consulta:
  >
  > * status: um ou mais de: PENDING, PROCESSING, ERROR, DONE
  > * ini-date: data inicial no formato: YYYY-MM-dd-HH-mm-ss
  > * end-date: data final no formato: YYYY-MM-dd-HH-mm-ss
  > * username (usuário)
  > * email
  > * pageIndex, padrão 0, mínimo 0
  > * pageSize, padrão 20, mínimo 1, máximo 100

A resposta do exemplo é:

```json
{
    "notifications": [
        {
            "tguid": "86A2BA4A-822C-4F1F-9017-46E0144F274C",
            "timestamp": "2021-08-24-10-52-07",
            "status": "DONE",
            "username": "rgiolo",
            "emails": [
                "email_01@griaule.com",
                "email_02@griaule.com"
            ],
            "biographics": {
                "information": "some value",
                "ip-address": "192.168.0.62",
                "face-score-threshold": "30",
                "big-text": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum ..."
            },
            "message": "Email sent"
        },
        ...
	]
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.griaule.com/instalacao-do-gbds/gbdsemailnotifier.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
