#!/bin/sh
#
# docker/valkey/entrypoint.sh — a senha do Valkey FORA do argv (ADR-020).
#
# O Compose passava `--requirepass <senha>`: a senha aparecia no `ps` do **host** (o argv
# de um processo é legível por qualquer usuário da máquina) — quem lesse o `ps` abriria
# o cache, a **sessão** e a fila do CMS inteiro (a sessão do CMS mora no Valkey). O mesmo
# valia para o healthcheck (`valkey-cli -a "$REDIS_PASSWORD"`), que repetia a credencial
# a cada 10 s.
#
# Aqui a senha é renderizada num conf de runtime **dentro** do container (modo 600, dono
# do usuário que roda o servidor) e o processo sobe sem a senha em nenhum argv. O
# `REDIS_PASSWORD` continua no **environment** do container — que é o canal normal de
# segredo e não aparece no `ps`.
#
# Este script **precede** o entrypoint da imagem, não o substitui: ele reexecuta
# `/usr/local/bin/docker-entrypoint.sh valkey-server …`, que continua fazendo o drop de
# privilégio (root → valkey) e o `chown` do volume de dados.
set -e

conf=/tmp/valkey.runtime.conf

# O conf é segredo: só o usuário que roda o servidor lê.
umask 077

# A senha vai entre aspas (o parser do Valkey aceita string quotada). As barras e as
# aspas são escapadas — sem isso, uma senha com espaço ou aspas quebraria o conf.
escaped=$(printf '%s' "$REDIS_PASSWORD" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g')

{
    printf 'requirepass "%s"\n' "$escaped"
    cat /etc/valkey/valkey.conf
} >"$conf"

# O conf precisa ser legível por quem roda o servidor. Root: esse usuário é o `valkey`
# (o entrypoint da imagem faz o drop). Sem root: o arquivo já é do próprio usuário.
if [ "$(id -u)" = '0' ]; then
    chown valkey "$conf"
fi

exec /usr/local/bin/docker-entrypoint.sh valkey-server "$conf"
