diff options
Diffstat (limited to 'krebs/5pkgs/simple')
-rw-r--r-- | krebs/5pkgs/simple/Reaktor/default.nix | 24 | ||||
-rw-r--r-- | krebs/5pkgs/simple/Reaktor/plugins.nix | 182 | ||||
-rwxr-xr-x | krebs/5pkgs/simple/Reaktor/scripts/tell-on_join.sh | 25 | ||||
-rwxr-xr-x | krebs/5pkgs/simple/Reaktor/scripts/tell-on_privmsg.sh | 18 | ||||
-rw-r--r-- | krebs/5pkgs/simple/cyberlocker-tools/default.nix | 10 | ||||
-rw-r--r-- | krebs/5pkgs/simple/git-hooks/default.nix | 3 | ||||
-rw-r--r-- | krebs/5pkgs/simple/htgen-cyberlocker/src/htgen-cyberlocker | 5 | ||||
-rw-r--r-- | krebs/5pkgs/simple/irc-announce/default.nix | 9 | ||||
-rw-r--r-- | krebs/5pkgs/simple/reaktor2-plugins.nix | 4 |
9 files changed, 61 insertions, 219 deletions
diff --git a/krebs/5pkgs/simple/Reaktor/default.nix b/krebs/5pkgs/simple/Reaktor/default.nix deleted file mode 100644 index 1cc498a6..00000000 --- a/krebs/5pkgs/simple/Reaktor/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ lib, pkgs, python3Packages, fetchFromGitHub, ... }: - -python3Packages.buildPythonPackage rec { - name = "Reaktor-${version}"; - version = "0.7.1"; - - doCheck = false; - - propagatedBuildInputs = with pkgs;[ - python3Packages.docopt - python3Packages.requests - ]; - src = fetchFromGitHub { - owner = "krebs"; - repo = "Reaktor"; - rev = "v${version}"; - sha256 = "0cv5a4x73ls6sk8qj2qi6gqn31rv8kvdg13dsf3jv92xdfx6brjn"; - }; - meta = { - homepage = http://krebsco.de/; - description = "An IRC bot based on asynchat"; - license = lib.licenses.wtfpl; - }; -} diff --git a/krebs/5pkgs/simple/Reaktor/plugins.nix b/krebs/5pkgs/simple/Reaktor/plugins.nix deleted file mode 100644 index 1b19a117..00000000 --- a/krebs/5pkgs/simple/Reaktor/plugins.nix +++ /dev/null @@ -1,182 +0,0 @@ -{ stdenv, lib, pkgs, makeWrapper }: - -rec { - # Begin API - buildBaseReaktorPlugin = { name - , config # python extra configuration for plugin - , phases ? [] - , ... } @ attrs: - stdenv.mkDerivation (attrs // { - name = "Reaktor-plugin-" + name; - isReaktorPlugin = true; - }); - - buildSimpleReaktorPlugin = name: { script - , path ? [] - , env ? {} - , append_rule ? false # append the rule instead of insert - , pattern ? "" - , ... } @ attrs: - let - path_env = { "PATH" = lib.makeSearchPath "bin" (path ++ [ pkgs.coreutils ]); }; - src_dir = pkgs.substituteAll ( { - inherit name; - dir = "bin"; - isExecutable = true; - src = script; - }); - src_file = "${src_dir}/bin/${name}"; - config = '' - public_commands.${if append_rule then "append(" else "insert(0," }{ - 'capname' : "${name}", - 'pattern' : ${if pattern == "" then - ''indirect_pattern.format("${name}")'' else - ''"${pattern}"'' }, - 'argv' : ["${src_file}"], - 'env' : ${builtins.toJSON (path_env // env)} }) - ''; - config_file = pkgs.writeText "plugin.py" config; - in buildBaseReaktorPlugin (attrs // rec { - inherit name config; - - phases = [ "installPhase" ]; - buildInputs = [ makeWrapper ]; - installPhase = '' - mkdir -p $out/bin $out/etc/Reaktor - ln -s ${src_file} $out/bin - wrapProgram $out/bin/${name} \ - --prefix PATH : ${path_env.PATH} - ln -s ${config_file} $out/etc/Reaktor/plugin.py - ''; - - }); - # End API - - # Begin Plugins - random-emoji = buildSimpleReaktorPlugin "emoji" { - path = with pkgs; [ gnused gnugrep xmlstarlet curl ]; - script = ./scripts/random-emoji.sh; - }; - - sed-plugin = buildSimpleReaktorPlugin "sed-plugin" { - path = [ pkgs.gnused pkgs.python3 ]; - # only support s///gi the plugin needs to see every msg - # TODO: this will eat up the last regex, fix Reaktor to support fallthru - append_rule = true; - pattern = "^(?P<args>.*)$$"; - script = ./scripts/sed-plugin.py; - }; - - shack-correct = buildSimpleReaktorPlugin "shack-correct" { - path = [ pkgs.gnused ]; - pattern = "^(?P<args>.*Shack.*)$$"; - script = ./scripts/shack-correct.sh; - }; - - nixos-version = buildSimpleReaktorPlugin "nixos-version" { - script = pkgs.writeDash "nixos-version" '' - . /etc/os-release - echo "$PRETTY_NAME" - ''; - }; - stockholm-issue = buildSimpleReaktorPlugin "stockholm-issue" { - script = ./scripts/random-issue.sh; - path = with pkgs; [ git gnused haskellPackages.lentil ]; - env = { "origin" = "http://cgit.gum/stockholm"; }; - }; - - titlebot = - let - pypkgs = pkgs.python3Packages; - titlebot_cmds = pypkgs.buildPythonPackage { - name = "titlebot_cmds"; - propagatedBuildInputs = with pypkgs; [ setuptools ]; - src = pkgs.fetchurl { - url = "https://github.com/makefu/reaktor-titlebot/archive/2.1.0.tar.gz"; - sha256 = "0wvf09wmk8b52f9j65qrw81nwrhs9pfhijwrlkzp5l7l2q8cjkp6"; - }; - }; - in buildBaseReaktorPlugin rec { - name = "titlebot"; - phases = [ "installPhase" ]; - installPhase = '' - mkdir -p $out - ln -s ${titlebot_cmds}/* $out - ''; - config = '' - def titlebot_cmd(cmd): - from os import environ - return { 'capname': None, - 'env': { 'TITLEDB': - environ['state_dir']+'/suggestions.json' }, - 'pattern': '^\\.' + cmd + '\\s*(?:\\s+(?P<args>.*))?$$', - 'argv': [ '${titlebot_cmds}/bin/' + cmd ] } - for i in ['up','help','list','top','new']: - public_commands.insert(0,titlebot_cmd(i)) - commands.insert(0,titlebot_cmd('clear')) - ''; - }; - - url-title = (buildSimpleReaktorPlugin "url-title" { - pattern = "^.*(?P<args>http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+).*$$"; - path = with pkgs; [ curl perl ]; - script = pkgs.writePython3 "url-title" { deps = with pkgs.python3Packages; [ beautifulsoup4 lxml ]; } '' - import cgi - import sys - import urllib.request - from bs4 import BeautifulSoup - - try: - req = urllib.request.Request(sys.argv[1]) - req.add_header('user-agent', 'Reaktor-url-title') - resp = urllib.request.urlopen(req) - if resp.headers['content-type'].find('text/html') >= 0: - soup = BeautifulSoup(resp.read(16000), "lxml") - title = soup.find('title').string - - if len(title.split('\n')) > 5: - title = '\n'.join(title.split('\n')[:5]) - - print(title[:450]) - else: - cd_header = resp.headers['content-disposition'] - print(cgi.parse_header(cd_header)[1]['filename']) - except: # noqa: E722 - pass - ''; - }); - - task = name: let - rcFile = builtins.toFile "taskrc" '' - confirmation=no - ''; - in { - add = buildSimpleReaktorPlugin "${name}-task-add" { - pattern = "^${name}-add: (?P<args>.*)$$"; - script = pkgs.writeDash "${name}-add" '' - TASKDATA=$HOME/${name} ${pkgs.taskwarrior}/bin/task rc:${rcFile} add "$*" - ''; - }; - - list = buildSimpleReaktorPlugin "task-list" { - pattern = "^${name}-list"; - script = pkgs.writeDash "task-list" '' - TASKDATA=$HOME/${name} ${pkgs.taskwarrior}/bin/task rc:${rcFile} export | ${pkgs.jq}/bin/jq -r '.[] | select(.id != 0) | "\(.id) \(.description)"' - ''; - }; - - delete = buildSimpleReaktorPlugin "task-delete" { - pattern = "^${name}-delete: (?P<args>.*)$$"; - script = pkgs.writeDash "task-delete" '' - TASKDATA=$HOME/${name} ${pkgs.taskwarrior}/bin/task rc:${rcFile} delete "$*" - ''; - }; - - done = buildSimpleReaktorPlugin "task-done" { - pattern = "^${name}-done: (?P<args>.*)$$"; - script = pkgs.writeDash "task-done" '' - TASKDATA=$HOME/${name} ${pkgs.taskwarrior}/bin/task rc:${rcFile} done "$*" - ''; - }; - }; -} diff --git a/krebs/5pkgs/simple/Reaktor/scripts/tell-on_join.sh b/krebs/5pkgs/simple/Reaktor/scripts/tell-on_join.sh new file mode 100755 index 00000000..c21dc877 --- /dev/null +++ b/krebs/5pkgs/simple/Reaktor/scripts/tell-on_join.sh @@ -0,0 +1,25 @@ +#! /bin/sh +set -euf + +# require flock from util-linux (pkgs.utillinux) +if test "${FLOCK-}" != "$state_file"; then + exec env FLOCK="$state_file" flock "$state_file" "$0" "$@" +fi + +# TODO tell now, if already joined +jq -r <"$state_file" \ + --arg to "$_from" \ + --arg msgtarget "$_msgtarget" \ + ' + select(.to == $to and .msgtarget == $msgtarget) | + "\(.to): \(.text) \u00032-- \(.from)\u00032 \(.date)" + ' + +jq -c <"$state_file" >"$state_file.tmp" \ + --arg to "$_from" \ + --arg msgtarget "$_msgtarget" \ + ' + select((.to == $to and .msgtarget == $msgtarget) | not) + ' + +mv "$state_file.tmp" "$state_file" diff --git a/krebs/5pkgs/simple/Reaktor/scripts/tell-on_privmsg.sh b/krebs/5pkgs/simple/Reaktor/scripts/tell-on_privmsg.sh new file mode 100755 index 00000000..fc05bdef --- /dev/null +++ b/krebs/5pkgs/simple/Reaktor/scripts/tell-on_privmsg.sh @@ -0,0 +1,18 @@ +#! /bin/sh +set -euf + +# require flock from util-linux +if test "${FLOCK-}" != "$state_file"; then + exec env FLOCK="$state_file" flock "$state_file" "$0" "$@" +fi + +# TODO tell now, if already joined +jq -cn \ + --arg from "$_from" \ + --arg to "${1%% *}" \ + --arg text "${1#* }" \ + --arg msgtarget "$_msgtarget" \ + '{ $from, $to, $text, $msgtarget, date: (now | todate) }' \ + >> "$state_file" + +echo 'Consider it noted.' # that's what lambdabot says... diff --git a/krebs/5pkgs/simple/cyberlocker-tools/default.nix b/krebs/5pkgs/simple/cyberlocker-tools/default.nix index d43be1d6..6e6563fb 100644 --- a/krebs/5pkgs/simple/cyberlocker-tools/default.nix +++ b/krebs/5pkgs/simple/cyberlocker-tools/default.nix @@ -5,15 +5,19 @@ pkgs.symlinkJoin { (pkgs.writers.writeDashBin "cput" '' set -efu path=''${1:-$(hostname)} + path=$(echo "/$path" | sed -E 's:/+:/:') + url=http://c.r$path - ${pkgs.curl}/bin/curl -fSs --data-binary @- "http://c.r/$path" - echo "http://c.r/$path" + ${pkgs.curl}/bin/curl -fSs --data-binary @- "$url" + echo "$url" '') (pkgs.writers.writeDashBin "cdel" '' set -efu path=$1 + path=$(echo "/$path" | sed -E 's:/+:/:') + url=http://c.r$path - ${pkgs.curl}/bin/curl -f -X DELETE "http://c.r/$path" + ${pkgs.curl}/bin/curl -f -X DELETE "$url" '') ]; } diff --git a/krebs/5pkgs/simple/git-hooks/default.nix b/krebs/5pkgs/simple/git-hooks/default.nix index 0a2c8441..acf34ad6 100644 --- a/krebs/5pkgs/simple/git-hooks/default.nix +++ b/krebs/5pkgs/simple/git-hooks/default.nix @@ -12,6 +12,7 @@ with import <stockholm/lib>; , port ? 6667 , refs ? [] , server + , tls ? false , verbose ? false }: /* sh */ '' #! /bin/sh @@ -39,6 +40,7 @@ with import <stockholm/lib>; nick=${escapeShellArg nick} channel=${escapeShellArg channel} server=${escapeShellArg server} + tls=${escapeShellArg tls} port=${toString port} host=$nick @@ -114,6 +116,7 @@ with import <stockholm/lib>; "$port" \ "$nick" \ "$channel" \ + "$tls" \ "$message" fi ''; diff --git a/krebs/5pkgs/simple/htgen-cyberlocker/src/htgen-cyberlocker b/krebs/5pkgs/simple/htgen-cyberlocker/src/htgen-cyberlocker index 6c3ed655..ab9c4e8e 100644 --- a/krebs/5pkgs/simple/htgen-cyberlocker/src/htgen-cyberlocker +++ b/krebs/5pkgs/simple/htgen-cyberlocker/src/htgen-cyberlocker @@ -57,10 +57,7 @@ case "$Method $path" in mkdir -v -p $STATEDIR/items >&2 cp -v $content $item >&2 - - scheme=${req_x_forwarded_proto-http} - link=$scheme://$req_host/$path - + exit ;; 'GET /'*) item=$STATEDIR/items/$(echo "$path" | jq -rR @uri) diff --git a/krebs/5pkgs/simple/irc-announce/default.nix b/krebs/5pkgs/simple/irc-announce/default.nix index 52cf1286..5797b366 100644 --- a/krebs/5pkgs/simple/irc-announce/default.nix +++ b/krebs/5pkgs/simple/irc-announce/default.nix @@ -17,7 +17,8 @@ pkgs.writeDashBin "irc-announce" '' IRC_PORT=$2 IRC_NICK=$3_$$ IRC_CHANNEL=$4 - message=$5 + IRC_TLS=$5 + message=$6 export IRC_CHANNEL # for privmsg_cat @@ -34,6 +35,8 @@ pkgs.writeDashBin "irc-announce" '' # privmsg_cat transforms stdin to a privmsg privmsg_cat() { awk '{ print "PRIVMSG "ENVIRON["IRC_CHANNEL"]" :"$0 }'; } + tls_flag() { if [ "$IRC_TLS" -eq 1 ]; then echo "-c"; fi } + # ircin is used to feed the output of netcat back to the "irc client" # so we can implement expect-like behavior with sed^_^ # XXX mkselfdestructingtmpfifo would be nice instead of this cruft @@ -51,6 +54,8 @@ pkgs.writeDashBin "irc-announce" '' echo2 "USER $LOGNAME 0 * :$LOGNAME@$(hostname)" echo2 "NICK $IRC_NICK" + awk 'match($0, /PING(.*)/, m) {print "PONG", m[1]; exit}' + # wait for MODE message sed -n '/^:[^ ]* MODE /q' @@ -67,5 +72,5 @@ pkgs.writeDashBin "irc-announce" '' echo2 'QUIT :Gone to have lunch' } < ircin \ - | nc "$IRC_SERVER" "$IRC_PORT" | tee -a ircin + | nc $(tls_flag) "$IRC_SERVER" "$IRC_PORT" | tee -a ircin '' diff --git a/krebs/5pkgs/simple/reaktor2-plugins.nix b/krebs/5pkgs/simple/reaktor2-plugins.nix index 48464c0b..4cd9e7d8 100644 --- a/krebs/5pkgs/simple/reaktor2-plugins.nix +++ b/krebs/5pkgs/simple/reaktor2-plugins.nix @@ -14,10 +14,6 @@ rec { commands = { - hello = { - filename = "${pkgs.Reaktor.src}/reaktor/commands/hello"; - }; - random-emoji = { filename = <stockholm/krebs/5pkgs/simple/Reaktor/scripts/random-emoji.sh>; env = { |