PortValhalla/scripts/Common/Software/docker/services/trackmania/xaseco-entrypoint.sh

155 lines
4.6 KiB
Bash
Executable file

#!/bin/bash
export TM_USER="${TM_USER:-SuperAdmin}"
export TM_PASSWORD="${TM_PASSWORD:-$TM_SUPERADMIN_PASSWORD}"
export TM_SERVER_PORT="${TM_SERVER_PORT:-$TM_XMLRPC_PORT}"
export DEDI_USER="${DEDI_USER:-$TM_SERVER_USER}"
export DEDI_PASSWORD="${DEDI_PASSWORD:-$TM_SERVER_PASSWORD}"
overlay="$(mktemp -d)"
upperDir="$overlay/upper"
workDir="$overlay/work"
cache="/cache"
data="/data"
runDir="/opt/xaseco"
entrypoint="$cache/aseco.php"
config="$runDir/config.xml"
dbConfig="$runDir/localdatabase.xml"
dediConfig="$runDir/dedimania.xml"
pluginConfig="$runDir/plugins.xml"
settingsPath="/settings"
serverPath="$settingsPath/tmserver"
pluginTag="plugin"
pluginPath="/aseco_plugins"
tmOptions=(
TM_SERVER_HOST ip
TM_SERVER_PORT port
TM_USER login
TM_PASSWORD password
TM_TIMEOUT timeout
)
sqlOptions=(
MYSQL_HOST mysql_server
MYSQL_USER mysql_login
MYSQL_PASSWORD mysql_password
MYSQL_DATABASE mysql_database
)
dediOptions=(
DEDI_URL url
DEDI_NAME name
DEDI_USER login
DEDI_PASSWORD password
DEDI_NATION nation
DEDI_LOG_NEWS log_news
DEDI_SHOW_MOTD show_welcome
)
if [ ! -f "$entrypoint" ]; then
file="$(mktemp -u).zip"
root="$(mktemp -d)"
mkdir -p "$(dirname "$file")"
curl -v --insecure https://www.gamers.org/tmn/xaseco_116.zip -o "$file"
unzip -o "$file" -d "$root"
cp -r "$root"/xaseco/* "$cache"
fi
script="$(
printf "%s\n" \
'file="$(basename "$1")";' \
'if [[ "$file" == *".php" ]];' \
' then dir="includes";' \
'else' \
' dir=".";' \
'fi;' \
'if [ ! -f "$0/$dir/$file" ]; then' \
' mkdir -p "$0/$dir";' \
' cp "$1" "$0/$dir";' \
'fi;'
)"
find "$cache/newinstall" -type f -exec bash -c "$script" "$cache" \{\} \;
mount -t tmpfs tmpfs "$overlay"
mkdir -p "$upperDir" "$workDir"
mount -t overlay overlay -o lowerdir="$cache:$data",upperdir="$upperDir",workdir="$workDir" "$runDir"
cd "$runDir"
dos2unix "/root/parser.patch" ./includes/xmlparser.inc.php
patch -p 1 ./includes/xmlparser.inc.php "/root/parser.patch"
if [ -n "$MASTERADMIN_USER" ]; then
loginTag="tmlogin"
ipTag="ipaddress"
adminPath="$settingsPath/aseco/masteradmins"
nodesPath="$adminPath/*"
namePath="$nodesPath[1]"
ipPath="$nodesPath[2]"
if [ "$(xmlstarlet select --template -v "count($nodesPath)" "$config")" -lt 1 ]; then
xmlstarlet edit --inplace --subnode "$adminPath" --type elem -n "$loginTag" "$config"
fi
if [ "$(xmlstarlet select --template -v "count($nodesPath)" "$config")" -lt 2 ] ||
[ "$(xmlstarlet select --template -v "name($ipPath)" "$config")" != "$ipTag" ]; then
xmlstarlet edit --inplace --append "$namePath" --type elem -n "$ipTag" "$config"
fi
xmlstarlet edit --inplace --update "$namePath" --value "$MASTERADMIN_USER" "$config"
if [ -z "$MASTERADMIN_IP" ]; then
xmlstarlet edit --inplace --delete "$ipPath" "$config"
else
xmlstarlet edit --inplace --update "$ipPath" --value "$MASTERADMIN_IP" "$config"
fi
fi
for i in $(seq 0 2 $((${#tmOptions[@]} - 1))); do
var="${tmOptions[$i]}"
option="${tmOptions[$(($i + 1))]}"
value="${!var}"
if [ -n "$value" ]; then
xmlstarlet edit --inplace --update "$serverPath/$option" --value "$value" "$config"
fi
done
for i in $(seq 0 2 $((${#sqlOptions[@]} - 1))); do
var="${sqlOptions[$i]}"
option="${sqlOptions[$(($i + 1))]}"
value="${!var}"
xmlstarlet edit --inplace --update "$settingsPath/$option" --value "$value" "$dbConfig"
done
for i in $(seq 0 2 $((${#dediOptions[@]} - 1))); do
var="${dediOptions[$i]}"
option="${dediOptions[$(($i + 1))]}"
value="${!var}"
if [ -n "$value" ]; then
xmlstarlet edit --inplace --update "/dedimania/masterserver_account/$option" --value "$value" "$dediConfig"
fi
done
if [ -n "$X1_EXTRA_PLUGINS" ]; then
echo "adding plugins: $X1_EXTRA_PLUGINS"
for plugin in $X1_EXTRA_PLUGINS; do
xmlstarlet edit --inplace --subnode "$pluginPath" --type elem -n "$pluginTag" --value "$plugin" "$pluginConfig"
done
fi
if [ -n "$X1_DISABLED_PLUGINS" ]; then
for i in $(seq 1 "$(xmlstarlet select --template -v "count($pluginPath/$pluginTag)" "$pluginConfig")"); do
for plugin in $X1_DISABLED_PLUGINS; do
path="$pluginPath/$pluginTag[$i]"
if [ "$(xmlstarlet select --template -v "$path/text()" "$pluginConfig")" == "$plugin" ]; then
xmlstarlet edit --inplace --delete "$path" "$pluginConfig"
fi
done
done
fi
if [ "$1" != "download" ]; then
$@
fi