gameservergame-servergame-servershacktoberfestdedicated-game-serversgamelinuxgsmserverbashgaminglinuxmultiplayer-game-servershell
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
4.4 KiB
124 lines
4.4 KiB
#!/bin/bash
|
|
# LinuxGSM command_postdetails.sh function
|
|
# Author: CedarLUG
|
|
# Contributor: CedarLUG
|
|
# Website: https://gameservermanagers.com
|
|
# Description: Strips sensitive information out of Details output
|
|
|
|
local commandname="postdetails"
|
|
local commandaction="Postdetails"
|
|
local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
|
|
|
|
# Set posttarget to the appropriately-defined post destination.
|
|
|
|
# The options for posttarget are:
|
|
# The default destination - hastebin
|
|
# posttarget="https://hastebin.com"
|
|
#
|
|
# Secondary destination - pastebin
|
|
# posttarget="http://pastebin.com
|
|
#
|
|
# Third option - leave on the filesystem
|
|
# posttarget=
|
|
#
|
|
# All of these options can be specified/overridden from the top-level
|
|
# invocation, as in:
|
|
# rustserver@gamerig:~$ posttarget="http://pastebin.com" ./rustserver pd
|
|
# to post to pastebin, or
|
|
# rustserver@gamerig:~$ posttarget= ./rustserver pd
|
|
# to leave the output on the filesystem.
|
|
posttarget=${posttarget="https://hastebin.com"}
|
|
|
|
# For pastebin, you can set the expiration period.
|
|
# use 1 week as the default, other options are '24h' for a day, etc.
|
|
# This, too, may be overridden from the command line at the top-level
|
|
postexpire="${postexpire="30D"}"
|
|
|
|
# This file sources the info_messages.sh file to leverage all
|
|
# of the already-defined functions. To keep the command_details.sh
|
|
# from actually producing output, the main executable statements have
|
|
# been wrapped in the equivalent of an ifdef clause, that looks
|
|
# for the variable "postdetails" to be defined. -CedarLUG
|
|
|
|
# source all of the functions defined in the details command
|
|
info_messages.sh
|
|
|
|
fn_bad_postdetailsfile() {
|
|
fn_print_fail_nl "Unable to create temporary file ${postdetailsfile}."
|
|
core_exit.sh
|
|
}
|
|
|
|
# Rather than a one-pass sed parser, default to using a temporary directory
|
|
if [ -n "${alert}" ]; then
|
|
postdetailsfile="${alertlog}"
|
|
else
|
|
postdetailsfile="${tmpdir}/postdetails-$(date +"%Y-%d-%m_%H-%M-%S").tmp"
|
|
touch "${postdetailsfile}" || fn_bad_postdetailsfile
|
|
{
|
|
# Run checks and gathers details to display.
|
|
check.sh
|
|
info_config.sh
|
|
info_distro.sh
|
|
info_glibc.sh
|
|
info_parms.sh
|
|
info_messages.sh
|
|
fn_info_message_distro
|
|
fn_info_message_performance
|
|
fn_info_message_disk
|
|
fn_info_message_gameserver
|
|
fn_info_message_script
|
|
fn_info_message_backup
|
|
# Some game servers do not have parms.
|
|
if [ "${gamename}" != "TeamSpeak 3" ]&&[ "${engine}" != "avalanche" ]&&[ "${engine}" != "dontstarve" ]&&[ "${engine}" != "projectzomboid" ]&&[ "${engine}" != "renderware" ]; then
|
|
fn_parms
|
|
fn_info_message_commandlineparms
|
|
fi
|
|
fn_info_message_ports
|
|
fn_info_message_select_engine
|
|
fn_info_message_statusbottom
|
|
} | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"| tee -a "${postdetailsfile}" > /dev/null 2>&1
|
|
fi
|
|
|
|
if [ "${posttarget}" == "http://pastebin.com" ] ; then
|
|
fn_print_dots "Posting details to pastbin.com for ${postexpire}"
|
|
sleep 1
|
|
# grab the return from 'value' from an initial visit to pastebin.
|
|
csrftoken=$(${curlpath} -s "${posttarget}" |
|
|
sed -n 's/^.*input type="hidden" name="csrf_token_post" value="\(.*\)".*$/\1/p')
|
|
#
|
|
# Use the csrftoken to then post the content.
|
|
#
|
|
link=$(${curlpath} -s "${posttarget}/post.php" -D - -F "submit_hidden=submit_hidden" \
|
|
-F "post_key=${csrftoken}" -F "paste_expire_date=${postexpire}" \
|
|
-F "paste_name=${gamename} Debug Info" \
|
|
-F "paste_format=8" -F "paste_private=0" \
|
|
-F "paste_type=bash" -F "paste_code=<${postdetailsfile}" |
|
|
awk '/^location: / { print $2 }' | sed "s/\n//g")
|
|
|
|
# Output the resulting link.
|
|
fn_print_ok_nl "Posting details to pastbin.com for ${postexpire}"
|
|
pdurl="${posttarget}${link}"
|
|
echo " Please share the following url for support: ${pdurl}"
|
|
elif [ "${posttarget}" == "https://hastebin.com" ] ; then
|
|
fn_print_dots "Posting details to hastebin.com"
|
|
sleep 1
|
|
# hastebin is a bit simpler. If successful, the returned result
|
|
# should look like: {"something":"key"}, putting the reference that
|
|
# we need in "key". TODO - error handling. -CedarLUG
|
|
link=$(${curlpath} -H "HTTP_X_REQUESTED_WITH:XMLHttpRequest" -s -d "$(<${postdetailsfile})" "${posttarget}/documents" | cut -d\" -f4)
|
|
fn_print_ok_nl "Posting details to hastebin.com for ${postexpire}"
|
|
pdurl="${posttarget}/${link}"
|
|
echo " Please share the following url for support: ${pdurl}"
|
|
else
|
|
fn_print_warn_nl "Review output in: ${postdetailsfile}"
|
|
core_exit.sh
|
|
fi
|
|
|
|
# cleanup
|
|
rm "${postdetailsfile}" || /bin/true
|
|
|
|
if [ -z "${alert}" ]; then
|
|
core_exit.sh
|
|
else
|
|
alerturl="${pdurl}"
|
|
fi
|