m 2 irc-token: init
This commit is contained in:
parent
f28c54efac
commit
140cd53473
62
2configs/elchos/irc-token.nix
Normal file
62
2configs/elchos/irc-token.nix
Normal 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
|
||||
'';
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue