59 lines
2.1 KiB
Bash
Executable File
59 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Nefarious IRCd Docker Entrypoint
|
|
# Reads base.conf-dist, replaces all %VARIABLE% placeholders with environment
|
|
# variable values, and writes out base.conf
|
|
|
|
BASECONFDIST=/home/nefarious/ircd/base.conf-dist
|
|
BASECONF=/home/nefarious/ircd/base.conf
|
|
IRCDPEM=/home/nefarious/ircd/ircd.pem
|
|
|
|
# Set defaults for required variables (can be overridden by environment)
|
|
: "${IRCD_GENERAL_NAME:=localhost.localdomain}"
|
|
: "${IRCD_GENERAL_DESCRIPTION:=localhost.localdomain}"
|
|
: "${IRCD_ADMIN_LOCATION:=Somewhere}"
|
|
: "${IRCD_ADMIN_CONTACT:=root@localhost}"
|
|
: "${IRCD_GENERAL_NUMERIC:=1}"
|
|
|
|
# Copy the template to base.conf location
|
|
cp "$BASECONFDIST" "$BASECONF"
|
|
|
|
# Find all %VARIABLE% placeholders in the config and substitute them
|
|
# with corresponding environment variable values
|
|
grep -oE '%[A-Za-z_][A-Za-z0-9_]*%' "$BASECONF" | sort -u | while read -r placeholder; do
|
|
# Extract variable name (remove the % signs)
|
|
varname="${placeholder:1:-1}"
|
|
|
|
# Get the value from environment (indirect expansion)
|
|
value="${!varname}"
|
|
|
|
# Only substitute if the variable is set
|
|
if [ -n "$value" ]; then
|
|
# Escape special characters for sed (/, &, \)
|
|
escaped_value=$(printf '%s\n' "$value" | sed -e 's/[\/&]/\\&/g')
|
|
sed -i "s|${placeholder}|${escaped_value}|g" "$BASECONF"
|
|
else
|
|
echo "Warning: No value set for ${varname}, leaving ${placeholder} unchanged"
|
|
fi
|
|
done
|
|
|
|
echo "Generated $BASECONF from template"
|
|
|
|
#If cmd is the ircd...
|
|
if [ "$1" == "/home/nefarious/bin/ircd" ]; then
|
|
# Generate a pem file if there isnt one...
|
|
if [ ! -f /home/nefarious/ircd/ircd.pem ]; then
|
|
echo "Generating self signed ssl key for ircd.pem"
|
|
openssl req -new --x509 -days 365 -nodes -out ircd.pem -newkey rsa:4096 -keyout ircd.pem -subj "/CN=$IRCD_GENERAL_NAME/"
|
|
test 1 -eq 1 || test ! -f /dev/urandom || openssl gendh -rand $1/ircd.rand 512 >> $1/ircd.pem
|
|
test 1 -eq 1 || test -f /dev/urandom || openssl gendh 512 >> $1/ircd.pem
|
|
openssl x509 -subject -dates -fingerprint -noout -in $IRCDPEM
|
|
|
|
fi
|
|
fi
|
|
|
|
#Now run CMD from Dockerfile...
|
|
|
|
exec "$@"
|
|
|