source: code/trunk/doc/soju.1.scd@ 693

Last change on this file since 693 was 691, checked in by contact, 4 years ago

Allow most config options to be reloaded

Closes: https://todo.sr.ht/~emersion/soju/42

File size: 11.8 KB
Line 
1soju(1)
2
3# NAME
4
5soju - IRC bouncer
6
7# SYNOPSIS
8
9*soju* [options...]
10
11# DESCRIPTION
12
13soju is a user-friendly IRC bouncer. It connects to upstream IRC servers on
14behalf of the user to provide extra features.
15
16- Multiple separate users sharing the same bouncer, each with their own
17 upstream servers
18- Clients connecting to multiple upstream servers via a single connection to
19 the bouncer
20- Sending the backlog (messages received while the user was disconnected from
21 the bouncer), with per-client buffers
22
23When joining a channel, the channel will be saved and automatically joined on
24the next connection. When registering or authenticating with NickServ, the
25credentials will be saved and automatically used on the next connection if the
26server supports SASL. When parting a channel with the reason "detach", the
27channel will be detached instead of being left.
28
29When all clients are disconnected from the bouncer, the user is automatically
30marked as away.
31
32soju supports two connection modes:
33
34- Single upstream mode: one downstream connection maps to one upstream
35 connection. To enable this mode, connect to the bouncer with the username
36 "<username>/<network>". If the bouncer isn't connected to the upstream
37 server, it will get automatically added. Then channels can be joined and
38 parted as if you were directly connected to the upstream server.
39- Multiple upstream mode: one downstream connection maps to multiple upstream
40 connections. Channels and nicks are suffixed with the network name. To join
41 a channel, you need to use the suffix too: _/join #channel/network_. Same
42 applies to messages sent to users.
43
44For per-client history to work, clients need to indicate their name. This can
45be done by adding a "@<client>" suffix to the username.
46
47soju will reload the configuration file, the TLS certificate/key and the MOTD
48file when it receives the HUP signal. The configuration options _listen_, _db_
49and _log_ cannot be reloaded.
50
51Administrators can broadcast a message to all bouncer users via _/notice
52$<hostname> <text>_, or via _/notice $\* <text>_ in multi-upstream mode. All
53currently connected bouncer users will receive the message from the special
54_BouncerServ_ service.
55
56# OPTIONS
57
58*-h, -help*
59 Show help message and quit.
60
61*-config* <path>
62 Path to the config file. If unset, a default config file is used.
63
64*-debug*
65 Enable debug logging (this will leak sensitive information such as
66 passwords).
67
68*-listen* <uri>
69 Listening URI (default: ":6697"). Can be specified multiple times.
70
71# CONFIG FILE
72
73The config file has one directive per line.
74
75Example:
76
77```
78listen ircs://
79tls cert.pem key.pem
80hostname example.org
81```
82
83The following directives are supported:
84
85*listen* <uri>
86 Listening URI (default: ":6697").
87
88 The following URIs are supported:
89
90 - _[ircs://][host][:port]_ listens with TLS over TCP (default port if
91 omitted: 6697)
92 - _irc+insecure://[host][:port]_ listens with plain-text over TCP (default
93 port if omitted: 6667)
94 - _unix:///<path>_ listens on a Unix domain socket
95 - _wss://[host][:port]_ listens for WebSocket connections over TLS (default
96 port: 443)
97 - _ws+insecure://[host][:port]_ listens for plain-text WebSocket
98 connections (default port: 80)
99 - _ident://[host][:port]_ listens for plain-text ident connections (default
100 port: 113)
101
102 If the scheme is omitted, "ircs" is assumed. If multiple *listen*
103 directives are specified, soju will listen on each of them.
104
105*hostname* <name>
106 Server hostname (default: system hostname).
107
108*title* <title>
109 Server title. This will be sent as the _ISUPPORT NETWORK_ value when clients
110 don't select a specific network.
111
112*tls* <cert> <key>
113 Enable TLS support. The certificate and the key files must be PEM-encoded.
114
115*db* <driver> <source>
116 Set the database location for user, network and channel storage. By default,
117 a _sqlite3_ database is opened in "./soju.db".
118
119 Supported drivers:
120
121 - _sqlite3_ expects _source_ to be a path to the SQLite file
122 - _postgres_ expects _source_ to be a space-separated list of _key=value_
123 parameters, e.g. _db postgres "host=/run/postgresql dbname=soju"_. Note
124 that _sslmode_ defaults to _require_. For more information on connection
125 strings, see:
126 <https://pkg.go.dev/github.com/lib/pq#hdr-Connection_String_Parameters>.
127
128*log* fs <path>
129 Path to the bouncer logs root directory, or empty to disable logging. By
130 default, logging is disabled.
131
132*http-origin* <patterns...>
133 List of allowed HTTP origins for WebSocket listeners. The parameters are
134 interpreted as shell patterns, see *glob*(7).
135
136 By default, only the request host is authorized. Use this directive to
137 enable cross-origin WebSockets.
138
139*accept-proxy-ip* <cidr...>
140 Allow the specified IPs to act as a proxy. Proxys have the ability to
141 overwrite the remote and local connection addresses (via the PROXY protocol,
142 the Forwarded HTTP header field defined in RFC 7239 or the X-Forwarded-\*
143 HTTP header fields). The special name "localhost" accepts the loopback
144 addresses 127.0.0.0/8 and ::1/128.
145
146 By default, all IPs are rejected.
147
148*max-user-networks* <limit>
149 Maximum number of networks per user. By default, there is no limit.
150
151*motd* <path>
152 Path to the MOTD file. The bouncer MOTD is sent to clients which aren't
153 bound to a specific network. By default, no MOTD is sent.
154
155# IRC SERVICE
156
157soju exposes an IRC service called *BouncerServ* to manage the bouncer.
158Commands can be sent via regular private messages
159(_/msg BouncerServ <command> [args...]_). Commands may be written in full or
160abbreviated form, for instance *network* can be abbreviated as *net* or just
161*n*.
162
163*help* [command]
164 Show a list of commands. If _command_ is specified, show a help message for
165 the command.
166
167*network create* *-addr* <addr> [options...]
168 Connect to a new network at _addr_. _-addr_ is mandatory.
169
170 _addr_ supports several connection types:
171
172 - _[ircs://]<host>[:port]_ connects with TLS over TCP
173 - _irc+insecure://<host>[:port]_ connects with plain-text TCP
174 - _irc+unix:///<path>_ connects to a Unix socket
175
176 Other options are:
177
178 *-name* <name>
179 Short network name. This will be used instead of _addr_ to refer to the
180 network.
181
182 *-username* <username>
183 Connect with the specified username. By default, the nickname is used.
184
185 *-pass* <pass>
186 Connect with the specified server password.
187
188 *-realname* <realname>
189 Connect with the specified real name. By default, the account's realname
190 is used if set, otherwise the network's nickname is used.
191
192 *-nick* <nickname>
193 Connect with the specified nickname. By default, the account's username
194 is used.
195
196 *-enabled* true|false
197 Enable or disable the network. If the network is disabled, the bouncer
198 won't connect to it. By default, the network is enabled.
199
200 *-connect-command* <command>
201 Send the specified command as a raw IRC message right after connecting
202 to the server. This can be used to identify to an account when the
203 server doesn't support SASL.
204
205 For instance, to identify with _NickServ_, the following command can be
206 used:
207
208 ```
209 PRIVMSG NickServ :IDENTIFY <password>
210 ```
211
212 The flag can be specified multiple times to send multiple IRC messages.
213 To clear all commands, set it to the empty string.
214
215*network update* <name> [options...]
216 Update an existing network. The options are the same as the
217 _network create_ command.
218
219 When this command is executed, soju will disconnect and re-connect to the
220 network.
221
222*network delete* <name>
223 Disconnect and delete a network.
224
225*network quote* <name> <command>
226 Send a raw IRC line as-is to a network.
227
228*network status*
229 Show a list of saved networks and their current status.
230
231*channel status* [options...]
232 Show a list of saved channels and their current status.
233
234 Options:
235
236 *-network* <name>
237 Only show channels for the specified network. By default, only the
238 channels in the current network are displayed.
239
240*channel update* <name> [options...]
241 Update the options of an existing channel.
242
243 Options are:
244
245 *-relay-detached* <mode>
246 Set when to relay messages from detached channels to the user with a BouncerServ NOTICE.
247
248 Modes are:
249
250 *message*
251 Relay any message from this channel when detached.
252
253 *highlight*
254 Relay only messages mentioning you when detached.
255
256 *none*
257 Don't relay any messages from this channel when detached.
258
259 *default*
260 Currently same as *highlight*. This is the default behaviour.
261
262 *-reattach-on* <mode>
263 Set when to automatically reattach to detached channels.
264
265 Modes are:
266
267 *message*
268 Reattach to this channel when any message is received.
269
270 *highlight*
271 Reattach to this channel when any message mentioning you is received.
272
273 *none*
274 Never automatically reattach to this channel.
275
276 *default*
277 Currently same as *none*. This is the default behaviour.
278
279 *-detach-after* <duration>
280 Automatically detach this channel after the specified duration has elapsed without receving any message corresponding to *-detach-on*.
281
282 Example duration values: *1h30m*, *30s*, *2.5h*.
283
284 Setting this value to 0 will disable this behaviour, i.e. this channel will never be automatically detached. This is the default behaviour.
285
286 *-detach-on* <mode>
287 Set when to reset the auto-detach timer used by *-detach-after*, causing it to wait again for the auto-detach duration timer before detaching.
288 Joining, reattaching, sending a message, or changing any channel option will reset the timer, in addition to the messages specified by the mode.
289
290 Modes are:
291
292 *message*
293 Receiving any message from this channel will reset the auto-detach timer.
294
295 *highlight*
296 Receiving any message mentioning you from this channel will reset the auto-detach timer.
297
298 *none*
299 Receiving messages from this channel will not reset the auto-detach timer. Sending messages or joining the channel will still reset the timer.
300
301 *default*
302 Currently same as *message*. This is the default behaviour.
303
304*certfp generate* [options...] <network name>
305 Generate self-signed certificate and use it for authentication (via SASL
306 EXTERNAL).
307
308 Generates a 3072-bit RSA private key by default.
309
310 Options are:
311
312 *-key-type* <type>
313 Private key algorithm to use. Valid values are: _rsa_, _ecdsa_ and
314 _ed25519_. _ecdsa_ uses the NIST P-521 curve.
315
316 *-bits* <bits>
317 Size of RSA key to generate. Ignored for other key types.
318
319*certfp fingerprint* <network name>
320 Show SHA-1 and SHA-256 fingerprints for the certificate
321 currently used with the network.
322
323*sasl set-plain* <network name> <username> <password>
324 Set SASL PLAIN credentials.
325
326*sasl reset* <network name>
327 Disable SASL authentication and remove stored credentials.
328
329*user create* -username <username> -password <password> [options...]
330 Create a new soju user. Only admin users can create new accounts.
331 The _-username_ and _-password_ flags are mandatory.
332
333 Options are:
334
335 *-username* <username>
336 The bouncer username. This cannot be changed after the user has been
337 created.
338
339 *-password* <password>
340 The bouncer password.
341
342 *-admin* true|false
343 Make the new user an administrator.
344
345 *-realname* <realname>
346 Set the user's realname. This is used as a fallback if there is no
347 realname set for a network.
348
349*user update* [username] [options...]
350 Update a user. The options are the same as the _user create_ command.
351
352 If _username_ is omitted, the current user is updated. Only admins can
353 update other users.
354
355 Not all flags are valid in all contexts:
356
357 - The _-username_ flag is never valid, usernames are immutable.
358 - The _-realname_ flag is only valid when updating the current user.
359 - The _-admin_ flag is only valid when updating another user.
360
361*user delete* <username>
362 Delete a soju user. Only admins can delete accounts.
363
364*server status*
365 Show some bouncer statistics. Only admins can query this information.
366
367*server notice* <message>
368 Broadcast a notice. All currently connected bouncer users will receive the
369 message from the special _BouncerServ_ service. Only admins can broadcast a
370 notice.
371
372# AUTHORS
373
374Maintained by Simon Ser <contact@emersion.fr>, who is assisted by other
375open-source contributors. For more information about soju development, see
376<https://sr.ht/~emersion/soju>.
Note: See TracBrowser for help on using the repository browser.