command_postdetails.sh 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #!/bin/bash
  2. # LinuxGSM command_postdetails.sh function
  3. # Author: CedarLUG
  4. # Contributor: CedarLUG
  5. # Website: https://gameservermanagers.com
  6. # Description: Strips sensitive information out of Details output
  7. local commandname="postdetails"
  8. local commandaction="Postdetails"
  9. local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
  10. # Set posttarget to the appropriately-defined post destination.
  11. # The options for posttarget are:
  12. # The default destination - hastebin
  13. # posttarget="https://hastebin.com"
  14. #
  15. # Secondary destination - pastebin
  16. # posttarget="http://pastebin.com
  17. #
  18. # Third option - leave on the filesystem
  19. # posttarget=
  20. #
  21. # All of these options can be specified/overridden from the top-level
  22. # invocation, as in:
  23. # rustserver@gamerig:~$ posttarget="http://pastebin.com" ./rustserver pd
  24. # to post to pastebin, or
  25. # rustserver@gamerig:~$ posttarget= ./rustserver pd
  26. # to leave the output on the filesystem.
  27. posttarget=${posttarget="https://hastebin.com"}
  28. # For pastebin, you can set the expiration period.
  29. # use 1 week as the default, other options are '24h' for a day, etc.
  30. # This, too, may be overridden from the command line at the top-level
  31. postexpire="${postexpire="30D"}"
  32. # This file sources the info_messages.sh file to leverage all
  33. # of the already-defined functions. To keep the command_details.sh
  34. # from actually producing output, the main executable statements have
  35. # been wrapped in the equivalent of an ifdef clause, that looks
  36. # for the variable "postdetails" to be defined. -CedarLUG
  37. # source all of the functions defined in the details command
  38. info_messages.sh
  39. fn_bad_postdetailsfile() {
  40. fn_print_fail_nl "Unable to create temporary file ${postdetailsfile}."
  41. core_exit.sh
  42. }
  43. # Rather than a one-pass sed parser, default to using a temporary directory
  44. if [ -n "${alert}" ]; then
  45. postdetailsfile="${alertlog}"
  46. else
  47. postdetailsfile="${tmpdir}/postdetails-$(date +"%Y-%d-%m_%H-%M-%S").tmp"
  48. touch "${postdetailsfile}" || fn_bad_postdetailsfile
  49. {
  50. # Run checks and gathers details to display.
  51. check.sh
  52. info_config.sh
  53. info_distro.sh
  54. info_glibc.sh
  55. info_parms.sh
  56. info_messages.sh
  57. fn_info_message_distro
  58. fn_info_message_performance
  59. fn_info_message_disk
  60. fn_info_message_gameserver
  61. fn_info_message_script
  62. fn_info_message_backup
  63. # Some game servers do not have parms.
  64. if [ "${gamename}" != "TeamSpeak 3" ]&&[ "${engine}" != "avalanche" ]&&[ "${engine}" != "dontstarve" ]&&[ "${engine}" != "projectzomboid" ]&&[ "${engine}" != "renderware" ]; then
  65. fn_parms
  66. fn_info_message_commandlineparms
  67. fi
  68. fn_info_message_ports
  69. fn_info_message_select_engine
  70. fn_info_message_statusbottom
  71. } | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"| tee -a "${postdetailsfile}" > /dev/null 2>&1
  72. fi
  73. if [ "${posttarget}" == "http://pastebin.com" ] ; then
  74. fn_print_dots "Posting details to pastbin.com for ${postexpire}"
  75. sleep 1
  76. # grab the return from 'value' from an initial visit to pastebin.
  77. csrftoken=$(${curlpath} -s "${posttarget}" |
  78. sed -n 's/^.*input type="hidden" name="csrf_token_post" value="\(.*\)".*$/\1/p')
  79. #
  80. # Use the csrftoken to then post the content.
  81. #
  82. link=$(${curlpath} -s "${posttarget}/post.php" -D - -F "submit_hidden=submit_hidden" \
  83. -F "post_key=${csrftoken}" -F "paste_expire_date=${postexpire}" \
  84. -F "paste_name=${gamename} Debug Info" \
  85. -F "paste_format=8" -F "paste_private=0" \
  86. -F "paste_type=bash" -F "paste_code=<${postdetailsfile}" |
  87. awk '/^location: / { print $2 }' | sed "s/\n//g")
  88. # Output the resulting link.
  89. fn_print_ok_nl "Posting details to pastbin.com for ${postexpire}"
  90. pdurl="${posttarget}${link}"
  91. echo " Please share the following url for support: ${pdurl}"
  92. elif [ "${posttarget}" == "https://hastebin.com" ] ; then
  93. fn_print_dots "Posting details to hastebin.com"
  94. sleep 1
  95. # hastebin is a bit simpler. If successful, the returned result
  96. # should look like: {"something":"key"}, putting the reference that
  97. # we need in "key". TODO - error handling. -CedarLUG
  98. link=$(${curlpath} -H "HTTP_X_REQUESTED_WITH:XMLHttpRequest" -s -d "$(<${postdetailsfile})" "${posttarget}/documents" | cut -d\" -f4)
  99. fn_print_ok_nl "Posting details to hastebin.com for ${postexpire}"
  100. pdurl="${posttarget}/${link}"
  101. echo " Please share the following url for support: ${pdurl}"
  102. else
  103. fn_print_warn_nl Review the output in "${postdetailsfile}"
  104. core_exit.sh
  105. fi
  106. # cleanup
  107. rm "${postdetailsfile}" || /bin/true
  108. if [ -n "${alert}" ]; then
  109. core_exit.sh
  110. else
  111. alerturl="${pdurl}"
  112. fi