Estou tentando escrever um manipulador simples para um webhook usando xinetd e bash. Eu tenho o caso trivial que trabalha com esta configuração para o xinetd:
service github-hooks
{
port = 61000
socket_type = stream
protocol = tcp
wait = no
user = ubuntu
server = /home/ubuntu/github-hooks.sh
}
e este script bash:
#!/bin/bash
echo -e "HTTP/1.1 200 OK"
agora, eu quero ler os dados do post que estão sendo enviados no webhook para que eu possa fazer algo mais interessante que sempre retorna 200.
Como faço para ler os dados da postagem do meu script bash?
Eu tentei:
while read line; do
echo "$line" >> /home/ubuntu/test
done < /dev/stdin
mas isso não está funcionando para mim.
Editar
Graças à sugestão abaixo, parei xinetd
e usei nc
para ver quais dados brutos estavam sendo transmitidos:
$nc -l 61000
e tenho isso:
POST / HTTP/1.1
Host: <snip>:61000
Accept: */*
User-Agent: GitHub-Hookshot/375c44e
X-GitHub-Event: pull_request
X-GitHub-Delivery: 2dc1fb00-1c8e-11e6-9955-64afafb6ce32
content-type: application/json
X-Hub-Signature: sha1=45afd85b7d4312fa8ac4c56638e8e9699e2ddb36
Content-Length: 20558
{"action":"opened","number":116,"pull_request": <snip>
Então, os dados estão sendo enviados. Agora, sabendo que há exatamente 11 linhas sendo enviadas, eu li exatamente 11 linhas:
for i in {0..10}
do
read line
echo "$line" >> /home/ubuntu/test
done
E obtenho a mesma saída (grande sucesso:)
POST / HTTP/1.1
Host: <snip>:61000
Accept: */*
User-Agent: GitHub-Hookshot/375c44e
X-GitHub-Event: pull_request
X-GitHub-Delivery: 2dc1fb00-1c8e-11e6-9955-64afafb6ce32
content-type: application/json
X-Hub-Signature: sha1=45afd85b7d4312fa8ac4c56638e8e9699e2ddb36
Content-Length: 20558
{"action":"opened","number":116,"pull_request": <snip>
Talvez eu deva apenas ler 9 linhas e usar o parâmetro Content-Length
para ler o resto? Eu ainda não entendo o que está acontecendo, então qualquer informação seria muito útil.