mirror of
https://github.com/NATroutter/egg-hytale.git
synced 2026-07-15 21:47:20 +03:00
Handle expired Hytale downloader authentication
- Detect expired downloader credentials from invalid_grant refresh-token errors - Clear stale downloader credential cache and rerun initial setup - Avoid treating downloader error output as a valid server version - Only save version and patchline state after successful downloads - Validate server.zip exists before extraction - Stream downloader output during downloads so auth prompts remain visible
This commit is contained in:
@@ -68,6 +68,49 @@ update_downloader() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
downloader_output_has_expired_auth() {
|
||||||
|
printf "%s" "$1" | grep -qiE "invalid_grant|refresh token expired|authorization grant"
|
||||||
|
}
|
||||||
|
|
||||||
|
clear_downloader_credentials() {
|
||||||
|
logger warn "Hytale downloader authentication expired; clearing cached downloader credentials."
|
||||||
|
rm -f "$DOWNLOAD_CRED_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
download_server_archive() {
|
||||||
|
local DOWNLOAD_LOG_FILE=""
|
||||||
|
local DOWNLOAD_STATUS=0
|
||||||
|
|
||||||
|
DOWNLOAD_LOG_FILE=$(mktemp)
|
||||||
|
if [ -z "$DOWNLOAD_LOG_FILE" ]; then
|
||||||
|
logger error "Failed to create temporary downloader log file."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
$DOWNLOADER -patchline "$PATCHLINE" -download-path server.zip 2>&1 | tee "$DOWNLOAD_LOG_FILE"
|
||||||
|
DOWNLOAD_STATUS=${PIPESTATUS[0]}
|
||||||
|
|
||||||
|
if grep -qiE "invalid_grant|refresh token expired|authorization grant" "$DOWNLOAD_LOG_FILE"; then
|
||||||
|
clear_downloader_credentials
|
||||||
|
rm -f "$DOWNLOAD_LOG_FILE"
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$DOWNLOAD_STATUS" -ne 0 ]; then
|
||||||
|
rm -f "$DOWNLOAD_LOG_FILE"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "server.zip" ]; then
|
||||||
|
logger error "Downloader completed but server.zip was not created."
|
||||||
|
rm -f "$DOWNLOAD_LOG_FILE"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f "$DOWNLOAD_LOG_FILE"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
ensure_aot_cache() {
|
ensure_aot_cache() {
|
||||||
local AOT_CONFIG_FILE="HytaleServer.aot.config"
|
local AOT_CONFIG_FILE="HytaleServer.aot.config"
|
||||||
local AOT_CACHE_FILE="HytaleServer.aot"
|
local AOT_CACHE_FILE="HytaleServer.aot"
|
||||||
@@ -148,7 +191,16 @@ run_update_process() {
|
|||||||
if [ "$PATCHLINE" != "$CACHED_PATCHLINE" ]; then
|
if [ "$PATCHLINE" != "$CACHED_PATCHLINE" ]; then
|
||||||
logger warn "Patchline mismatch, running update..."
|
logger warn "Patchline mismatch, running update..."
|
||||||
$DOWNLOADER -check-update
|
$DOWNLOADER -check-update
|
||||||
$DOWNLOADER -patchline $PATCHLINE -download-path server.zip
|
download_server_archive
|
||||||
|
local DOWNLOAD_STATUS=$?
|
||||||
|
|
||||||
|
if [ "$DOWNLOAD_STATUS" -eq 2 ]; then
|
||||||
|
run_initial_setup
|
||||||
|
return 0
|
||||||
|
elif [ "$DOWNLOAD_STATUS" -ne 0 ]; then
|
||||||
|
logger error "Failed to download Hytale server files."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
save_patchline_version
|
save_patchline_version
|
||||||
extract_server_files
|
extract_server_files
|
||||||
@@ -167,11 +219,12 @@ run_patchline_change() {
|
|||||||
logger info "Updating server to patchline: $PATCHLINE"
|
logger info "Updating server to patchline: $PATCHLINE"
|
||||||
|
|
||||||
$DOWNLOADER -check-update
|
$DOWNLOADER -check-update
|
||||||
if ! $DOWNLOADER -patchline $PATCHLINE -download-path server.zip; then
|
download_server_archive
|
||||||
|
local DOWNLOAD_STATUS=$?
|
||||||
|
|
||||||
|
if [ "$DOWNLOAD_STATUS" -ne 0 ]; then
|
||||||
echo ""
|
echo ""
|
||||||
logger error "Failed to download Hytale server files."
|
logger error "Failed to download Hytale server files."
|
||||||
logger warn "Removing invalid credential file..."
|
|
||||||
rm -f $DOWNLOAD_CRED_FILE
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -196,11 +249,12 @@ run_initial_setup() {
|
|||||||
printc "{MAGENTA}╚══════════════════════════════════════════════════════════════════════════════════════╝"
|
printc "{MAGENTA}╚══════════════════════════════════════════════════════════════════════════════════════╝"
|
||||||
echo " "
|
echo " "
|
||||||
|
|
||||||
if ! $DOWNLOADER -patchline $PATCHLINE -download-path server.zip; then
|
download_server_archive
|
||||||
|
local DOWNLOAD_STATUS=$?
|
||||||
|
|
||||||
|
if [ "$DOWNLOAD_STATUS" -ne 0 ]; then
|
||||||
echo ""
|
echo ""
|
||||||
logger error "Failed to download Hytale server files."
|
logger error "Failed to download Hytale server files."
|
||||||
logger warn "Removing invalid credential file..."
|
|
||||||
rm -f $DOWNLOAD_CRED_FILE
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -216,14 +270,26 @@ run_auto_update() {
|
|||||||
local LOCAL_VERSION=""
|
local LOCAL_VERSION=""
|
||||||
if [ -f "$VERSION_FILE" ]; then
|
if [ -f "$VERSION_FILE" ]; then
|
||||||
LOCAL_VERSION=$(cat $VERSION_FILE)
|
LOCAL_VERSION=$(cat $VERSION_FILE)
|
||||||
|
if downloader_output_has_expired_auth "$LOCAL_VERSION"; then
|
||||||
|
logger warn "Ignoring invalid cached version info from expired downloader authentication."
|
||||||
|
LOCAL_VERSION=""
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
logger warn "Version file not found, forcing update"
|
logger warn "Version file not found, forcing update"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local DOWNLOADER_VERSION=$($DOWNLOADER -print-version -skip-update-check 2>&1)
|
local DOWNLOADER_VERSION=$($DOWNLOADER -print-version -skip-update-check 2>&1)
|
||||||
|
local VERSION_STATUS=$?
|
||||||
|
|
||||||
if [ $? -ne 0 ] || [ -z "$DOWNLOADER_VERSION" ]; then
|
if downloader_output_has_expired_auth "$DOWNLOADER_VERSION"; then
|
||||||
logger error "Failed to get downloader version."
|
clear_downloader_credentials
|
||||||
|
run_initial_setup
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$VERSION_STATUS" -ne 0 ] || [ -z "$DOWNLOADER_VERSION" ]; then
|
||||||
|
logger error "Failed to get available server version."
|
||||||
|
logger info "Response: $DOWNLOADER_VERSION"
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
if [ -n "$LOCAL_VERSION" ]; then
|
if [ -n "$LOCAL_VERSION" ]; then
|
||||||
@@ -234,7 +300,16 @@ run_auto_update() {
|
|||||||
if [ "$LOCAL_VERSION" != "$DOWNLOADER_VERSION" ]; then
|
if [ "$LOCAL_VERSION" != "$DOWNLOADER_VERSION" ]; then
|
||||||
logger warn "Version mismatch, running update..."
|
logger warn "Version mismatch, running update..."
|
||||||
$DOWNLOADER -check-update
|
$DOWNLOADER -check-update
|
||||||
$DOWNLOADER -patchline $PATCHLINE -download-path server.zip
|
download_server_archive
|
||||||
|
local DOWNLOAD_STATUS=$?
|
||||||
|
|
||||||
|
if [ "$DOWNLOAD_STATUS" -eq 2 ]; then
|
||||||
|
run_initial_setup
|
||||||
|
return 0
|
||||||
|
elif [ "$DOWNLOAD_STATUS" -ne 0 ]; then
|
||||||
|
logger error "Failed to download Hytale server files."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
save_patchline_version
|
save_patchline_version
|
||||||
save_downloader_version
|
save_downloader_version
|
||||||
@@ -254,11 +329,20 @@ save_patchline_version() {
|
|||||||
|
|
||||||
save_downloader_version() {
|
save_downloader_version() {
|
||||||
local DOWNLOADER_VERSION=$($DOWNLOADER -print-version -skip-update-check 2>&1)
|
local DOWNLOADER_VERSION=$($DOWNLOADER -print-version -skip-update-check 2>&1)
|
||||||
if [ $? -eq 0 ] && [ -n "$DOWNLOADER_VERSION" ]; then
|
local VERSION_STATUS=$?
|
||||||
|
|
||||||
|
if downloader_output_has_expired_auth "$DOWNLOADER_VERSION"; then
|
||||||
|
clear_downloader_credentials
|
||||||
|
logger error "Failed to save version info because downloader authentication expired."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$VERSION_STATUS" -eq 0 ] && [ -n "$DOWNLOADER_VERSION" ]; then
|
||||||
echo "$DOWNLOADER_VERSION" > $VERSION_FILE
|
echo "$DOWNLOADER_VERSION" > $VERSION_FILE
|
||||||
logger success "Saved version info!"
|
logger success "Saved version info!"
|
||||||
else
|
else
|
||||||
logger error "Failed to get downloader version."
|
logger error "Failed to get available server version."
|
||||||
|
logger info "Response: $DOWNLOADER_VERSION"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user