- packages/database: DialplanEntry + DialplanVersion (schema/config
gerado, nunca dialplan cru vindo do usuario)
- apps/api/src/dialplan: DialplanService gera extensions a partir de
entradas estruturadas (campos com allowlist estrita de caracteres),
escreve em arquivo compartilhado via volume Docker 'dialplan-generated'
entre api e asterisk, recarrega via AMI ('dialplan reload') e valida
checando 'dialplan show <contexto>' por marcadores de erro. Falha na
validacao dispara rollback automatico para a versao anterior; rollback
manual tambem disponivel para qualquer versao no historico
- infrastructure/asterisk: extensions.conf agora inclui o arquivo gerado
pela aplicacao; entrypoint garante que ele existe (vazio) no primeiro
boot antes da primeira publicacao
- apps/api/src/asterisk-admin: status (AMI + heartbeat), module show, e
diagnostico com ALLOWLIST ESTRITA de comandos exatos (nunca shell
arbitraria) — agente.md secao 22
Testado ponta a ponta contra o Asterisk real: dialplan publicado fica
ativo imediatamente sem restart (confirmado via 'dialplan show'),
comando de diagnostico fora da allowlist rejeitado com 400.
42 lines
1.5 KiB
Bash
42 lines
1.5 KiB
Bash
#!/bin/bash
|
|
# Renderiza os templates de configuração (que contêm variáveis ${VAR}) usando
|
|
# as variáveis de ambiente do container, para nunca versionar segredos em
|
|
# texto puro nos arquivos .conf. /etc/asterisk já vem populado pelo `make
|
|
# samples` no build da imagem — aqui só sobrepomos/adicionamos os arquivos
|
|
# específicos do B2BCall (o restante dos samples permanece intacto).
|
|
set -euo pipefail
|
|
|
|
CONFIG_SRC=/etc/asterisk-templates
|
|
CONFIG_DST=/etc/asterisk
|
|
|
|
mkdir -p "$CONFIG_DST"
|
|
|
|
# odbc.ini é configuração do sistema (unixODBC), não do Asterisk.
|
|
if [ -e "$CONFIG_SRC/odbc.ini.tpl" ]; then
|
|
envsubst < "$CONFIG_SRC/odbc.ini.tpl" > /etc/odbc.ini
|
|
fi
|
|
|
|
for tpl in "$CONFIG_SRC"/*.conf.tpl; do
|
|
[ -e "$tpl" ] || continue
|
|
name="$(basename "$tpl" .tpl)"
|
|
envsubst < "$tpl" > "$CONFIG_DST/$name"
|
|
done
|
|
|
|
for f in "$CONFIG_SRC"/*.conf; do
|
|
[ -e "$f" ] || continue
|
|
name="$(basename "$f")"
|
|
cp "$f" "$CONFIG_DST/$name"
|
|
done
|
|
|
|
# extensions.conf inclui este arquivo (dialplan gerado pela aplicação) —
|
|
# precisa existir mesmo vazio no primeiro boot, antes de a API publicar
|
|
# a primeira versão (ver DialplanService).
|
|
mkdir -p /etc/asterisk-generated
|
|
if [ ! -e /etc/asterisk-generated/b2bcall-dialplan.conf ]; then
|
|
echo "; vazio até a primeira publicação em Telefonia -> Dialplan" > /etc/asterisk-generated/b2bcall-dialplan.conf
|
|
fi
|
|
|
|
chown -R asterisk:asterisk "$CONFIG_DST" /var/lib/asterisk /var/log/asterisk /var/spool/asterisk /var/run/asterisk /etc/asterisk-generated
|
|
|
|
exec "$@"
|