76 lines
2.0 KiB
Bash
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}"
|