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

177 lines
5.2 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"
adminConfig="$runDir/adminops.xml"
dbConfig="$runDir/localdatabase.xml"
dediConfig="$runDir/dedimania.xml"
pluginConfig="$runDir/plugins.xml"
settingsPath="/settings"
serverPath="$settingsPath/tmserver"
pluginTag="plugin"
pluginPath="/aseco_plugins"
userPattern="^(.+?)(@([[:digit:]]+(.[[:digit:]]+){3}))?\$"
tmOptions=(
TM_SERVER_HOST ip
TM_SERVER_PORT port
TM_USER login
TM_PASSWORD password
TM_TIMEOUT timeout
)
groups=(
ADMINS admins
OPERATORS operators
)
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 $((${#groups[@]} - 1))); do
var="${groups[$i]}"
group="${groups[$(($i + 1))]}"
value="${!var}"
path="/lists/$group"
echo "$value" | while read user; do
name="$(echo "$user" | LC_ALL="C" perl -pe "s/$userPattern/\1/")"
ip="$(echo "$user" | LC_ALL="C" perl -pe "s/$userPattern/\3/")"
xmlstarlet edit --inplace --subnode "$path" --type elem -n "tmlogin" --value "$name" "$adminConfig"
if [ -n "$ip" ]; then
xmlstarlet edit --inplace --subnode "$path" --type elem -n "ipaddress" --value "$ip" "$adminConfig"
fi
done
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
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
$@