m 2 irc-token: init

This commit is contained in:
makefu 2016-12-12 19:38:13 +01:00
parent bc2b56baaf
commit 5f103b3f25
No known key found for this signature in database
GPG Key ID: 36F7711F3FC0F225

View File

@ -0,0 +1,62 @@
{pkgs, ...}:
with import <stockholm/lib>;
let
secret = (import <secrets/elchos-token.nix>);
in {
systemd.services.elchos-irctoken = {
startAt = "*:0/30";
serviceConfig = {
RuntimeMaxSec = "20";
};
script = ''
set -euf
now=$(date -u +%Y-%m-%dT%H:%M)
sec=$(echo -n "${secret}$now" | md5sum | cut -d\ -f1)
message="The secret valid for 30 minutes is $sec"
echo "token for $now (UTC) is $sec"
LOGNAME=sec-announcer
HOSTNAME=$(${pkgs.systemd}/bin/hostnamectl --static)
IRC_SERVER=irc.freenode.net
IRC_PORT=6667
IRC_NICK=$HOSTNAME-$$
IRC_CHANNEL='#eloop'
export IRC_CHANNEL # for privmsg_cat
echo2() { echo "$*"; echo "$*" >&2; }
privmsg_cat() { ${pkgs.gawk}/bin/awk '{ print "PRIVMSG "ENVIRON["IRC_CHANNEL"]" :"$0 }'; }
tmpdir="$(mktemp -d irc-announce_XXXXXXXX)"
cd "$tmpdir"
mkfifo ircin
trap "
rm ircin
cd '$OLDPWD'
rmdir '$tmpdir'
trap - EXIT INT QUIT
" EXIT INT QUIT
{
echo2 "USER $LOGNAME 0 * :$LOGNAME@$HOSTNAME"
echo2 "NICK $IRC_NICK"
# wait for MODE message
${pkgs.gnused}/bin/sed -un '/^:[^ ]* MODE /q'
echo2 "JOIN $IRC_CHANNEL"
printf '%s' "$message" \
| privmsg_cat
echo2 "PART $IRC_CHANNEL"
# wait for PART confirmation
sed -un '/:'"$IRC_NICK"'![^ ]* PART /q'
echo2 'QUIT :Gone to have lunch'
} < ircin \
| ${pkgs.netcat}/bin/netcat "$IRC_SERVER" "$IRC_PORT" |tee -a ircin
'';
};
}