home · contact · privacy
Add IRC log pulling. master
authorChristian Heller <c.heller@plomlompom.de>
Mon, 21 Apr 2025 18:42:24 +0000 (20:42 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Mon, 21 Apr 2025 18:42:24 +0000 (20:42 +0200)
testing/scripts/pull_catgirl_logs.sh [new file with mode: 0755]

diff --git a/testing/scripts/pull_catgirl_logs.sh b/testing/scripts/pull_catgirl_logs.sh
new file mode 100755 (executable)
index 0000000..69b0f20
--- /dev/null
@@ -0,0 +1,67 @@
+#!/bin/sh
+set -e
+cd $(dirname "$0")
+. lib/abort_if_command_unknown
+. lib/abort_if_offline
+. lib/expect_n_args
+. lib/path_tmp_timestamped
+
+PATH_LOGS_LOCAL="${HOME}/chatlogs/catgirl"
+PATH_DECRYPTION_KEY_ENCRYPTED="${HOME}/.ssh/id_rsa"
+DIRNAME_ENCRYPTED_REMOTE='logs_encrypted'
+
+abort_if_offline
+abort_if_command_unknown age
+
+expect_n_args 1 1 '(server)' $@
+SERVER="$1"
+
+PATH_PROCESSING="$(path_tmp_timestamped pull_catgirl_logs)"
+ON_TRAP_RM_PROCESSING="rm -rf ${PATH_PROCESSING}"
+ON_TRAP="${ON_TRAP_RM_PROCESSING}"
+echo "Setting up processing directory at ${PATH_PROCESSING} …"
+mkdir "${PATH_PROCESSING}"
+trap "${ON_TRAP}" EXIT INT TERM
+cd "${PATH_PROCESSING}"
+
+# Highly questionable acrobatics to work around "age" not supporting ssh-agent.
+PATH_DECRYPTION_KEY="${PATH_PROCESSING}/key"
+cp "${PATH_DECRYPTION_KEY_ENCRYPTED}" "${PATH_DECRYPTION_KEY}"
+# (NB: not using lib/retry_until here cuz ssh-keygen returns non-workable exit codes)
+echo -n 'Enter key decryption password: '
+stty -echo
+ON_TRAP="${ON_TRAP}; stty echo"
+trap "${ON_TRAP}" EXIT INT TERM
+read SSHPASS
+stty echo
+ON_TRAP="${ON_TRAP_RM_PROCESSING}"
+trap "${ON_TRAP}" EXIT INT TERM
+echo ''
+echo "\n\n" | ssh-keygen -q -P "${SSHPASS}" -p -f "${PATH_DECRYPTION_KEY}" > /dev/null
+
+echo 'Collecting encrypted logs from server …'
+DIRNAME_TMP_ENCRYPTED="_${DIRNAME_ENCRYPTED_REMOTE}"
+NAME_ARCHIVE="aged_logs_$(date +'%Y-%m-%d_%H-%M-%S').tar"
+ssh -q "${SERVER}" "mv ${DIRNAME_ENCRYPTED_REMOTE} ${DIRNAME_TMP_ENCRYPTED} && tar cf ${NAME_ARCHIVE} ${DIRNAME_TMP_ENCRYPTED} && rm -rf ${DIRNAME_TMP_ENCRYPTED}"
+scp -q "${SERVER}:~/${NAME_ARCHIVE}" . 
+ssh -q "${SERVER}" "rm ${NAME_ARCHIVE}"
+tar xf "${NAME_ARCHIVE}"
+rm "${NAME_ARCHIVE}"
+
+echo "Decrypting logs to ${PATH_LOGS_LOCAL} …" 
+find "${DIRNAME_TMP_ENCRYPTED}" | while read PATH_FOUND; do
+    if [ ! -f "${PATH_FOUND}" ]; then
+        continue
+    fi
+    TARGET_FILENAME=$(basename "${PATH_FOUND}" | cut -d'.' -f1-2)
+    DIRNAME=$(dirname "${PATH_FOUND}")
+    CHANNELNAME=$(basename "${DIRNAME}")
+    SERVERNAME=$(basename $(dirname "${DIRNAME}"))
+    TARGET_DIRNAME="${SERVERNAME}/${CHANNELNAME}"
+    TARGET_DIRPATH="${PATH_LOGS_LOCAL}/${TARGET_DIRNAME}"
+    echo "Decrypting ${TARGET_DIRNAME}/${TARGET_FILENAME} …"
+    mkdir -p "${TARGET_DIRPATH}"
+    age --decrypt --identity "${PATH_DECRYPTION_KEY}" "${PATH_FOUND}" >> "${TARGET_DIRPATH}/${TARGET_FILENAME}"
+done
+
+echo 'Done!'