Go to file
hybris b7a5c66929 Merge remote-tracking branch 'github/master' 2021-12-29 16:19:22 +01:00
charts/goircd Added helm chart 2018-03-14 01:09:17 +01:00
examples/proxy-protocol Fix typo 2018-03-06 22:52:43 +01:00
startup Canonical goircd name 2017-01-13 11:55:05 +03:00
.dockerignore Added Dockerfile 2018-03-13 23:52:03 +01:00
.gitignore Replace Makefile with redo, keep version in source code 2020-09-05 11:30:25 +03:00
AUTHORS Add steigr to AUTHORS 2018-04-24 21:14:36 +02:00
COPYING Initial commit 2014-05-11 20:18:55 +04:00
Dockerfile Fixed entrypoint 2018-03-14 01:08:43 +01:00
GNUmakefile Replace Makefile with redo, keep version in source code 2020-09-05 11:30:25 +03:00
INSTALL Many fixes and additions 2020-11-07 16:52:53 +03:00
README Many fixes and additions 2020-11-07 16:52:53 +03:00
VERSION.do Replace Makefile with redo, keep version in source code 2020-09-05 11:30:25 +03:00
all.do Replace Makefile with redo, keep version in source code 2020-09-05 11:30:25 +03:00
clean.do Many fixes and additions 2020-11-07 16:52:53 +03:00
client.go Merge remote-tracking branch 'github/master' 2021-12-29 16:19:22 +01:00
client_test.go Raise copyright years 2021-01-05 20:48:29 +03:00
common.mk Replace Makefile with redo, keep version in source code 2020-09-05 11:30:25 +03:00
common_test.go Raise copyright years 2021-01-05 20:48:29 +03:00
daemon.go Merge remote-tracking branch 'github/master' 2021-12-29 16:19:22 +01:00
daemon_test.go Raise copyright years 2021-01-05 20:48:29 +03:00
events.go Many fixes and additions 2020-11-07 16:52:53 +03:00
go.mod Initial module support 2019-10-02 16:58:00 +03:00
goircd.do Replace Makefile with redo, keep version in source code 2020-09-05 11:30:25 +03:00
goircd.go Merge remote-tracking branch 'github/master' 2021-12-29 16:19:22 +01:00
lighttpd.conf Example lighttpd configuration for logs directory viewing 2016-03-26 17:29:15 +03:00
log.go Raise copyright years 2021-01-05 20:48:29 +03:00
room.go Merge remote-tracking branch 'github/master' 2021-12-29 16:19:22 +01:00
room_test.go Merge remote-tracking branch 'github/master' 2021-12-29 16:19:22 +01:00

README

     goircd -- minimalistic simple Internet Relay Chat (IRC) server
     ==============================================================

DESCRIPTION

goircd is very simple IRC server, written on Go.
It was heavily inspired by miniircd daemon written on Python.
goircd is free software: see the file COPYING for copying conditions.
It does not aim to replace full featured mass scalable IRC networks:

* It can not connect to other servers. Just standalone installation
* It has few basic IRC commands
* There is no support for channel operators, many modes, votes, invites
* No ident lookups

But it has some convincing features:

* Only standard Go libraries, no external requirements
* Single executable binary
* No configuration file, just few command line arguments
* IPv6 out-of-box support
* Ability to additionally listen on TLS-capable ports
* Optional channels logging to plain text files
* Optional permanent channel's state saving in plain text files
  (so you can reload daemon and all channels topics and keys won't
  disappear)
* Optional ability to authenticate users by nickname and password

Some remarks and recommendations related to it's simplicity:

* Use daemontools to daemonize, setuid/gid it
* Just plaintext logging to stdout, without syslog support -- use
  daemontool's multilog

SUPPORTED IRC COMMANDS

* PASS/NICK/USER during registration workflow
* PING/PONGs
* NOTICE/PRIVMSG, ISON
* AWAY, MOTD, LUSERS, NAMES, WHO, WHOIS, VERSION, WALLOPS, QUIT
* LIST, JOIN, TOPIC, +k/-k channel MODE

USAGE

Just execute goircd daemon. It has following optional arguments:

       -hostname: hostname to show for client's connections
           -bind: address to bind to (:6667 by default)
          -cloak: cloak user's host with the given hostname
           -motd: absolute path to MOTD file. It is reread every time
                  MOTD is requested
         -logdir: directory where all channels messages will be saved. If
                  omitted, then no logs will be kept
       -statedir: directory where all channels states will be saved and
                  loaded during startup. If omitted, then states will be
                  lost after daemon termination
        -tlsbind: enable TLS, specify address to listen on and path
         -tlspem: to PEM file with certificate and private key
         -passwd: enable client authentication and specify path to
                  passwords file
    -timestamped: enabled timestamps for stderr messages
        -verbose: increase verbosity
          -debug: also show traffic messages
 -perm-state-dir: permission (before umask) for newly created state directory
-perm-state-file: permission (before umask) for newly created state file
  -perm-log-file: permission (before umask) for newly created log file

TLS

If you specify -bind and -tlsbind simultaneously, then you will have
both raw and encrypted listening sockets. You can use -bind "" to
disable raw socket.

AUTHENTICATION

You can turn on optional client authentication by preparing passwords
file and using the -passwords argument. Format of passwords file is:

    login1:hex(sha256(password1))\n
    login2:hex(sha256(password2))\n
    ...

You can get hashed password value using: echo -n password | sha256

LOG FILES

Log files are not opened all the time, but only during each message
saving. That is why you can safely rename them for rotation purposes.

STATE FILES

Room's state is created/saved when either topic or key is set. State is
a directory (room's name) with "topic" and "key" plaintext files.

LICENCE

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, version 3 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.