From: Christian Heller Date: Mon, 21 Apr 2025 18:42:24 +0000 (+0200) Subject: Add IRC log pulling. X-Git-Url: https://plomlompom.com/repos/%22https:/validator.w3.org/%7B%7Bdb.prefix%7D%7D/static/add_task?a=commitdiff_plain;p=config Add IRC log pulling. --- diff --git a/testing/scripts/pull_catgirl_logs.sh b/testing/scripts/pull_catgirl_logs.sh new file mode 100755 index 0000000..69b0f20 --- /dev/null +++ b/testing/scripts/pull_catgirl_logs.sh @@ -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!'