forked from coop-cloud/icecast
95 lines
2.4 KiB
Bash
Executable File
95 lines
2.4 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -eu
|
|
|
|
CONFIG=/etc/icecast.xml
|
|
BEGIN_MARKER="<!-- BEGIN COOP-CLOUD MOUNTS -->"
|
|
END_MARKER="<!-- END COOP-CLOUD MOUNTS -->"
|
|
|
|
xml_escape() {
|
|
printf '%s' "$1" | sed \
|
|
-e 's/&/\&/g' \
|
|
-e 's/</\</g' \
|
|
-e 's/>/\>/g' \
|
|
-e 's/"/\"/g' \
|
|
-e "s/'/\'/g"
|
|
}
|
|
|
|
# Remove mounts generated by a previous run.
|
|
awk '
|
|
/<!-- BEGIN COOP-CLOUD MOUNTS -->/ { skip=1; next }
|
|
/<!-- END COOP-CLOUD MOUNTS -->/ { skip=0; next }
|
|
!skip { print }
|
|
' "$CONFIG" > /tmp/icecast.xml
|
|
|
|
cat /tmp/icecast.xml > "$CONFIG"
|
|
|
|
if [ -n "${ICECAST_MOUNTS:-}" ]; then
|
|
MOUNTS=/tmp/icecast-mounts.xml
|
|
|
|
printf '%s\n' "$BEGIN_MARKER" > "$MOUNTS"
|
|
|
|
printf '%s\n' "$ICECAST_MOUNTS" |
|
|
while IFS='|' read -r mount username password max_listeners; do
|
|
[ -z "$mount" ] && continue
|
|
|
|
case "$mount" in
|
|
\#*) continue ;;
|
|
/*) ;;
|
|
*)
|
|
echo "Invalid Icecast mount: $mount must start with /" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
if [ -z "$username" ]; then
|
|
echo "Invalid Icecast mount $mount: username is required" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$password" ]; then
|
|
echo "Invalid Icecast mount $mount: password is required" >&2
|
|
exit 1
|
|
fi
|
|
|
|
case "$max_listeners" in
|
|
''|*[!0-9]*)
|
|
echo "Invalid max-listeners for $mount: $max_listeners" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
mount=$(xml_escape "$mount")
|
|
username=$(xml_escape "$username")
|
|
password=$(xml_escape "$password")
|
|
max_listeners=$(xml_escape "$max_listeners")
|
|
|
|
cat >> "$MOUNTS" <<MOUNT
|
|
<mount>
|
|
<mount-name>${mount}</mount-name>
|
|
<username>${username}</username>
|
|
<password>${password}</password>
|
|
<max-listeners>${max_listeners}</max-listeners>
|
|
<authentication>
|
|
<role type="anonymous" match-method="source,put" deny-all="*" />
|
|
</authentication>
|
|
</mount>
|
|
MOUNT
|
|
done
|
|
|
|
printf '%s\n' "$END_MARKER" >> "$MOUNTS"
|
|
|
|
awk '
|
|
/<\/icecast>/ {
|
|
while ((getline line < "/tmp/icecast-mounts.xml") > 0)
|
|
print line
|
|
close("/tmp/icecast-mounts.xml")
|
|
}
|
|
{ print }
|
|
' "$CONFIG" > /tmp/icecast.xml
|
|
|
|
cat /tmp/icecast.xml > "$CONFIG"
|
|
fi
|
|
|
|
exec /usr/local/bin/docker-entrypoint "$@"
|