aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
blob: f661d70497c170a7ec8ef59e22f8e6e11a646f5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91


  first create a configuration file, say config.json, that looks like follows:

    {
      "nick": "somenick",
      "useNickServ": false
    }

  or, if the nick is registered with NickServ, then:

    {
      "nick": "somenick",
      "pass": "somepass"
    }

  then enter the Nix shell for development:

    cabal2nix . > default.nix && nix-shell -I stockholm=~/stockholm

  and run the REPL:

    build
    run config.json

  or, interactively:

    ghci -isrc -Wall src/main.hs
    withArgs ["config.json"] main
    :r

# HTTP API

  Reaktor can provide an HTTP API so external applications can control
  its behavior.  At the moment this is restricted to send PRIVMSGs to
  registered channels.

## Enable the HTTP API

  To enable the HTTP API, a listening address has to be configured.
  This address can be a TCP port, specified like follows:

    {
      "API": {
        "listen": "inet://127.0.0.1:7777"
      }
    }

  or it can be an Unix domain socket, specified like follows:

    {
      "API": {
        "listen": "unix:/path/to/reaktor.sock"
      }
    }

## Example usage of the HTTP API

  Let's say your reaktor instance has been configured to listen to
  inet://localhost:7777, and the register plugin has been configured
  to join #somechannel.  Then it is possible to send a PRIVMSG to
  this channel using e.g. following command:

    curl -fsSv http://localhost:7777/ \
        -H content-type:application/json \
        -d "$(jq -n '{command:"PRIVMSG",params:["#somechannel","derp!"]}')"

  And similarly if unix:/path/to/reaktor.sock has been used instead:

    curl -fsSv --unix-socket /path/to/reaktor.sock http://dontcare/ \
        -H content-type:application/json \
        -d "$(jq -n '{command:"PRIVMSG",params:["#somechannel","derp!"]}')"

# SASL

  To use SASL for authentication, merge following snippet into your configuration:

    {
      "plugins": [
        {
          "plugin": "sasl",
          "config": {
            "mechanism": "PLAIN",
            "username": "somename",
            "password": "SOMEPASSWORD"
          }
        }
      ]
    }

  Note that at the moment only SASL PLAIN is supported.