feat: harden identity and recovery operations
This commit is contained in:
@@ -19,8 +19,12 @@ docker compose exec app php artisan about
|
||||
docker compose exec app php artisan migrate:status
|
||||
docker compose exec postgres pg_isready -U reserva -d reserva
|
||||
docker compose exec redis redis-cli ping
|
||||
curl --fail http://localhost:8000/health/live
|
||||
curl --fail http://localhost:8000/health/ready
|
||||
```
|
||||
|
||||
`/health/live` confirma apenas resposta HTTP. `/health/ready` verifica PostgreSQL e cache e deve ser usado pelo balanceador. Ambos omitem detalhes de serviços. Se readiness falhar, consultar os logs da aplicação e testar PostgreSQL/Redis separadamente com os comandos anteriores.
|
||||
|
||||
### Página em branco no desenvolvimento
|
||||
|
||||
Se o HTML responder mas a interface React não aparecer, confirmar que `public/hot` contém `http://localhost:5173` e não `http://0.0.0.0:5173`. Depois validar os módulos:
|
||||
@@ -83,6 +87,30 @@ docker compose exec app php artisan schedule:list
|
||||
|
||||
Administradores podem testar a ligação, iniciar uma execução e consultar as últimas dez sincronizações em `http://localhost:8000/administracao/snipe-it`. Uma execução falhada mantém o último catálogo válido e não desativa registos ausentes. Consultar `sync_runs`, os logs do worker e o painel antes de repetir.
|
||||
|
||||
## Microsoft Entra ID
|
||||
|
||||
Registar uma aplicação **single tenant** do tipo Web. O redirect URI tem de corresponder exatamente ao domínio do portal e ao caminho `/auth/microsoft/callback`. Em produção é obrigatório HTTPS.
|
||||
|
||||
```dotenv
|
||||
MICROSOFT_ENABLED=true
|
||||
MICROSOFT_CLIENT_ID=
|
||||
MICROSOFT_CLIENT_SECRET=
|
||||
MICROSOFT_TENANT_ID=
|
||||
MICROSOFT_REDIRECT_URI=https://reservas.exemplo.pt/auth/microsoft/callback
|
||||
MICROSOFT_TIMEOUT=10
|
||||
MICROSOFT_METADATA_CACHE_SECONDS=3600
|
||||
```
|
||||
|
||||
Depois de aplicar a configuração e limpar a cache (`php artisan optimize:clear`):
|
||||
|
||||
1. entrar com a conta local;
|
||||
2. abrir `Definições > Segurança` e confirmar novamente a palavra-passe;
|
||||
3. escolher **Associar conta Microsoft** e concluir a autenticação institucional;
|
||||
4. terminar sessão e validar **Entrar com a conta Microsoft** no login;
|
||||
5. confirmar os eventos `identity.microsoft_linked` e `identity.microsoft_login` em auditoria.
|
||||
|
||||
O portal não associa contas por email. Uma identidade não associada recebe uma instrução para entrar localmente e fazer a associação explícita. Remover a associação também exige confirmação recente da palavra-passe e cria `identity.microsoft_unlinked`. Nunca copiar códigos ou tokens para tickets/logs.
|
||||
|
||||
## Entregas, devoluções e reconciliação
|
||||
|
||||
Utilizadores com perfil `inventory_operator` ou `administrator` acedem a `http://localhost:8000/operacoes`. A fila inclui as reservas do dia e todos os processos entregues, atrasados, devolvidos ou com incidente ainda pendente. O campo inicial aceita referência, nome, email, etiqueta, ID Snipe-IT ou a saída de um leitor QR/código de barras configurado como teclado.
|
||||
@@ -157,3 +185,15 @@ Antes de disponibilizar:
|
||||
## Backups
|
||||
|
||||
Salvaguardar diariamente PostgreSQL e uploads. Manter retenção semanal/mensal e uma cópia fora do servidor. Segredos são salvaguardados através de procedimento separado. Executar um teste de restauro periódico e registar o resultado.
|
||||
|
||||
```bash
|
||||
# Cria dump custom, valida-o e acrescenta checksum SHA-256
|
||||
ops/backup-postgres.sh /caminho/cifrado/backups
|
||||
|
||||
# Restaura numa base temporária isolada e elimina-a no fim
|
||||
ops/test-restore-postgres.sh /caminho/cifrado/backups/reserva-AAAAMMDDTHHMMSSZ.dump
|
||||
```
|
||||
|
||||
Os scripts obtêm o nome da base e utilizador diretamente do contentor PostgreSQL, recusam identificadores inesperados e nunca restauram sobre a base principal. O destino tem de estar cifrado e deve ser replicado para fora do servidor. Monitorizar a execução e a idade do último ficheiro; um dump sem ensaio de restauro não conta como recuperação validada.
|
||||
|
||||
Usar [docs/PRODUCTION_CHECKLIST.md](PRODUCTION_CHECKLIST.md) para registar responsáveis e evidências antes do piloto.
|
||||
|
||||
Reference in New Issue
Block a user