https://github.com/heyitsanthony/etcdircd
An ircd backed by etcd
https://github.com/heyitsanthony/etcdircd
etcd irc irc-server ircd
Last synced: 5 months ago
JSON representation
An ircd backed by etcd
- Host: GitHub
- URL: https://github.com/heyitsanthony/etcdircd
- Owner: heyitsanthony
- License: agpl-3.0
- Created: 2017-10-18T12:16:14.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-11-29T04:02:15.000Z (over 8 years ago)
- Last Synced: 2024-06-20T06:30:33.425Z (almost 2 years ago)
- Topics: etcd, irc, irc-server, ircd
- Language: Go
- Homepage:
- Size: 2.12 MB
- Stars: 75
- Watchers: 7
- Forks: 2
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Security: security.md
Awesome Lists containing this project
README
# etcdircd
An encrypted irc daemon backed by [etcd](https://github.com/coreos/etcd).
## Running etcdircd
Install `go`, then build etcd and etcdircd:
```sh
$ go get github.com/heyitsanthony/etcdircd/cmd/etcdircd
$ go get github.com/coreos/etcd/cmd/etcd
```
Launch an etcd server and an etcdircd server:
```sh
$ etcd &
$ etcdircd &
```
Connect with an irc client:
```sh
$ irssi -n mynick --connect localhost
```
If it all worked, the client will connect and display the welcome banner. See the [security guide](security.md) to encrypt everything.
## How it works
An etcdircd server communicates with other etcdircd servers through etcd. Each server receives messages by watching on etcd keys; network disconnection is tolerated by resuming the watches. If an etcdircd server permanently loses contact with etcd, its resources are automatically released through session expiration.
User information is stored under `/user/` with a given ``. The key `/user/ctl/` holds user metadata including modes, name, and joined channels. The key `/user/msg/` forwards IRC messages to ``'s connection. For example, writing a `PRIVMSG` message to `/user/msg/` will send a private message to ``.
Channel information is similar; its keys are prefixed with `/chan/` and take a given ``. The key `/chan/ctl/` holds metadata such as the channel topic. The key `/chan/msg/` forwards IRC messages to all users on the channel. To notify channels when users disconnect, joined users are written to per-server keys `/chan/nicks//`; when the session expires, the key deletion event signals server loss and all the server's users are removed from the channel.
## Limitations
etcdircd is still under active development. It's enough to chat, but not much else!
etcd backend encryption is missing:
* Key revocation
* Key rotation (2^32 messages before risking repeat IV)
* Replay attack protection
* Certificates other than 4096-bit RSA
* Physical attestation
The irc frontend:
* Many IRC commands and modes
* Services
* Server linking
## Contact
Use the [issue tracker](https://github.com/heyitsanthony/etcdircd/issues)
Or try the etcd channel on freenode.
## License
etcdircd is under the AGPLv3 license. See [LICENSE](LICENSE) for details.