# Configuração do Home Screen Server

## Introdução

Esse manual descreve a configuração dos componentes do lado do servidor da aplicação *GBS Home Screen*.

O procedimento de configuração deve ser realizado somente após a etapa de instalação. Para mais informações, consulte o [Manual de Instalação do GBS Apps](https://docs.griaule.com/componentes-web/gbsappssetup).

## Configuração

Os passos para configuração são:

1. [Configure o Tomcat](#configuracao-do-tomcat);
2. [Configure os certificados](#configuracao-de-certificados);
3. [Gere a senha criptografada](#criptografia-da-senha-do-banco-de-dados);
4. [Configure outras propriedades no arquivo config.properties](#arquivo-de-configuracao-da-aplicacao);
5. [Instale e configure o Nginx](#nginx);
6. [Configure as permissões](#permissoes);
7. [Configure o logotipo do cliente](#logotipo-do-cliente);

Todos os passos estão descritos abaixo. Um exemplo do arquivo `config.properties` pode ser encontrado na seção [Exemplo do Arquivo de Configuração](#exemplo-do-arquivo-de-configuracao).

{% hint style="danger" %}
Todas as linhas devem estar presentes no arquivo de configuração. Comentar ou deletar linhas pode causar comportamentos inesperados. Para informações adicionais, contate o Time de Suporte da Griaule.
{% endhint %}

### Configuração do Tomcat

Edite o arquivo de configuração do Tomcat para configurar os certificados e a porta que a aplicação usará.

```sh
vim /var/lib/tomcats/home-screen/conf/server.xml
```

Para mudar a porta, procure por `Connector port=`. Essa é a porta para operações backend.

A porta padrão do GBS Home Screen é `8128`.

### Configuração de Certificados

Para habilitar autenticação SSL, procure por `Connector port=` no arquivo `/conf/server.xml`.

Há várias entradas. Procure pela que define um *SSL HTTP/1.1 Connector*. Se necessário, remova os delimitadores de comentário `<!--` e `-->`. Em seguida, ajuste as seguintes configurações:

```properties
port="8127"
keystoreFile="/home/griaule/keystore"
keystorePass="password"
keyAlias="1"
clientAuth="true"
truststoreFile="/home/griaule/keystore"
truststorePass="password"
```

O parâmetro `port` deve ser a porta de rede desejada para a aplicação.

Mude o caminho de `keystoreFile` e `truststoreFile` para os valores corretos. Faça o mesmo para `keystorePass` e `truststorePass`.

O parâmetro `clientAuth="true"` irá requerer autenticação do servidor para o cliente e do cliente para o servidor. Isso significa que o cliente necessitará importar o certificado no navegador para poder acessar a aplicação.

{% hint style="warning" %}
Quando `clientAuth` está definido como `true`, o administrador do sistema deve fornecer o arquivo `certificate.pfx` para os usuários finais.
{% endhint %}

### Criptografia da senha do Banco de Dados

No arquivo `config.properties`, o parâmetro `jdbc.password` é uma senha criptografada. Para gerar a senha criptografada, siga os passos abaixo:

{% hint style="info" %}
Se o diretório `/var/lib/tomcats/home-screen/webapps/gbs-home-screen-server/WEB-INF/lib` não existir, **inicie** a aplicação (`systemctl start tomcat@home-screen.service`) uma vez para que o diretório seja criado. Em seguida, **pare** a aplicação (`systemctl stop tomcat@home-screen.service`) e continue o procedimento de configuração.
{% endhint %}

1. Acesse o seguinte diretório:

   ```sh
   cd /var/lib/tomcats/home-screen/webapps/gbs-home-screen-server/WEB-INF/lib
   ```
2. Execute o comando:

   ```sh
   java -cp gbs-common-db-<version>.jar com.griaule.commons.util.EncryptUtil <desiredPassword>
   ```
3. A senha criptografada aparecerá após a mensagem: *"Encrypted password is:"*

{% hint style="info" %}
Guarde a senha criptografada. Ela será usada no próximo passo.
{% endhint %}

### Arquivo de Configuração da Aplicação

Abra o arquivo de configuração:

```sh
vim /var/lib/tomcats/home-screen/conf/config.properties
```

Algumas mudanças importantes nesse arquivo são os parâmetros `jdbc.url`, `jdbc.username`, `jdbc.password` e `gbds.url`. Configure-os de acordo com seu ambiente.

Um exemplo do arquivo de configuração completo é mostrado na seção [Exemplo do Arquivo de Configuração](#exemplo-do-arquivo-de-configuracao).

{% hint style="info" %}
Lembre-se de substituir a senha criptografada gerada na seção [Criptografia da senha do Banco de Dados](#criptografia-da-senha-do-banco-de-dados) neste arquivo.
{% endhint %}

#### Configurações do Home Screen

Em seguida, configure o IP, a porta e o protocolo de acesso à aplicação. O IP e porta devem ser os mesmos configurados na seção [Configuração do Tomcat](#configuracao-do-tomcat).

```properties
home-screen.ip=<ip>
home-screen.port=<port>
home-screen.protocol=<protocol>
```

{% hint style="warning" %}
Certifique-se de que os parâmetros de configuração `home-screen.ip`, `home-screen.port` e `home-screen.protocol` estejam corretamente especificados no arquivo `config.properties`. Em diversos casos, o IP será o mesmo para diversas aplicações. Contudo, cada aplicação possuirá uma porta **diferente e única**.
{% endhint %}

### Nginx

Instale e configure o Nginx para que o GBS Home Screen funcione com login único (SSO) junto às demais aplicações.

#### Instalação do Nginx

{% hint style="info" %}
Se o Nginx já estiver instalado, pule para a seção [Configuração do Nginx](#configuracao-do-nginx).
{% endhint %}

Instale o Nginx:

```sh
sudo yum install nginx -y
```

Inicie o Nginx:

```sh
sudo systemctl start nginx
```

#### Configuração do Nginx

Habilite o Nginx para iniciar com o sistema:

```sh
sudo systemctl enable nginx
```

{% hint style="danger" %}
Se o Nginx já estava instalado, verifique se um arquivo de configuração já existe no diretório `/etc/nginx/conf.d/`. Se existir, verifique no arquivo se o *server block* está configurado para a **porta 80** (`listen 80`) e para o **mesmo** `server_name` do host do GBS Home Screen. Em caso afirmativo, pule as instruções de criação de um novo arquivo de configuração e adicione as configurações abaixo ao arquivo existente.
{% endhint %}

Em seguida, crie um arquivo de configuração para o Nginx:

```sh
sudo vim /etc/nginx/conf.d/web-apps.conf
```

Adicione as seguintes informações ao arquivo. Em *server*, substitua `<ip_hostname_or_domain>` pelo IP, hostname ou domínio do servidor:

```nginx
server {
   listen 80;
   server_name <ip_hostname_or_domain>;
   client_max_body_size 50M;
}
```

Em seguida, ainda em *server*, adicione um bloco de configuração para cada aplicação, mapeando-a para seu IP e porta. Substitua `<app_name>`, `<protocol>`, `<app_name_ip>` e `<app_name_port>` pelos valores corretos:

{% hint style="success" %}
O `<app_name>` pode ser: `bcc`, `cardscan`, `etr`, `mir`, `best`, `intelligence`, `smart-sense`, `print`, `control-panel` ou `home-screen`.
{% endhint %}

```nginx
location /gbs-<app_name>-server {
   proxy_pass <protocol>://<app_name_ip>:<app_name_port>;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
}
```

Exemplo de arquivo de configuração completo do Nginx, contendo rotas para todas as aplicações, utilizando suas portas padrão. Substitua `<ip_hostname_or_domain>`, `<protocol>` e `<app_name_ip>` pelos valores corretos:

```nginx
server {
   listen 80;
   server_name <ip_hostname_or_domain>;
   client_max_body_size 50M;

   # HOME SCREEN:
   location /gbs-home-screen-server {
      proxy_pass <protocol>://<home-screen_ip>:8128;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
   }

   # BCC
   location /gbs-bcc-server {
      proxy_pass <protocol>://<bcc_ip>:8124;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
   }

   # CARDSCAN
   location /gbs-cardscan-server {
      proxy_pass <protocol>://<cardscan_ip>:8087;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
   }


   # ETR
   location /gbs-etr-server {
      proxy_pass <protocol>://<etr_ip>:8089;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
   }

   # MIR
   location /gbs-mir-server {
      proxy_pass <protocol>://<mir_ip>:8120;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
   }

   # BEST
   location /gbs-best-server {
      proxy_pass <protocol>://<best_ip>:8123;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
   }

   # INTELLIGENCE
   location /gbs-intelligence-server {
      proxy_pass <protocol>://<intelligence_ip>:8122;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
   }

   # SMART SENSE
   location /gbs-smart-sense-server {
      proxy_pass <protocol>://<smart-sense_ip>:8127;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
   }

   # PRINT
   location /gbs-print-server {
      proxy_pass <protocol>://<print_ip>:8127;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
   }

   # CONTROL PANEL
   location /gbs-control-panel-server {
      proxy_pass <protocol>://<control-panel_ip>:8121;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
   }
}
```

Salve e feche o arquivo de configuração.

Finalmente, recarregue as configurações do Nginx:

```sh
sudo systemctl reload nginx
```

### Permissões

Para que os ícones das aplicações apareçam na Home Screen, é necessário que o usuário possua as permissões necessárias. Cada permissão concedida ao usuário (via integração LDAP) corresponde a uma aplicação, conforme a tabela abaixo:

| Aplicação     | Permissão                  |
| ------------- | -------------------------- |
| BCC           | bccdesktop\_user           |
| CardScan      | cardscan\_user             |
| ETR           | exception\_treatment\_user |
| MIR           | quality\_control\_user     |
| BEST          | forensic\_user             |
| Intelligence  | intelligence\_user         |
| SmartSense    | smartsense\_user           |
| Print         | printservice\_user         |
| Control Panel | controlpanel\_user         |

### Logotipo do cliente

No canto superior direito dos web apps, é possível adicionar o logotipo do cliente.

{% hint style="info" %}
Isso é uma configuração de ambiente. Assim, todos os usuários que acessarem a aplicação verão o mesmo logotipo.
{% endhint %}

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-aa954a4ac2a3ecdf60d9d2f283c667e8968cfcea%2Flogo.png?alt=media)

Para isso, na tabela `sphinx.settings` do banco de dados, crie ou altere a configuração `organization.logo` (type `APPS`) para o caminho do logotipo desejado. É necessário que a aplicação (usuário `tomcat`) tenha acesso de leitura ao arquivo para poder carregá-lo.

{% hint style="warning" %}
As **dimensões** do logotipo devem ser de **320x132** pixels para que toda a área seja preenchida. Se a imagem for maior, menor ou em outra proporção, ela será redimensionada e a área restante será preenchida com a cor branca.

O formato de imagem deve ser preferencialmente **PNG** ou **JPG**.
{% endhint %}

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-e7740668dd12f293e233a19295633b6a3d807bf5%2Flogo_config.png?alt=media)

## Acesso à aplicação

O GBS Home Screen, assim como as demais aplicações, deve ser acessado sem o uso da porta, uma vez que o Nginx irá redirecionar automaticamente a requisição para a porta correta. Assim, ao realizar um único login (SSO), o usuário terá acesso a todas as aplicações que possui permissão para utilizar.

O formato da URL de acesso é:

```html
<protocol>://<ip_or_domain>/gbs-<app_name>-server/react/
^^^^^^^^^^   ^^^^^^^^^^^^^^     ^^^^^^^^^^
```

{% hint style="success" %}
O `<app_name>` pode ser: `bcc`, `cardscan`, `etr`, `mir`, `best`, `intelligence`, `smart-sense`, `print`, `control-panel` ou `home-screen`.
{% endhint %}

Exemplos:

* GBS Home Screen: <http://172.16.0.185/gbs-home-screen-server/react/>
* GBS BCC: <http://172.16.0.185/gbs-bcc-server/react/>
* GBS ETR: <http://172.16.0.185/gbs-etr-server/react/>

***

* GBS Home Screen: <https://my.server.com/gbs-home-screen-server/react/>
* GBS CardScan: <https://my.server.com/gbs-cardscan-server/react/>
* GBS MIR: <https://my.server.com/gbs-mir-server/react/>

{% hint style="danger" %}
Caso as aplicações não sejam acessadas pela URL no formato descrito acima (sem porta), isto é, se forem acessadas usando suas portas diretamente, o **login único** (SSO) **não funcionará** e deverá ser feito login em cada aplicação separadamente.
{% endhint %}

## Finalizando as Configurações

Após finalizar todos os passos de configuração, retorne ao [Manual de Instalação do GBS Apps - Seção de Configuração](https://docs.griaule.com/gbsappssetup#configuracoes).

## Exemplo do Arquivo de Configuração

Essa seção mostra um exemplo do arquivo `config.properties`.

{% hint style="warning" %}
Os parâmetros `<rdb_ip>`, `<rdb_username>`, `<rdb_encrypted_password>`, `<gbds_ip>`, `<gbds_username>`, `<gbds_password>`, `<home_screen_ip>`, `<protocol>`, `<keystore_path>`, `<keystore_password>`, `<truststore_path>`, `<truststore_password>`, `<ldap_ip>`, `<ldap_username>`, `<ldap_password>`, `<email_password>` e `<email_address>` devem ser substituídos pelos valores adequados.
{% endhint %}

```properties
# **********************************************************************************************
#
#      /$$   /$$  /$$$$$$  /$$      /$$ /$$$$$$$$
#     | $$  | $$ /$$__  $$| $$$    /$$$| $$_____/
#     | $$  | $$| $$  \ $$| $$$$  /$$$$| $$
#     | $$$$$$$$| $$  | $$| $$ $$/$$ $$| $$$$$
#     | $$__  $$| $$  | $$| $$  $$$| $$| $$__/
#     | $$  | $$| $$  | $$| $$\  $ | $$| $$
#     | $$  | $$|  $$$$$$/| $$ \/  | $$| $$$$$$$$
#     |__/  |__/ \______/ |__/     |__/|________/
#
#       /$$$$$$   /$$$$$$  /$$$$$$$  /$$$$$$$$ /$$$$$$$$ /$$   /$$
#      /$$__  $$ /$$__  $$| $$__  $$| $$_____/| $$_____/| $$$ | $$
#     | $$  \__/| $$  \__/| $$  \ $$| $$      | $$      | $$$$| $$
#     |  $$$$$$ | $$      | $$$$$$$/| $$$$$   | $$$$$   | $$ $$ $$
#      \____  $$| $$      | $$__  $$| $$__/   | $$__/   | $$  $$$$
#      /$$  \ $$| $$    $$| $$  \ $$| $$      | $$      | $$\  $$$
#     |  $$$$$$/|  $$$$$$/| $$  | $$| $$$$$$$$| $$$$$$$$| $$ \  $$
#      \______/  \______/ |__/  |__/|________/|________/|__/  \__/
#
# **********************************************************************************************
# DATABASE (RDB)
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://<rdb_ip>:3306/sphinx?useSSL=false
jdbc.username=<rdb_username>
jdbc.password=<rdb_encrypted_password>
jdbc.dialect=org.hibernate.dialect.MySQLDialect
jdbc.showSql=false

# **********************************************************************************************
# GBDS CONNECTION (& AUTHENTICATION LDAP ONLY)
gbds.url=http://<gbds_ip>:8085
gbds.user=<gbds_username>
gbds.key=<gbds_password>
gbds.logLevel=INFO
gbds.additionalHeaders={}
gbds.flushDebugRequests=false
gbds.timeout=300
gbds.listExceptions.labels=

# **********************************************************************************************
# GUI SETTINGS
home-screen.ip=<home_screen_ip>
home-screen.port=8128
home-screen.protocol=<protocol>
locale=en_us

# **********************************************************************************************
# OTHER SETTINGS
gbds.latent.search.url=null
gbds.proxy.url=null
gbds.proxy.port=0

keystore.path=<keystore_path>
keystore.password=<keystore_password>
truststore.path=<truststore_path>
truststore.password=<truststore_password>

# **********************************************************************************************
# SESSION SETTINGS
same.user.simultaneous.login=true
fingerprint.useSDK=false
image.convert.useJnbis=false
filter.people.pguid=ALL
faceQuality.qtdeMinErrors=2
session.expirationTime.server=8h
session.expirationTime.web=8h
notification.last.timestamp=15

ldap.url=http://<ldap_ip>:8082/
ldap.user=<ldap_username>
ldap.password=<ldap_password>
codeValidTime=10
deviceTime=6

# **********************************************************************************************
# EMAIL
email.host=smtp.gmail.com
email.host.port=587
email.from=<email_address>
email.password=<email_password>
email.python.path=python
email.use.script.python=true

profile.cacheSize=100
profile.cacheTime=5m
locale=pt_br
```
