- Docker
- Uma shell de verdade (quando configurando no Windows)
- Node.js LTS mais recente, npm
- Servidor SMTP configurado
- Clone o repositório do backend com submódulos:
git clone --recurse-submodules https://github.com/lucas-bortoli/br.org.faculdadesdaindustria.vestibular.backend
- Crie o container da aplicação:
docker build -t vestib .
- Execute a aplicação:
- Exponha a porta 8000, do container, para a internet (o servidor está configurado nessa porta)
- Crie um volume/bind mount para a pasta
/data
do container. O banco de dados é armazenado em/data/db.sqlite
, então é essencial que essa pasta tenha persistência.
O comando acima vai expor o servidor na porta 8500 do host, com o diretóriodocker run \ --name=vestib-app \ --publish=8500:8000 \ --mount type=bind,src=C:\\Users\\user\\Documents\\data,dst=/data \ vestib
/data
mapeado paraC:\Users\user\Documents\data
do host. Quando a aplicação iniciar, será criado um banco de dados chamadodb.sqlite
nessa pasta. Feche o container e continue com a configuração.
Os parâmetros SMTP estão armazenados no banco de dados, na tabela config
. Para editá-los, abra o banco em um programa como DB Browser for SQLite e execute o seguinte código, alterando os parâmetros conforme necessário:
INSERT INTO
config (
processoSeletivoInicioUnix,
processoSeletivoFimUnix,
processoSeletivoDescricaoHtml,
smtpHost,
smtpPort,
smtpUser,
smtpPassword,
smtpSecure,
smtpSenderAddress,
redacaoTempo
)
VALUES
(
0,
0,
'',
'smtp.ethereal.email', -- <<< host smtp
587, -- <<< porta smtp
'mz0m3q0mmzb.stiedemann31@ethereal.email', -- <<< username smtp
'Bbakn2eF0mzf9rme', -- <<< senha smtp
1, --- <<< se 1, usará STARTTLS/TLS. ver documentação do nodemailer https://nodemailer.com/smtp/
'mz0m3q0mmzb.stiedemann31@ethereal.email', -- <<< campo de "sender address" dos e-mails enviados
0
);
A aplicação sempre usa a última linha da tabela como configuração, independentemente das linhas anteriores.
A aplicação aceita múltiplos usuários. No entanto, atualmente não há uma interface para o cadastro deles, assim é preciso criar os perfis manualmente e inseri-los no banco de dados.
Utilize essa snippet, em Node.js, que gera o código SQL para a inserção no banco de dados (use um site como Repl.it ou execute localmente o código):
// -------------------------------
// edite esses campos
const nome = "Fulano Silva";
const username = "fulano.silva";
const password = "12345678";
const roles = ["Admin"]; // não implementado no momento
// -------------------------------
const { randomBytes, createHash } = require("node:crypto");
/**
* Gera um salt para o usuário, de 32 bytes.
*/
const generateSalt = () => {
return randomBytes(16).toString("hex");
}
/**
* Retorna uma hash de uma senha com sua salt.
* @returns A senha com hash.
*/
const hashPassword = (plainTextPassword, salt) => {
return createHash("sha512")
.update(plainTextPassword + salt)
.digest("hex");
}
const salt = generateSalt();
const hashed = hashPassword(password, salt);
const sql = `
INSERT INTO usuario
(nome, roles, username, hash_senha, senha_salt)
VALUES
('${nome}', '${roles.join(",")}', '${username}', '${hashed}', '${salt}');`;
console.log("\n", sql, "\n");
Leve em consideração caracteres perigosos para o SQL no campos.
A aplicação cria um usuário padrão chamado
root
com a senha1234
. Mude a senha do usuário com o código acima.UPDATE usuario SET hash_senha = '<hash>', senha_salt = '<salt>' WHERE username = 'root';
Acesse a seção restrita (link no fim da página). Faça login com um dos perfis criados anteriormente.
Coloque os arquivos apropriados em cada campo. Quando exportando arquivos do Word para HTML, use o formato UTF-8 para a renderização correta nas páginas.
Na seção Dados do processo seletivo, coloque os prazos dos processos seletivos e o tempo da redação.