+ Entrar
+ Acesso restrito. Informe o e-mail e a senha para usar a exportação da SD.
+
+
+
+ Credencial única, definida na configuração da aplicação. Não há
+ cadastro de usuário nem recuperação de senha — se a senha se perdeu, ela se
+ troca no ambiente de quem hospeda a app.
+
+{% endblock %}
diff --git a/docker-compose.yml b/docker-compose.yml
index 5c7f4a7..d828f9c 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -60,6 +60,12 @@ services:
TZ: ${TZ:-America/Sao_Paulo}
GUNICORN_TIMEOUT: ${GUNICORN_TIMEOUT:-120}
GUNICORN_LOG_LEVEL: ${GUNICORN_LOG_LEVEL:-info}
+ # Credencial única da tela de login (não há banco nem cadastro).
+ APP_USUARIO: ${APP_USUARIO:-admin@iasis.com.br}
+ APP_SENHA: ${APP_SENHA:-admin123}
+ # Vazio de propósito: sem valor, o servidor sorteia a chave por
+ # processo e o login cai a cada restart. Defina no .env para durar.
+ SECRET_KEY: ${SECRET_KEY:-}
volumes:
# OBRIGATÓRIO. O app lê clientes/ses-mg/contrato/itens.yaml a cada
# análise (e contrato/linhas-os.yaml, se existir, como fallback da linha
diff --git a/scripts/teste_e2e.py b/scripts/teste_e2e.py
index 8048843..17fee1a 100644
--- a/scripts/teste_e2e.py
+++ b/scripts/teste_e2e.py
@@ -43,6 +43,10 @@ import servidor # noqa: E402
FALHAS: list[str] = []
CLIENTE = servidor.app.test_client()
+# O portão de login vale para todas as rotas (servidor.exigir_login); sem esta
+# entrada, todo request abaixo voltaria 302 para /login e nenhum teste chegaria
+# ao handler que quer exercitar.
+CLIENTE.post("/login", data={"email": servidor.USUARIO, "senha": servidor.SENHA})
# Lida da tabela, não fixada: o cabeçalho de linhas-os.yaml manda atualizar
# `atualizado_em` a cada edição, e um teste pinado ficaria vermelho à toa.
DATA_TABELA = servidor.canonico().linhas_os["atualizado_em"]