From 67f841e009d08b78d301aac48241b401b7864087 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Thu, 30 May 2019 21:10:16 -0400 Subject: [PATCH 01/12] changelog and documentation updates for 1.1.0rc1 --- CHANGELOG.md | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 12 ++++---- docs/MANUAL.md | 45 ++++++++++++++++++++++++++++- 3 files changed, 129 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23632f44..1ad43940 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,84 @@ All notable changes to Oragono will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). For the purposes of versioning, we consider the "public API" to refer to the configuration files, CLI interface and database format. +## [1.1.0-rc1] - 2019-06-03 +We have a number of exciting improvements in 1.1.0: + +Highlights include: + +* Support for attaching multiple clients to the same nickname +* Support for running Oragono as a Tor hidden service +* Support for IP cloaking +* Simplified commands for registering new accounts with NickServ + +### Config changes +* `tor-listeners` section added, for configuring listeners for use by Tor +* `compatibility` section added for toggling compatibility behaviors for legacy clients +* `ip-cloaking` section added for configuring cloaking +* `bouncer` section added for configuring bouncer-like features (in particular, whether multiple clients can use the same nickname) +* `check-ident` now has recommended value `false` +* `nick-reservation.method` now has recommended value `strict` +* `limits.linelen.tags` removed due to ratification of the [message-tags spec](https://ircv3.net/specs/extensions/message-tags.html), which fixes the maximum tags length at 8191 bytes +* `registration-messages` added to limit the length of the registration sequence (i.e., handshake) + +### Security +* Eliminated the possibility of using confusable Unicode characters to impersonate network services like NickServ (#519, thanks [@csmith](https://github.com/csmith)!) +* Improved privacy properties of secret (mode `+s`) channels (#380, thanks [@csmith](https://github.com/csmith)!) +* The `+R` (registered-only) mode now prevents unregistered clients from joining the channel, not just from speaking (#463, thanks [@bogdomania](https://github.com/bogdomania)!) +* Limited the total length of the registration sequence (handshake) to mitigate potential DoS attacks (#505) + +### Fixed +* Fixed `/ISON` command reporting users as always being online (#479) +* Fixed clients who negotiated CAP version 302 or higher not receiving cap-notify messages (#464) +* More consistent handling of channel privileges, in particular halfop (#400) +* More consistent assignment of message IDs and timestamps to messages (#388, #477, #483) +* Client-only tags are now stored for replay (#437) +* Fixed various error numerics with incorrect parameters (#425, thanks [@Ascrod](https://github.com/Ascrod)!) +* Fixed bugs in how the `RENAME` command worked with legacy clients (#300, thanks [@jesopo](https://github.com/jesopo)!) +* Fixed a bug where clients could receive tags they hadn't enabled (#434) +* History playback is batched when applicable (#456, thanks [@transitracer](https://github.com/oragono/oragono/issues/456)!) +* Improved display of notices from NickServ etc. in some clients (#496, thanks [@jwheare](https://github.com/jwheare)) +* Fixed nickname timer warnings not displaying correctly under some circumstances (#449, thanks [@bogdomania](https://github.com/bogdomania)!) +* Fixed confusing output from `/HISTORY` when history is disabled (#429, thanks [@bogdomania](https://github.com/bogdomania)!) +* Fixed confusing output from `/HOSTSERV ON` when no vhost is available (#404, thanks [@bogdomania](https://github.com/bogdomania)!) +* Fixed confusing snomask from `/SANICK` command (#360, thanks [@bogdomania](https://github.com/bogdomania)!) + +### Added +* Support for attaching multiple clients to the same nickname (see the manual for details) (#403) +* Support for running Oragono as a Tor hidden service (see the manual for details) (#369) +* Support for IP cloaking (see the manual for details) (#108) +* Support for `znc.in/playback`, which can automate history playback on rejoin for clients that support it (#486) +* User preference system controlling various behaviors (`/msg NickServ help set` for details) (#466) +* Support for the [draft/event-playback](https://github.com/DanielOaks/ircv3-specifications/blob/master+event-playback/extensions/batch/history.md) spec (#457) +* TAGMSG and NICK are now replayable (#457) +* Added the [SETNAME](https://github.com/ircv3/ircv3-specifications/pull/361) command for changing the user's realname (#372) + +### Changed +* Registering an account with NickServ is now `/msg NickServ register `, which registers the current nickname as an account, matching other service frameworks (#410) +* Added a compatibility hack to make SASL work with ZNC 1.6.x (#261) +* Support for the ratified [message-tags](https://ircv3.net/specs/extensions/message-tags.html) spec, replacing `draft/message-tags-0.2` +* Support for the ratified [message IDs](https://ircv3.net/specs/extensions/message-ids.html) spec, replacing `draft/msgid` +* Support for the upgraded [oragono.io/maxline-2](https://oragono.io/maxline-2) capability (#433) +* Support for the [draft/resume-0.5](https://github.com/ircv3/ircv3-specifications/pull/306) capability and the associated `BRB` command, replacing `draft/resume-0.3` +* Upgraded support for the `RENAME` command to the [latest draft of the specification](https://github.com/ircv3/ircv3-specifications/pull/308) +* Upgraded support for the `ACC` command to the [latest draft of the specification](https://github.com/DanielOaks/ircv3-specifications/blob/register-and-verify/extensions/acc-core.md) (#453, #455) +* History buffers and replay now include private messages you sent as well as received (#487) +* Removed the `+a` away mode (#468, thanks [@jesopo](https://github.com/jesopo) and [@jwheare](https://github.com/jwheare)!) +* Attempting to reauthenticate with SASL while already authenticated now returns an error +* `autoreplay-on-join` no longer attempts to replay JOIN and PART lines by default (#474, thanks [@amyspark](https://github.com/amyspark)!) +* snomasks are no longer sent for unregistered clients +* `WHOIS` responses no longer include the `690 RPL_WHOISLANGUAGE` numeric (#516) +* `ISON` responses are now sent for services (#488) +* All times are now reported in UTC (#480) +* `NICKSERV ENFORCE` is deprecated in favor of the new `NICKSERV SET ENFORCE` (the old syntax is still available as an alias) + +### Internal Notes +* Improved build scripts (#409) +* Official builds now use Go 1.12 (#406) +* Minor improvements to the performance of the message building and parsing code (#387) +* Added `oragono.io/nope` capability as a way of encouraging clients to request capabilities safely (#511) +* Fixed latent portability issues with 32-bit architectures (#527) + ## [1.0.0] - 2019-02-24 We've finally made it to v1.0.0! With this release, our list of need-to-haves is rounded out, and we reckon the software's ready for production use in smaller networks. slingamn and I have been working with our contributors and translators to prepare a cracker of a release. Thanks to [@csmith](https://github.com/csmith) our [Docker builds](https://hub.docker.com/r/oragono/oragono/) have been updated, with automatic rebuilds as we develop the software. Thanks to [@bogdomania](https://github.com/bogdomania) our translation workflow has been improved a lot. diff --git a/README.md b/README.md index a6d26ab4..81af2d63 100644 --- a/README.md +++ b/README.md @@ -22,15 +22,17 @@ Oragono is a fork of the [Ergonomadic](https://github.com/edmund-huber/ergonomad * UTF-8 nick and channel names with rfc7613 (PRECIS) * [yaml](http://yaml.org/) configuration * native TLS/SSL support -* server password (`PASS` command) +* on-the-fly updating server config and TLS certificates (rehashing) +* client accounts and SASL +* supports [multiple languages](https://crowdin.com/project/oragono) (you can also set a default language for your network) +* integrated services: NickServ for nickname reservation, ChanServ for channel registration, and HostServ for vhosts +* experimental support for bouncer-like features (storing and replaying history, allowing multiple clients to use the same nickname) +* advanced security and privacy features (support for requiring SASL for all logins, cloaking IPs, or running as a Tor hidden service) * an extensible privilege system for IRC operators * ident lookups for usernames * automated client connection limits -* on-the-fly updating server config and TLS certificates (rehashing) -* client accounts and SASL -* passwords stored with [bcrypt](https://godoc.org/golang.org/x/crypto) (client account passwords also salted) +* passwords stored with [bcrypt](https://godoc.org/golang.org/x/crypto) * banning ips/nets and masks with `KLINE` and `DLINE` -* supports [multiple languages](https://crowdin.com/project/oragono) (you can also set a default language for your network) * [IRCv3 support](http://ircv3.net/software/servers.html) * a heavy focus on developing with [specifications](https://oragono.io/specs.html) diff --git a/docs/MANUAL.md b/docs/MANUAL.md index 178813cf..5c7455db 100644 --- a/docs/MANUAL.md +++ b/docs/MANUAL.md @@ -18,6 +18,7 @@ _Copyright © 2018 Daniel Oaks _ - Introduction - Project Basics + - Scalability - Installing - Windows - macOS / Linux / Raspberry Pi @@ -26,6 +27,8 @@ _Copyright © 2018 Daniel Oaks _ - Nickname reservation - Channel Registration - Language + - Bouncer + - History - IP cloaking - Frequently Asked Questions - Modes @@ -53,7 +56,7 @@ If you have any suggestions, issues or questions, feel free to submit an issue o Let's go over some basics, for those new to Oragono. My name's Daniel, and I started the project (it was forked off a server called [Ergonomadic](https://github.com/edmund-huber/ergonomadic) that'd been around for a number of years). In addition to Oragono, I also do a lot of IRC specification work with the [various](https://modern.ircdocs.horse) [ircdocs](https://defs.ircdocs.horse) [projects](https://ircdocs.horse/specs/) and with the [IRCv3 Working Group](https://ircv3.net/). -Oragono's a new IRC server, written from scratch. My main goals when starting the project was to write a server that: +My main goals when starting the project were to write a server that: - Is fully-functional. - I can use to very easily prototype new [IRCv3](https://ircv3.net/) proposals and features. @@ -68,6 +71,17 @@ Some of the features that sets Oragono apart from other servers are: - Integrated user account and channel registration system (no services required!). - Native Unicode support (including appropriate casemapping). - Support for [multiple languages](https://crowdin.com/project/oragono). +- Bouncer-like features, including allowing multiple clients to use the same nickname + +Oragono has multiple "production" deployments (that is to say, communities using it as a day-to-day chat server) and is fairly mature --- we encourage you to consider it for your community! + +## Scalability + +We believe Oragono should scale comfortably to 10,000 clients and 2,000 clients per channel, making it suitable for small to medium-sized teams and communities. Oragono does not currently support server-to-server linking (federation), meaning that all clients must connect to the same instance. However, since Oragono is implemented in Go, it is reasonably effective at distributing work across multiple cores on a single server; in other words, it should "scale up" rather than "scaling out". + +In the relatively near term, work is planned to make Oragono [highly available](https://github.com/oragono/oragono/issues/343), and in the long term, we hope to support [federation](https://github.com/oragono/oragono/issues/26) as well. + +If you're interested in deploying Oragono at scale, or want performance tuning advice, come find us via the abovementioned support channels: we're very interested in what our software can do! -------------------------------------------------------------------------------------------- @@ -243,6 +257,28 @@ The above will change the server language to Romanian, with a fallback to Chines Our language and translation functionality is very early, so feel free to let us know if there are any troubles with it! If you know another language and you'd like to contribute, we've got a CrowdIn project here: [https://crowdin.com/project/oragono](https://crowdin.com/project/oragono) +## Bouncer + +Traditionally, every separate client connection to IRC has a separate identity and must use a separate nickname. Middleware programs called [bouncers](https://en.wikipedia.org/wiki/BNC_%28software%29#IRC) are used to work around this, by multiplexing a single connection to an underlying server across multiple clients. With Oragono, if the server is configured to allow it, a new client connection can share a nickname with an old one directly, without needing a bouncer. To use this feature, both connections must authenticate with SASL to the same user account and then request the same nickname during the initial handshake ("registration") --- once you have already logged into the server, you cannot subsequently change to a shared nickname. + +To enable this functionality as a server administrator, set `accounts.bouncer.enabled` to `true`. You may also want to set `accounts.bouncer.allowed-by-default` to `true`, which makes the behavior opt-out for end users instead of opt-in. End users can opt in or out using `NS SET BOUNCER`. + +We are working on a number of initiatives to improve client support for this behavior, in particular [automated history replay](https://github.com/ircv3/ircv3-specifications/pull/349). + + +## History + +Oragono can store a limited amount of message history in memory and replay it, which is useful for covering brief disconnections from IRC. You can access this history using the `/HISTORY` command (depending on your client, you may need to use `/QUOTE history` instead), for example `/history #mychannel 100` to get the 100 latest messages. + +Server administrators can configure `history.autoreplay-on-join` to automatically send clients a fixed number of history lines when they join a channel. Users can use `/msg NickServ set autoreplay-lines` to opt in or out of this behavior. + +We are working on a number of improvements to this functionality: + +* We currently emulate the ZNC playback module for clients that have special ZNC support (see the "ZNC" section below) +* [CHATHISTORY](https://github.com/ircv3/ircv3-specifications/pull/349) will be a standardized way for clients to request history lines +* [RESUME](https://github.com/ircv3/ircv3-specifications/pull/306), which we support in draft form, automatically replays history lines to clients who return after a brief disconnection + + ## IP cloaking Unlike many other chat and web platforms, IRC traditionally exposes the user's IP and hostname information to other users. This is in part because channel owners and operators (who have privileges over a single channel, but not over the server as a whole) need to be able to ban spammers and abusers from their channels, including via hostnames in cases where the abuser tries to evade the ban. @@ -648,6 +684,13 @@ Instructions on how client software should connect to an .onion address are outs 1. Pidgin should work with [torsocks](https://trac.torproject.org/projects/tor/wiki/doc/torsocks). +## ZNC + +ZNC 1.6.x has a [bug](https://github.com/znc/znc/issues/1212) where it fails to recognize certain SASL messages. Oragono 1.1.0 and later support a compatibility mode that enables ZNC to complete the SASL handshake: this can be enabled with `server.compatibility.send-unprefixed-sasl`. + +Oragono can emulate certain capabilities of the ZNC bouncer for the benefit of clients, in particular the third-party [playback](https://wiki.znc.in/Playback) module. This enables clients with specific support for ZNC to receive selective history playback automatically. To configure this in [Textual](https://www.codeux.com/textual/), go to "Server properties", select "Vendor specific", uncheck "Do not automatically join channels on connect", and check "Only play back messages you missed". Other clients with support are listed on ZNC's wiki page. + + -------------------------------------------------------------------------------------------- From 7a8876e796b80deb9b2f7caa9e0ec6e58ddb65e4 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Thu, 30 May 2019 21:13:39 -0400 Subject: [PATCH 02/12] change nick reservation recommendation --- docs/MANUAL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/MANUAL.md b/docs/MANUAL.md index 5c7455db..bfeb6a0c 100644 --- a/docs/MANUAL.md +++ b/docs/MANUAL.md @@ -188,8 +188,8 @@ To enable this mode, set the following configs: The following additional configs may be of interest: -* `accounts.nick-reservation.method = timeout` ; setting `strict` here effectively forces people to use SASL, and some popular clients either do not support SASL, or have bugs in their SASL implementations. -* `accounts.nick-reservation.allow-custom-enforcement = true` ; this allows people to opt into strict enforcement or opt out of enforcement as they wish. For details on how to do this, `/msg NickServ help enforce`. +* `accounts.nick-reservation.method = strict` ; we currently recommend strict nickname enforcement as the default, since we've found that it's less disruptive than timeout-based enforcement in real-world settings +* `accounts.nick-reservation.allow-custom-enforcement = true` ; this allows people to opt into timeout-based enforcement or opt out of enforcement as they wish. For details on how to do this, `/msg NickServ help enforce`. ### SASL-only mode From e15d00a1f635feb2e4049d6bb29fd46dd322f986 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Thu, 30 May 2019 21:14:33 -0400 Subject: [PATCH 03/12] correct obsolete reference to help-enforce --- docs/MANUAL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/MANUAL.md b/docs/MANUAL.md index bfeb6a0c..6c271422 100644 --- a/docs/MANUAL.md +++ b/docs/MANUAL.md @@ -189,7 +189,7 @@ To enable this mode, set the following configs: The following additional configs may be of interest: * `accounts.nick-reservation.method = strict` ; we currently recommend strict nickname enforcement as the default, since we've found that it's less disruptive than timeout-based enforcement in real-world settings -* `accounts.nick-reservation.allow-custom-enforcement = true` ; this allows people to opt into timeout-based enforcement or opt out of enforcement as they wish. For details on how to do this, `/msg NickServ help enforce`. +* `accounts.nick-reservation.allow-custom-enforcement = true` ; this allows people to opt into timeout-based enforcement or opt out of enforcement as they wish. For details on how to do this, `/msg NickServ help set`. ### SASL-only mode From e1686cf2bc8357b0929fc4a41c7967780e2416b8 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Fri, 31 May 2019 01:43:23 -0400 Subject: [PATCH 04/12] message-tags and msgids should be a highlight --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ad43940..7f22804e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ We have a number of exciting improvements in 1.1.0: Highlights include: * Support for attaching multiple clients to the same nickname +* Support for the newly ratified [message tags](https://ircv3.net/specs/extensions/message-tags.html) and [message ID](https://ircv3.net/specs/extensions/message-ids.html) IRCv3 specifications; client developers are invited to use Oragono as a reference when implementing these specifications * Support for running Oragono as a Tor hidden service * Support for IP cloaking * Simplified commands for registering new accounts with NickServ From 367c14ddfee646af572a5bf6394a190b7368fb56 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Fri, 31 May 2019 05:45:34 -0400 Subject: [PATCH 05/12] schema changes --- CHANGELOG.md | 6 +++--- docs/MANUAL.md | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f22804e..b19763ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,7 @@ All notable changes to Oragono will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). For the purposes of versioning, we consider the "public API" to refer to the configuration files, CLI interface and database format. ## [1.1.0-rc1] - 2019-06-03 -We have a number of exciting improvements in 1.1.0: - -Highlights include: +We have a number of exciting improvements in 1.1.0. Highlights include: * Support for attaching multiple clients to the same nickname * Support for the newly ratified [message tags](https://ircv3.net/specs/extensions/message-tags.html) and [message ID](https://ircv3.net/specs/extensions/message-ids.html) IRCv3 specifications; client developers are invited to use Oragono as a reference when implementing these specifications @@ -14,6 +12,8 @@ Highlights include: * Support for IP cloaking * Simplified commands for registering new accounts with NickServ +This release includes a schema change. If you have `datastore.autoupgrade` set to `true` in your configuration, it will be automatically applied on first restart; otherwise, you can apply it manually as described in the manual. + ### Config changes * `tor-listeners` section added, for configuring listeners for use by Tor * `compatibility` section added for toggling compatibility behaviors for legacy clients diff --git a/docs/MANUAL.md b/docs/MANUAL.md index 6c271422..78c1f9e8 100644 --- a/docs/MANUAL.md +++ b/docs/MANUAL.md @@ -131,6 +131,20 @@ If you're using Arch, the abovementioned AUR package bundles a systemd file for On a non-systemd system, oragono can be configured to log to a file and used [logrotate(8)](https://linux.die.net/man/8/logrotate), since it will reopen its log files (as well as rehashing the config file) upon receiving a SIGHUP. +## Upgrading to a new version of Oragono + +As long as you are using official releases or release candidates of Oragono, any backwards-incompatible changes should be described in the changelog. + +The database has schema versioning; upgrades that involve incompatible changes to the database require schema changes. If you have `datastore.autoupgrade` enabled in your config, any schema changes will be automatically applied the first time you restart your server on the new version. Otherwise, you can apply upgrades manually: + +1. Stop your server +1. Make a backup of your database file +1. Run `oragono upgradedb` (from the same working directory and with the same arguments that you would use when running `oragono run`) +1. Start the server again + +If you want to run our master branch as opposed to our releases, come find us in #oragono and we can guide you around any potential pitfalls. + + -------------------------------------------------------------------------------------------- From b36830de470b22bfe306c441f7134e7c82c82a0e Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Fri, 31 May 2019 05:50:49 -0400 Subject: [PATCH 06/12] stop claiming semver Feel free to revert this one, but IMO we're not actually doing semver --- CHANGELOG.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b19763ae..ca594aba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,6 @@ # Changelog All notable changes to Oragono will be documented in this file. -This project adheres to [Semantic Versioning](http://semver.org/). For the purposes of versioning, we consider the "public API" to refer to the configuration files, CLI interface and database format. - ## [1.1.0-rc1] - 2019-06-03 We have a number of exciting improvements in 1.1.0. Highlights include: From 59906ec1a51b8b3cc3ba8ffc02f6e1c9cc54e89e Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Sun, 2 Jun 2019 22:00:08 -0400 Subject: [PATCH 07/12] more manual and changelog updates --- CHANGELOG.md | 11 ++++++++--- docs/MANUAL.md | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca594aba..200472f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ This release includes a schema change. If you have `datastore.autoupgrade` set t * Improved privacy properties of secret (mode `+s`) channels (#380, thanks [@csmith](https://github.com/csmith)!) * The `+R` (registered-only) mode now prevents unregistered clients from joining the channel, not just from speaking (#463, thanks [@bogdomania](https://github.com/bogdomania)!) * Limited the total length of the registration sequence (handshake) to mitigate potential DoS attacks (#505) +* Attempting to reauthenticate with SASL now fails with `907 ERR_SASLALREADY` (#476) ### Fixed * Fixed `/ISON` command reporting users as always being online (#479) @@ -35,10 +36,11 @@ This release includes a schema change. If you have `datastore.autoupgrade` set t * More consistent assignment of message IDs and timestamps to messages (#388, #477, #483) * Client-only tags are now stored for replay (#437) * Fixed various error numerics with incorrect parameters (#425, thanks [@Ascrod](https://github.com/Ascrod)!) +* Fixed STATUSMSG not adding the correct prefix to the channel when relaying the message (#467) * Fixed bugs in how the `RENAME` command worked with legacy clients (#300, thanks [@jesopo](https://github.com/jesopo)!) * Fixed a bug where clients could receive tags they hadn't enabled (#434) * History playback is batched when applicable (#456, thanks [@transitracer](https://github.com/oragono/oragono/issues/456)!) -* Improved display of notices from NickServ etc. in some clients (#496, thanks [@jwheare](https://github.com/jwheare)) +* Improved display of notices from NickServ etc. in some clients (#496, thanks [@jwheare](https://github.com/jwheare)!) * Fixed nickname timer warnings not displaying correctly under some circumstances (#449, thanks [@bogdomania](https://github.com/bogdomania)!) * Fixed confusing output from `/HISTORY` when history is disabled (#429, thanks [@bogdomania](https://github.com/bogdomania)!) * Fixed confusing output from `/HOSTSERV ON` when no vhost is available (#404, thanks [@bogdomania](https://github.com/bogdomania)!) @@ -65,19 +67,22 @@ This release includes a schema change. If you have `datastore.autoupgrade` set t * Upgraded support for the `ACC` command to the [latest draft of the specification](https://github.com/DanielOaks/ircv3-specifications/blob/register-and-verify/extensions/acc-core.md) (#453, #455) * History buffers and replay now include private messages you sent as well as received (#487) * Removed the `+a` away mode (#468, thanks [@jesopo](https://github.com/jesopo) and [@jwheare](https://github.com/jwheare)!) -* Attempting to reauthenticate with SASL while already authenticated now returns an error +* Forcing trailing parameters for legacy compatibility can now be disabled in config (#479) * `autoreplay-on-join` no longer attempts to replay JOIN and PART lines by default (#474, thanks [@amyspark](https://github.com/amyspark)!) -* snomasks are no longer sent for unregistered clients +* snomasks are no longer sent for unregistered clients (#362, thanks [@bogdomania](https://github.com/bogdomania)!) * `WHOIS` responses no longer include the `690 RPL_WHOISLANGUAGE` numeric (#516) * `ISON` responses are now sent for services (#488) * All times are now reported in UTC (#480) * `NICKSERV ENFORCE` is deprecated in favor of the new `NICKSERV SET ENFORCE` (the old syntax is still available as an alias) +* The `WHO` command is now treated like `PONG` in that it doesn't count as session activity (#485) +* The `NAMES` command now ignores parameters after the first (#534) ### Internal Notes * Improved build scripts (#409) * Official builds now use Go 1.12 (#406) * Minor improvements to the performance of the message building and parsing code (#387) * Added `oragono.io/nope` capability as a way of encouraging clients to request capabilities safely (#511) +* Made some previously untranslatable strings translatable (#407) * Fixed latent portability issues with 32-bit architectures (#527) diff --git a/docs/MANUAL.md b/docs/MANUAL.md index 78c1f9e8..8d727b8e 100644 --- a/docs/MANUAL.md +++ b/docs/MANUAL.md @@ -279,6 +279,8 @@ To enable this functionality as a server administrator, set `accounts.bouncer.en We are working on a number of initiatives to improve client support for this behavior, in particular [automated history replay](https://github.com/ircv3/ircv3-specifications/pull/349). +You can see a list of your active sessions and their idle times with `/msg NickServ sessions` (operators can use `/msg NickServ sessions nickname` to see another user's sessions). + ## History From 96f4c5ca30ded1704af11320d8ac08f111cee70d Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Fri, 7 Jun 2019 05:40:10 -0400 Subject: [PATCH 08/12] try to clarify that localhost includes all loopback --- oragono.yaml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/oragono.yaml b/oragono.yaml index 35754dea..40d658f0 100644 --- a/oragono.yaml +++ b/oragono.yaml @@ -96,8 +96,8 @@ server: # you should also add these addresses to the connection limits and throttling exemption lists proxy-allowed-from: # - localhost - # - "127.0.0.1" - # - "127.0.0.1/8" + # - "192.168.1.1" + # - "192.168.10.1/24" # controls the use of the WEBIRC command (by IRC<->web interfaces, bouncers and similar) webirc: @@ -113,9 +113,8 @@ server: # you should also add these addresses to the connection limits and throttling exemption lists hosts: # - localhost - # - "127.0.0.1" - # - "127.0.0.1/8" - # - "0::1" + # - "192.168.1.1" + # - "192.168.10.1/24" # allow use of the RESUME extension over plaintext connections: # do not enable this unless the ircd is only accessible over internal networks @@ -284,7 +283,6 @@ accounts: # IPs/CIDRs which are exempted from the account requirement exempted: - "localhost" - # - '127.0.0.2' # - '10.10.0.0/16' # nick-reservation controls how, and whether, nicknames are linked to accounts From 9fc38cc2a7110b760c46899527cdadd9e1f18bf8 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Tue, 11 Jun 2019 01:00:12 -0400 Subject: [PATCH 09/12] add changelog update for #537 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 200472f8..73a31d8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ This release includes a schema change. If you have `datastore.autoupgrade` set t * `nick-reservation.method` now has recommended value `strict` * `limits.linelen.tags` removed due to ratification of the [message-tags spec](https://ircv3.net/specs/extensions/message-tags.html), which fixes the maximum tags length at 8191 bytes * `registration-messages` added to limit the length of the registration sequence (i.e., handshake) +* `channels.operator-only-creation` added to optionally restrict creation of new channels to ircops (#537) ### Security * Eliminated the possibility of using confusable Unicode characters to impersonate network services like NickServ (#519, thanks [@csmith](https://github.com/csmith)!) From e879e89e91a9a6a24df9cf4b03849cde9d57d1b6 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Tue, 11 Jun 2019 04:23:35 -0400 Subject: [PATCH 10/12] fix references to release candidate --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73a31d8f..1e955d2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Changelog All notable changes to Oragono will be documented in this file. -## [1.1.0-rc1] - 2019-06-03 -We have a number of exciting improvements in 1.1.0. Highlights include: +## [1.1.0-rc1] - 2019-06-11 +We're pleased to be publishing the release candidate for 1.1.0 (the official release should follow in a week or two, with more complete credits). This version has a number of exciting improvements, including: * Support for attaching multiple clients to the same nickname * Support for the newly ratified [message tags](https://ircv3.net/specs/extensions/message-tags.html) and [message ID](https://ircv3.net/specs/extensions/message-ids.html) IRCv3 specifications; client developers are invited to use Oragono as a reference when implementing these specifications From 3f5d59838eb4ca50be22a4aa2be36114105d2fea Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Wed, 12 Jun 2019 03:40:14 -0400 Subject: [PATCH 11/12] recommend fakelag=true --- CHANGELOG.md | 1 + oragono.yaml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e955d2d..bf82e6c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ This release includes a schema change. If you have `datastore.autoupgrade` set t * `bouncer` section added for configuring bouncer-like features (in particular, whether multiple clients can use the same nickname) * `check-ident` now has recommended value `false` * `nick-reservation.method` now has recommended value `strict` +* `fakelag.enabled` now has recommended value `true` * `limits.linelen.tags` removed due to ratification of the [message-tags spec](https://ircv3.net/specs/extensions/message-tags.html), which fixes the maximum tags length at 8191 bytes * `registration-messages` added to limit the length of the registration sequence (i.e., handshake) * `channels.operator-only-creation` added to optionally restrict creation of new channels to ircops (#537) diff --git a/oragono.yaml b/oragono.yaml index 40d658f0..08606063 100644 --- a/oragono.yaml +++ b/oragono.yaml @@ -562,7 +562,7 @@ limits: # fakelag: prevents clients from spamming commands too rapidly fakelag: # whether to enforce fakelag - enabled: false + enabled: true # time unit for counting command rates window: 1s From 02d9934ebd68cf9d9ed4f866eb3f674c331e2ee1 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Wed, 12 Jun 2019 19:11:39 +1000 Subject: [PATCH 12/12] Editing, make changelog and manual easier to read --- CHANGELOG.md | 139 +++++++++++++++++++++++++------------------------ README.md | 8 +-- docs/MANUAL.md | 36 ++++++------- 3 files changed, 91 insertions(+), 92 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf82e6c9..4eefbc1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,88 +4,89 @@ All notable changes to Oragono will be documented in this file. ## [1.1.0-rc1] - 2019-06-11 We're pleased to be publishing the release candidate for 1.1.0 (the official release should follow in a week or two, with more complete credits). This version has a number of exciting improvements, including: -* Support for attaching multiple clients to the same nickname -* Support for the newly ratified [message tags](https://ircv3.net/specs/extensions/message-tags.html) and [message ID](https://ircv3.net/specs/extensions/message-ids.html) IRCv3 specifications; client developers are invited to use Oragono as a reference when implementing these specifications -* Support for running Oragono as a Tor hidden service -* Support for IP cloaking -* Simplified commands for registering new accounts with NickServ +* Simplified commands for registering new accounts with NickServ. +* Support for IP cloaking. +* Support for attaching multiple clients to the same nickname. +* Support for the newly ratified [message tags](https://ircv3.net/specs/extensions/message-tags.html) and [message ID](https://ircv3.net/specs/extensions/message-ids.html) IRCv3 specifications; client developers are invited to use Oragono as a reference when implementing these specifications. +* Support for running Oragono as a Tor hidden service. -This release includes a schema change. If you have `datastore.autoupgrade` set to `true` in your configuration, it will be automatically applied on first restart; otherwise, you can apply it manually as described in the manual. +This release includes a database change. If you have `datastore.autoupgrade` set to `true` in your configuration, it will be automatically applied when you restart Oragono; otherwise, you can update the database manually by running `oragono upgradedb`. ### Config changes -* `tor-listeners` section added, for configuring listeners for use by Tor -* `compatibility` section added for toggling compatibility behaviors for legacy clients -* `ip-cloaking` section added for configuring cloaking -* `bouncer` section added for configuring bouncer-like features (in particular, whether multiple clients can use the same nickname) -* `check-ident` now has recommended value `false` -* `nick-reservation.method` now has recommended value `strict` -* `fakelag.enabled` now has recommended value `true` -* `limits.linelen.tags` removed due to ratification of the [message-tags spec](https://ircv3.net/specs/extensions/message-tags.html), which fixes the maximum tags length at 8191 bytes -* `registration-messages` added to limit the length of the registration sequence (i.e., handshake) -* `channels.operator-only-creation` added to optionally restrict creation of new channels to ircops (#537) +* `tor-listeners` section added for configuring listeners for use with Tor. +* `compatibility` section added for toggling compatibility behaviors for legacy clients. +* `ip-cloaking` section added for configuring cloaking. +* `bouncer` section added for configuring bouncer-like features (in particular, whether multiple clients can use the same nickname). +* `check-ident` now defaults to `false`. +* `nick-reservation.method` now defaults to `"strict"`. +* `fakelag.enabled` now defaults to `true` +* `limits.linelen.tags` removed due to ratification of the [message-tags spec](https://ircv3.net/specs/extensions/message-tags.html), which fixes the maximum tags length at 8191 bytes. +* `limits.registration-messages` added to restrict how many messages a user can send to the server during connection registration (while connecting to the server). +* `channels.operator-only-creation` added to optionally restrict creation of new channels to ircops (#537). ### Security -* Eliminated the possibility of using confusable Unicode characters to impersonate network services like NickServ (#519, thanks [@csmith](https://github.com/csmith)!) -* Improved privacy properties of secret (mode `+s`) channels (#380, thanks [@csmith](https://github.com/csmith)!) -* The `+R` (registered-only) mode now prevents unregistered clients from joining the channel, not just from speaking (#463, thanks [@bogdomania](https://github.com/bogdomania)!) -* Limited the total length of the registration sequence (handshake) to mitigate potential DoS attacks (#505) -* Attempting to reauthenticate with SASL now fails with `907 ERR_SASLALREADY` (#476) +* Users can no longer impersonate network services like ChanServ by using confusing nicks like "ChɑnServ" (#519, thanks [@csmith](https://github.com/csmith)!). +* Secret channels (mode `+s`) now act more secret (#380, thanks [@csmith](https://github.com/csmith)!). +* The `+R` (registered-only) mode now prevents unregistered users from joining the channel, not just from speaking (#463, thanks [@bogdomania](https://github.com/bogdomania)!). +* Limited how many messages clients can send during connection registration to mitigate potential DoS attacks (#505). +* Attempting to reauthenticate with SASL now fails with `907 ERR_SASLALREADY` (#476). ### Fixed -* Fixed `/ISON` command reporting users as always being online (#479) -* Fixed clients who negotiated CAP version 302 or higher not receiving cap-notify messages (#464) -* More consistent handling of channel privileges, in particular halfop (#400) -* More consistent assignment of message IDs and timestamps to messages (#388, #477, #483) -* Client-only tags are now stored for replay (#437) -* Fixed various error numerics with incorrect parameters (#425, thanks [@Ascrod](https://github.com/Ascrod)!) -* Fixed STATUSMSG not adding the correct prefix to the channel when relaying the message (#467) -* Fixed bugs in how the `RENAME` command worked with legacy clients (#300, thanks [@jesopo](https://github.com/jesopo)!) -* Fixed a bug where clients could receive tags they hadn't enabled (#434) -* History playback is batched when applicable (#456, thanks [@transitracer](https://github.com/oragono/oragono/issues/456)!) -* Improved display of notices from NickServ etc. in some clients (#496, thanks [@jwheare](https://github.com/jwheare)!) -* Fixed nickname timer warnings not displaying correctly under some circumstances (#449, thanks [@bogdomania](https://github.com/bogdomania)!) -* Fixed confusing output from `/HISTORY` when history is disabled (#429, thanks [@bogdomania](https://github.com/bogdomania)!) -* Fixed confusing output from `/HOSTSERV ON` when no vhost is available (#404, thanks [@bogdomania](https://github.com/bogdomania)!) -* Fixed confusing snomask from `/SANICK` command (#360, thanks [@bogdomania](https://github.com/bogdomania)!) +* Fixed `/ISON` command reporting users as always being online (#479). +* Fixed clients who negotiated CAP version 302 or higher not receiving cap-notify messages (#464). +* We now treat channel privileges such as halfop more consistently (#400). +* Fixed a bug where clients could receive message tags they hadn't enabled (#434). +* When replaying history, messages now have more consistent IDs and timestamps +* IDs and timestamps are now applied more consistently to messages (#388, #477, #483). +* Client-to-client tags are now stored and replayed in message history (#437). +* Fixed various error numerics that were being sent with incorrect parameters (#425, thanks [@Ascrod](https://github.com/Ascrod)!). +* Fixed STATUSMSG not adding the correct prefix to the channel when relaying the message (#467). +* Fixed `/RENAME` command not correctly renaming the channel for some users (#300, thanks [@jesopo](https://github.com/jesopo)!). +* History playback is now batched when applicable (#456, thanks [@transitracer](https://github.com/oragono/oragono/issues/456)!). +* Notices from NickServ/ChanServ/etc should display better in some clients (#496, thanks [@jwheare](https://github.com/jwheare)!). +* Fixed nickname timer warnings not displaying correctly sometimes (#449, thanks [@bogdomania](https://github.com/bogdomania)!). +* When history playback is disabled, the `/HISTORY` command now says so instead of silently failing (#429, thanks [@bogdomania](https://github.com/bogdomania)!). +* The `/HOSTSERV ON/OFF` commands now tell you when you don't have a vhost (#404, thanks [@bogdomania](https://github.com/bogdomania)!). +* When operators use the `/SANICK` command, the snomask now says which operator did it instead of saying the target changed their nickname themselves (#360, thanks [@bogdomania](https://github.com/bogdomania)!). +* History playback now includes messages that the user sent themselves (especially useful with the new bouncer-like capabilities) (#487). ### Added -* Support for attaching multiple clients to the same nickname (see the manual for details) (#403) -* Support for running Oragono as a Tor hidden service (see the manual for details) (#369) -* Support for IP cloaking (see the manual for details) (#108) -* Support for `znc.in/playback`, which can automate history playback on rejoin for clients that support it (#486) -* User preference system controlling various behaviors (`/msg NickServ help set` for details) (#466) -* Support for the [draft/event-playback](https://github.com/DanielOaks/ircv3-specifications/blob/master+event-playback/extensions/batch/history.md) spec (#457) -* TAGMSG and NICK are now replayable (#457) -* Added the [SETNAME](https://github.com/ircv3/ircv3-specifications/pull/361) command for changing the user's realname (#372) +* IP cloaking is now supported (see the manual for details) (#108). +* Users can now attach multiple clients to the same nickname (see the manual for details) (#403). +* Oragono can now be used as a Tor hidden service (see the manual for details) (#369). +* The `znc.in/playback` capability is now supported, which can automate history playback for clients that support it (#486). +* User preference system controlling various behaviors (`/msg NickServ help set` for details) (#466). +* Support for the [draft/event-playback](https://github.com/DanielOaks/ircv3-specifications/blob/master+event-playback/extensions/batch/history.md) spec (#457). +* The `TAGMSG` and `NICK` messages are now replayable in history (#457). +* Added the draft IRCv3 [`SETNAME` command](https://ircv3.net/specs/extensions/setname) for changing your realname (#372). ### Changed -* Registering an account with NickServ is now `/msg NickServ register `, which registers the current nickname as an account, matching other service frameworks (#410) -* Added a compatibility hack to make SASL work with ZNC 1.6.x (#261) -* Support for the ratified [message-tags](https://ircv3.net/specs/extensions/message-tags.html) spec, replacing `draft/message-tags-0.2` -* Support for the ratified [message IDs](https://ircv3.net/specs/extensions/message-ids.html) spec, replacing `draft/msgid` -* Support for the upgraded [oragono.io/maxline-2](https://oragono.io/maxline-2) capability (#433) -* Support for the [draft/resume-0.5](https://github.com/ircv3/ircv3-specifications/pull/306) capability and the associated `BRB` command, replacing `draft/resume-0.3` -* Upgraded support for the `RENAME` command to the [latest draft of the specification](https://github.com/ircv3/ircv3-specifications/pull/308) -* Upgraded support for the `ACC` command to the [latest draft of the specification](https://github.com/DanielOaks/ircv3-specifications/blob/register-and-verify/extensions/acc-core.md) (#453, #455) -* History buffers and replay now include private messages you sent as well as received (#487) -* Removed the `+a` away mode (#468, thanks [@jesopo](https://github.com/jesopo) and [@jwheare](https://github.com/jwheare)!) -* Forcing trailing parameters for legacy compatibility can now be disabled in config (#479) -* `autoreplay-on-join` no longer attempts to replay JOIN and PART lines by default (#474, thanks [@amyspark](https://github.com/amyspark)!) -* snomasks are no longer sent for unregistered clients (#362, thanks [@bogdomania](https://github.com/bogdomania)!) -* `WHOIS` responses no longer include the `690 RPL_WHOISLANGUAGE` numeric (#516) -* `ISON` responses are now sent for services (#488) -* All times are now reported in UTC (#480) -* `NICKSERV ENFORCE` is deprecated in favor of the new `NICKSERV SET ENFORCE` (the old syntax is still available as an alias) -* The `WHO` command is now treated like `PONG` in that it doesn't count as session activity (#485) -* The `NAMES` command now ignores parameters after the first (#534) +* Registering an account with NickServ is now `/msg NickServ register `, which registers the current nickname as an account, matching other services (#410). +* Added a compatibility hack to make SASL work with ZNC 1.6.x (#261). +* We now support the ratified [message-tags](https://ircv3.net/specs/extensions/message-tags.html) spec, replacing `draft/message-tags-0.2`. +* We now support the ratified [message IDs](https://ircv3.net/specs/extensions/message-ids.html) spec, replacing `draft/msgid`. +* The [`oragono.io/maxline-2`](https://oragono.io/maxline-2) capability has replaced `oragono.io/maxline`, the new version now working alongside the ratified message-tags spec (#433). +* We now support [`draft/resume-0.5`](https://github.com/ircv3/ircv3-specifications/pull/306) and the associated `BRB` command, replacing `draft/resume-0.3`. +* Upgraded support for the `/RENAME` command to the [latest draft of the specification](https://github.com/ircv3/ircv3-specifications/pull/308). +* Upgraded support for the `/ACC` command to the [latest draft of the specification](https://github.com/DanielOaks/ircv3-specifications/blob/register-and-verify/extensions/acc-core.md) (#453, #455). +* Removed the `+a` away mode as no other servers use it (#468, thanks [@jesopo](https://github.com/jesopo) and [@jwheare](https://github.com/jwheare)!). +* Forcing trailing parameters for legacy compatibility can now be disabled in config (#479). +* `autoreplay-on-join` no longer replays `JOIN` and `PART` lines by default (#474, thanks [@amyspark](https://github.com/amyspark)!). +* snomasks are no longer sent for unregistered clients (#362, thanks [@bogdomania](https://github.com/bogdomania)!). +* `WHOIS` responses no longer include the `690 RPL_WHOISLANGUAGE` numeric, as it doesn't show anything useful to other users (#516). +* `ISON` now reports services (ChanServ/NickServ/etc) as online (#488). +* All times are now reported in UTC (#480). +* `NICKSERV ENFORCE` is deprecated in favor of the new `NICKSERV SET ENFORCE` (the old syntax is still available as an alias). +* The `WHO` command is now treated like `PONG` in that it doesn't count as user activity, since client software often uses it automatically (#485). +* The `NAMES` command now only returns results for the first given channel (#534). ### Internal Notes -* Improved build scripts (#409) -* Official builds now use Go 1.12 (#406) -* Minor improvements to the performance of the message building and parsing code (#387) -* Added `oragono.io/nope` capability as a way of encouraging clients to request capabilities safely (#511) -* Made some previously untranslatable strings translatable (#407) -* Fixed latent portability issues with 32-bit architectures (#527) +* Building Oragono is now easier (#409). +* Official builds now use Go 1.12 (#406). +* Our message building and parsing code is slightly faster now (#387). +* Added the [`oragono.io/nope`](https://oragono.io/nope) capability to encourage clients to request capabilities safely (#511). +* Made some previously untranslatable strings translatable (#407). +* Fixed portability issues with 32-bit architectures (#527). ## [1.0.0] - 2019-02-24 diff --git a/README.md b/README.md index 81af2d63..18f490c2 100644 --- a/README.md +++ b/README.md @@ -22,12 +22,12 @@ Oragono is a fork of the [Ergonomadic](https://github.com/edmund-huber/ergonomad * UTF-8 nick and channel names with rfc7613 (PRECIS) * [yaml](http://yaml.org/) configuration * native TLS/SSL support -* on-the-fly updating server config and TLS certificates (rehashing) -* client accounts and SASL +* updating server config and TLS certificates on-the-fly (rehashing) +* user accounts and SASL * supports [multiple languages](https://crowdin.com/project/oragono) (you can also set a default language for your network) -* integrated services: NickServ for nickname reservation, ChanServ for channel registration, and HostServ for vhosts +* integrated services: NickServ for user accounts, ChanServ for channel registration, and HostServ for vanity hosts * experimental support for bouncer-like features (storing and replaying history, allowing multiple clients to use the same nickname) -* advanced security and privacy features (support for requiring SASL for all logins, cloaking IPs, or running as a Tor hidden service) +* advanced security and privacy features (support for requiring SASL for all logins, cloaking IPs, and running as a Tor hidden service) * an extensible privilege system for IRC operators * ident lookups for usernames * automated client connection limits diff --git a/docs/MANUAL.md b/docs/MANUAL.md index 8d727b8e..7dd564f4 100644 --- a/docs/MANUAL.md +++ b/docs/MANUAL.md @@ -5,10 +5,10 @@ ▐█▌.▐▌▐█•█▌▐█ ▪▐▌▐█▄▪▐█▐█▌ ▐▌██▐█▌▐█▌.▐▌ ▀█▄▀▪.▀ ▀ ▀ ▀ ·▀▀▀▀ ▀█▄▀ ▀▀ █▪ ▀█▄▀▪ - Oragono IRCd Manual 2019-02-23 + Oragono IRCd Manual 2019-06-12 https://oragono.io/ -_Copyright © 2018 Daniel Oaks _ +_Copyright © Daniel Oaks , Shivaram Lingamneni _ -------------------------------------------------------------------------------------------- @@ -49,7 +49,7 @@ _Copyright © 2018 Daniel Oaks _ This document goes over the Oragono IRC server, how to get it running and how to use it once it is up and running! -If you have any suggestions, issues or questions, feel free to submit an issue on our [GitHub repo](https://github.com/oragono/oragono/) or ask in our channel [`#oragono` on Freenode](ircs://irc.freenode.net:6697/#oragono). +If you have any suggestions, issues or questions, feel free to submit an issue on our [GitHub repo](https://github.com/oragono/oragono/) or ask in our channel [`#oragono` on freenode](ircs://irc.freenode.net:6697/#oragono). ## Project Basics @@ -73,15 +73,15 @@ Some of the features that sets Oragono apart from other servers are: - Support for [multiple languages](https://crowdin.com/project/oragono). - Bouncer-like features, including allowing multiple clients to use the same nickname -Oragono has multiple "production" deployments (that is to say, communities using it as a day-to-day chat server) and is fairly mature --- we encourage you to consider it for your community! +Oragono has multiple communities using it as a day-to-day chat server and is fairly mature --- we encourage you to consider it for your community! ## Scalability We believe Oragono should scale comfortably to 10,000 clients and 2,000 clients per channel, making it suitable for small to medium-sized teams and communities. Oragono does not currently support server-to-server linking (federation), meaning that all clients must connect to the same instance. However, since Oragono is implemented in Go, it is reasonably effective at distributing work across multiple cores on a single server; in other words, it should "scale up" rather than "scaling out". -In the relatively near term, work is planned to make Oragono [highly available](https://github.com/oragono/oragono/issues/343), and in the long term, we hope to support [federation](https://github.com/oragono/oragono/issues/26) as well. +In the relatively near term, we plan to make Oragono [highly available](https://github.com/oragono/oragono/issues/343), and in the long term, we hope to support [federation](https://github.com/oragono/oragono/issues/26) as well. -If you're interested in deploying Oragono at scale, or want performance tuning advice, come find us via the abovementioned support channels: we're very interested in what our software can do! +If you're interested in deploying Oragono at scale, or want performance tuning advice, come find us on [`#oragono` on freenode](ircs://irc.freenode.net:6697/#oragono), we're very interested in what our software can do! -------------------------------------------------------------------------------------------- @@ -135,14 +135,14 @@ On a non-systemd system, oragono can be configured to log to a file and used [lo As long as you are using official releases or release candidates of Oragono, any backwards-incompatible changes should be described in the changelog. -The database has schema versioning; upgrades that involve incompatible changes to the database require schema changes. If you have `datastore.autoupgrade` enabled in your config, any schema changes will be automatically applied the first time you restart your server on the new version. Otherwise, you can apply upgrades manually: +The database is versioned; upgrades that involve incompatible changes to the database require updating the database. If you have `datastore.autoupgrade` enabled in your config, the database will be backed up and upgraded when you restart your server when required. Otherwise, you can apply upgrades manually: 1. Stop your server 1. Make a backup of your database file 1. Run `oragono upgradedb` (from the same working directory and with the same arguments that you would use when running `oragono run`) 1. Start the server again -If you want to run our master branch as opposed to our releases, come find us in #oragono and we can guide you around any potential pitfalls. +If you want to run our master branch as opposed to our releases, come find us in our channel and we can guide you around any potential pitfalls. -------------------------------------------------------------------------------------------- @@ -202,7 +202,7 @@ To enable this mode, set the following configs: The following additional configs may be of interest: -* `accounts.nick-reservation.method = strict` ; we currently recommend strict nickname enforcement as the default, since we've found that it's less disruptive than timeout-based enforcement in real-world settings +* `accounts.nick-reservation.method = strict` ; we currently recommend strict nickname enforcement as the default, since we've found that users find it less confusing. * `accounts.nick-reservation.allow-custom-enforcement = true` ; this allows people to opt into timeout-based enforcement or opt out of enforcement as they wish. For details on how to do this, `/msg NickServ help set`. ### SASL-only mode @@ -273,26 +273,24 @@ Our language and translation functionality is very early, so feel free to let us ## Bouncer -Traditionally, every separate client connection to IRC has a separate identity and must use a separate nickname. Middleware programs called [bouncers](https://en.wikipedia.org/wiki/BNC_%28software%29#IRC) are used to work around this, by multiplexing a single connection to an underlying server across multiple clients. With Oragono, if the server is configured to allow it, a new client connection can share a nickname with an old one directly, without needing a bouncer. To use this feature, both connections must authenticate with SASL to the same user account and then request the same nickname during the initial handshake ("registration") --- once you have already logged into the server, you cannot subsequently change to a shared nickname. +Traditionally, every connection to an IRC server is separate must use a different nickname. [Bouncers](https://en.wikipedia.org/wiki/BNC_%28software%29#IRC) are used to work around this, by letting multiple clients connect to a single nickname. With Oragono, if the server is configured to allow it, multiple clients can share a single nickname without needing a bouncer. To use this feature, both connections must authenticate with SASL to the same user account and then use the same nickname during connection registration (while connecting to the server) – once you've logged-in, you can't share another nickname. -To enable this functionality as a server administrator, set `accounts.bouncer.enabled` to `true`. You may also want to set `accounts.bouncer.allowed-by-default` to `true`, which makes the behavior opt-out for end users instead of opt-in. End users can opt in or out using `NS SET BOUNCER`. +To enable this functionality, set `accounts.bouncer.enabled` to `true`. Setting `accounts.bouncer.allowed-by-default` to `true` will allow this for everyone – by default, users need to opt-in to shared connections using `/msg NickServ SET BOUNCER`. -We are working on a number of initiatives to improve client support for this behavior, in particular [automated history replay](https://github.com/ircv3/ircv3-specifications/pull/349). - -You can see a list of your active sessions and their idle times with `/msg NickServ sessions` (operators can use `/msg NickServ sessions nickname` to see another user's sessions). +You can see a list of your active sessions and their idle times with `/msg NickServ sessions` (network operators can use `/msg NickServ sessions nickname` to see another user's sessions). ## History -Oragono can store a limited amount of message history in memory and replay it, which is useful for covering brief disconnections from IRC. You can access this history using the `/HISTORY` command (depending on your client, you may need to use `/QUOTE history` instead), for example `/history #mychannel 100` to get the 100 latest messages. +Oragono can store a limited amount of message history in memory and replay it, which is useful for covering brief disconnections from IRC. You can access this using the `/HISTORY` command (depending on your client, you may need to use `/QUOTE history` instead), for example `/HISTORY #mychannel 100` to get the 100 latest messages from `#mychannel`. Server administrators can configure `history.autoreplay-on-join` to automatically send clients a fixed number of history lines when they join a channel. Users can use `/msg NickServ set autoreplay-lines` to opt in or out of this behavior. We are working on a number of improvements to this functionality: * We currently emulate the ZNC playback module for clients that have special ZNC support (see the "ZNC" section below) -* [CHATHISTORY](https://github.com/ircv3/ircv3-specifications/pull/349) will be a standardized way for clients to request history lines -* [RESUME](https://github.com/ircv3/ircv3-specifications/pull/306), which we support in draft form, automatically replays history lines to clients who return after a brief disconnection +* The [`/CHATHISTORY`](https://github.com/ircv3/ircv3-specifications/pull/349) command will be a standardized way for clients to request history lines +* [Connection resuming](https://github.com/ircv3/ircv3-specifications/pull/306), which we support in draft form, automatically replays history lines to clients who return after a brief disconnection ## IP cloaking @@ -702,7 +700,7 @@ Instructions on how client software should connect to an .onion address are outs ## ZNC -ZNC 1.6.x has a [bug](https://github.com/znc/znc/issues/1212) where it fails to recognize certain SASL messages. Oragono 1.1.0 and later support a compatibility mode that enables ZNC to complete the SASL handshake: this can be enabled with `server.compatibility.send-unprefixed-sasl`. +ZNC 1.6.x (still pretty common in distros that package old versions of IRC software) has a [bug](https://github.com/znc/znc/issues/1212) where it fails to recognize certain SASL messages. Oragono supports a compatibility mode that works around this to let ZNC complete the SASL handshake: this can be enabled with `server.compatibility.send-unprefixed-sasl`. Oragono can emulate certain capabilities of the ZNC bouncer for the benefit of clients, in particular the third-party [playback](https://wiki.znc.in/Playback) module. This enables clients with specific support for ZNC to receive selective history playback automatically. To configure this in [Textual](https://www.codeux.com/textual/), go to "Server properties", select "Vendor specific", uncheck "Do not automatically join channels on connect", and check "Only play back messages you missed". Other clients with support are listed on ZNC's wiki page. @@ -716,4 +714,4 @@ Always, thanks to Jeremy Latt for creating Ergonomadic. Thanks for Edmund Huber Thanks to Euan Kemp (euank) for the contributions and help with this, along with other projects, and to James Mills, Vegax and Sean Enck for various other help and contributions on the server. -And a massive thanks to Shivaram Lingamneni (slingamn) for being an awesome co-maintainer of Oragono! You really convinced me to step up with this and take it forward in a big way, and I'm grateful for that. +And a massive thanks to Shivaram Lingamneni (slingamn) for being an amazing co-maintainer of Oragono! You've contributed a lot to Oragono, and really convinced me to step up with this and take the server forward in a big way. I'm grateful for everything you've done, and working with ya' is a pleasure.