Files

76 lines
2.0 KiB
Bash

#!/bin/sh
set -eu
conf_template="/etc/turn-server/config.toml.tmpl"
conf_rendered="/tmp/turn-server.toml"
caddy_cert_root="/caddy-certs/caddy/certificates"
: "${TURN_REALM:?TURN_REALM is required}"
: "${TURN_SHARED_SECRET:?TURN_SHARED_SECRET is required}"
: "${EXTERNAL_IP:?EXTERNAL_IP is required}"
discover_tls_files() {
cert_file=""
key_file=""
if [ -d "${caddy_cert_root}" ]; then
cert_file=$(find "${caddy_cert_root}" -path "*/${TURN_REALM}/${TURN_REALM}.crt" -print -quit)
key_file=$(find "${caddy_cert_root}" -path "*/${TURN_REALM}/${TURN_REALM}.key" -print -quit)
fi
if [ -n "${cert_file}" ] && [ -n "${key_file}" ]; then
printf '%s\n%s\n' "${cert_file}" "${key_file}"
fi
}
wait_for_tls_files() {
elapsed=0
interval=5
timeout=300
while [ "${elapsed}" -le "${timeout}" ]; do
tls_files=$(discover_tls_files)
if [ -n "${tls_files}" ]; then
printf '%s\n' "${tls_files}"
return 0
fi
if [ "${elapsed}" -eq "${timeout}" ]; then
break
fi
echo "Waiting for Caddy certificate files for ${TURN_REALM} in ${caddy_cert_root}..." >&2
sleep "${interval}"
elapsed=$((elapsed + interval))
done
echo "Timed out waiting for Caddy certificate files for ${TURN_REALM} in ${caddy_cert_root}." >&2
return 1
}
escape_toml_string() {
printf '%s' "$1" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g'
}
escape_sed_replacement() {
printf '%s' "$1" | sed -e 's/[&|]/\\&/g'
}
render_value() {
escape_sed_replacement "$(escape_toml_string "$1")"
}
tls_files=$(wait_for_tls_files)
tls_cert_file=$(printf '%s\n' "${tls_files}" | sed -n '1p')
tls_key_file=$(printf '%s\n' "${tls_files}" | sed -n '2p')
sed \
-e "s|__TURN_REALM__|$(render_value "${TURN_REALM}")|g" \
-e "s|__TURN_SHARED_SECRET__|$(render_value "${TURN_SHARED_SECRET}")|g" \
-e "s|__EXTERNAL_IP__|$(render_value "${EXTERNAL_IP}")|g" \
-e "s|__TLS_CERT_FILE__|$(render_value "${tls_cert_file}")|g" \
-e "s|__TLS_KEY_FILE__|$(render_value "${tls_key_file}")|g" \
"${conf_template}" > "${conf_rendered}"
exec turn-server --config="${conf_rendered}"