From ddcc8658999ccef1883086d6401071ca2d78634a Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Thu, 13 Dec 2018 19:18:10 +0100
Subject: [PATCH] Improve IRC bot/logs setup.

---
 .../web/etc/systemd/system/plomlombot.service |  4 +-
 all_new_2018/setup_plomlombot.sh              | 17 ++++-
 .../user_scripts/plomlombot_daemon.sh         | 70 +++++++++++--------
 3 files changed, 55 insertions(+), 36 deletions(-)

diff --git a/all_new_2018/linkable_etc_files/web/etc/systemd/system/plomlombot.service b/all_new_2018/linkable_etc_files/web/etc/systemd/system/plomlombot.service
index e836e46..a4f6769 100644
--- a/all_new_2018/linkable_etc_files/web/etc/systemd/system/plomlombot.service
+++ b/all_new_2018/linkable_etc_files/web/etc/systemd/system/plomlombot.service
@@ -2,9 +2,9 @@
 Description=plomlombot screen
 
 [Service]
-Type=forking
+Type=simple
 User=plom
-ExecStart=/bin/sh -c '~/start_plomlombot.sh'
+ExecStart=/bin/sh -c '~/plomlombot_daemon.sh'
 Restart=always
 
 [Install]
diff --git a/all_new_2018/setup_plomlombot.sh b/all_new_2018/setup_plomlombot.sh
index 2282603..93e857d 100755
--- a/all_new_2018/setup_plomlombot.sh
+++ b/all_new_2018/setup_plomlombot.sh
@@ -1,14 +1,25 @@
 #!/bin/sh
 set -e
 
+# Ensure we have a GPG target to encrypt to.
+if [ $# -lt 1 ]; then
+    echo "Need public key ID as argument."
+    false
+fi
+gpg_key="$1"
+
 config_tree_prefix="${HOME}/config/all_new_2018/"
 irclogs_dir=/var/www/html/irclogs
 cp "${config_tree_prefix}"/user_scripts/plomlombot_daemon.sh /home/plom/
 chown plom:plom /home/plom/plomlombot_daemon.sh
-apt -y install screen python3-venv
+apt -y install screen python3-venv gpg dirmngr
+su plom -c "gpg --recv-key ${gpg_key}"
+# TODO: After this, we could in theory remove dirmngr if we only installed it just now.
 su plom -c "cd && git clone /var/public_repos/plomlombot-irc"
 systemctl enable /etc/systemd/system/plomlombot.service
 service plomlombot start
 mkdir -p "${irclogs_dir}"
-chown -r plom:plom "${irclogs_dir}"
-echo "Don't forget to add an encryption key to plom's key chain and to his ~/.plomlombot."
+chown -R plom:plom "${irclogs_dir}"
+echo "Don't forget to add a file ~/.plomlombot with content such as:"
+echo "gpg_key ${gpg_key}"
+echo "bot: SCREEN_SESSION_NAME BOT_NAME #CHANNEL_NAME IRC_SERVER_NAME"
diff --git a/all_new_2018/user_scripts/plomlombot_daemon.sh b/all_new_2018/user_scripts/plomlombot_daemon.sh
index 60b0d9c..b7d0709 100755
--- a/all_new_2018/user_scripts/plomlombot_daemon.sh
+++ b/all_new_2018/user_scripts/plomlombot_daemon.sh
@@ -6,38 +6,46 @@ path=~/.plomlombot
 db_dir="${HOME}/plomlombot_db"
 irclogs_dir=/var/www/html/irclogs
 while true; do
-    cat "${path}" | while read line; do
-        first_word=$(echo -n "${line}" | cut -d' ' -f1)
+    if [ -f "${path}" ]; then
+        cat "${path}" | while read line; do
+    	    first_word=$(echo -n "${line}" | cut -d' ' -f1)
 
-        # Read "bot:" line, start bot screen session from it if not yet existing,
-        # set up irclogs dir if not yet existing.
-        if [ "${first_word}" = "bot:" ]; then
-            session_name=$(echo -n "${line}" | cut -d' ' -f2)
-            bot_name=$(echo -n "${line}" | cut -d' ' -f3)
-            channel_name=$(echo -n "${line}" | cut -d' ' -f4)
-            server_name=$(echo -n "${line}" | cut -d' ' -f5)
-            set +e
-            screen -S "${session_name}" -Q select . > /dev/null
-            start_screen=$?
-            set -e
-            if [ "${start_screen}" -eq "1" ]; then
-                cd ~/plomlombot-irc
-                screen -d -m -S "${session_name}" ./run.sh -n "${bot_name}" -s "${server_name}" "${channel_name}"
-            fi
-            md5_server=$(echo -n "${server_name}" | md5sum | cut -d' ' -f1)
-            md5_channel=$(echo -n "${channel_name" | md5sum | cut -d' ' -f1)
-            logs_dir="${db_dir}/${md5_server}/${md5_channel}/logs"
-            # FIXME: Note the trouble we will have if we have the same channel
-            # name on different servers …
-            ln -sf "${logs_dir}" "${irclogs_dir}/${channel_name}"
+    	    # Read "bot:" line, start bot screen session from it if not yet existing,
+    	    # set up irclogs dir if not yet existing.
+    	    if [ "${first_word}" = "bot:" ]; then
+    	        session_name=$(echo -n "${line}" | cut -d' ' -f2)
+    	        bot_name=$(echo -n "${line}" | cut -d' ' -f3)
+    	        channel_name=$(echo -n "${line}" | cut -d' ' -f4)
+    	        server_name=$(echo -n "${line}" | cut -d' ' -f5)
+    	        set +e
+    	        screen -S "${session_name}" -Q select . > /dev/null
+    	        start_screen=$?
+    	        set -e
+    	        if [ "${start_screen}" -eq "1" ]; then
+    	    	cd ~/plomlombot-irc
+    	    	screen -d -m -S "${session_name}" ./run.sh -n "${bot_name}" -s "${server_name}" "${channel_name}"
+    	        fi
+    	        md5_server=$(echo -n "${server_name}" | md5sum | cut -d' ' -f1)
+    	        md5_channel=$(echo -n "${channel_name}" | md5sum | cut -d' ' -f1)
+    	        logs_dir="${db_dir}/${md5_server}/${md5_channel}/logs"
+    	        # FIXME: Note the trouble we will have if we have the same channel
+    	        # name on different servers …
+                shortened_channel_name="${channel_name}"
+                first_char=$(echo -n "${channel_name}" | cut -c1)
+                if [ "${first_char}" = "#" ]; then
+                    shortened_channel_name=$(echo -n "${channel_name}" | cut -c2-)
+                fi
+    	        ln -sf "${logs_dir}" "${irclogs_dir}/${shortened_channel_name}"
 
-        # If "key:" line, encrypt old raw logs to that GPG key.
-        elif [ "${first_word}" = "gpg_key": ]; then
-            key=$(echo -n "${line}" | cut -d' ' -f2)
-            cd ~/plomlombot_db
-            find . -path '*/*/raw_logs/*.txt' -mtime +1 -type f -exec gpg --recipient "${key}" --trust-model always --encrypt {} \; -exec rm {} \;
-        fi
+    	    # If "key:" line, encrypt old raw logs to that GPG key.
+    	    elif [ "${first_word}" = "gpg_key": ]; then
+    	        key=$(echo -n "${line}" | cut -d' ' -f2)
+                mkdir -p ~/plomlombot_db
+    	        cd ~/plomlombot_db
+    	        find . -path '*/*/raw_logs/*.txt' -mtime +1 -type f -exec gpg --recipient "${key}" --trust-model always --encrypt {} \; -exec rm {} \;
+    	    fi
 
-    done
-    sleep 1
+        done
+        sleep 1
+    fi
 done
-- 
2.30.2