diff --git a/CHANGELOG.md b/CHANGELOG.md index 81349a42..07933667 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,106 @@ # Changelog All notable changes to Oragono will be documented in this file. +## [2.0.0-rc1] - 2020-03-01 +We're pleased to be publishing the release candidate for Oragono 2.0.0 (the official release should follow in a week or two). Version 2.0.0 is a major update with a wide range of enhancements and fixes. Major highlights include: + +* Support for storing chat history in a MySQL backend +* Full "bouncer" functionality, including "always-on" clients that remain present on the server even when disconnected +* LDAP support contributed by [@mattouille](https://github.com/mattouille) +* Support for the ratified [labeled-response](https://ircv3.net/specs/extensions/labeled-response.html) IRCv3 capability +* Enhanced support for Kubernetes + +Many thanks to [@csmith](https://github.com/csmith), [@mattouille](https://github.com/mattouille), and [@xPaw](https://github.com/xPaw) for contributing patches, to [@csmith](https://github.com/csmith) and [@wrmsr](https://github.com/wrmsr) for contributing code reviews, to [@bogdomania](https://github.com/bogdomania), [@brenns10](https://github.com/brenns10), [@daurnimator](https://github.com/daurnimator), [@ekianjo](https://github.com/ekianjo), horseface, [@ivucica](https://github.com/ivucica), [@jesopo](https://github.com/jesopo), [@jwheare](https://github.com/jwheare), KoDi, lover, [@mabgnu](https://github.com/mabgnu), [@poVoq](https://github.com/poVoq), [@TETYYS](https://github.com/TETYYS), and [@zaher](https://github.com/zaher) for reporting issues, and to [@bogdomania](https://github.com/bogdomania) and Nuve for contributing translations. + +This release includes changes to the config file format, including two breaking changes: + +1. Backwards compatibility with the old `server.listen` format for configuring listeners has been removed; you must now use the `server.listeners` format that was introduced in 1.2.0. +2. The two sections `server.connection-limits` and `server.connection-throttling` have been consolidated into one new section, `server.ip-limits`. + +Other changes to the config file format are backwards compatible and do not require updating before restart. To minimize potential downtime, we suggest the following workflow: + +1. Without upgrading your `oragono` binary, edit your config file to add new `server.listeners` and `server.ip-limits` sections, based on the example config file +2. Rehash your server, confirming that the new config file is valid for for the previous version of the server +3. Upgrade your `oragono` binary to the new 2.0.x version and restart your server +4. Once your deployment is stable on 2.0.x, delete the old `server.listen`, `server.connection-limits`, and `server.connection-throttling` sections from your config, and rehash your server to confirm + +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` (see the manual for complete instructions). + +### Config Changes +* Desupported `server.listen` in favor of `server.listeners`, a breaking change (#794) +* Desupported `server.connection-limits` and `server.connection-throttling` in favor of `server.ip-limits`, a breaking change (#646) +* The recommended default is now to allow plaintext only on loopback interfaces (#801) +* Added `server.casemapping` option to control which Unicode nicknames and channels are allowed (#693) +* Added `server.lookup-hostnames` and `server.forward-confirm-hostnames` options to control hostname lookup (#688) +* Added new `limits.multiline` section to control the new `draft/multiline` capability +* Added sections for enabling the optional MySQL history storage backend: `datastore.mysql` for connecting to the server and `history.persistent` for controlling which messages are stored +* Added `history.restrictions` for preventing people from retrieving arbitrarily old history messages +* Added `history.znc-maxmessages`, allowing a higher history replay limit for bouncer emulation relative to CHATHISTORY +* Added `accounts.vhosts.offer-list`, allowing users to take pre-approved vhosts without operator approval (#737) +* Renamed `accounts.bouncer` to `accounts.multiclient` (the old name still works) (#787) +* New recommended values of `server.max-sendq`, `server.ip-cloaking.num-bits`, `accounts.registration.bcrypt-cost`, `accounts.nick-reservation.enabled` (now true), `accounts.multiclient.allowed-by-default` (now true) +* Added `server.ip-cloaking.secret-environment-variable`, allowing the cloaking secret to be deployed via an environment variable for use in Kubernetes (#741, thanks [@daurnimator](https://github.com/daurnimator)!) + +### Security +* Added forward confirmation of reverse DNS lookups for hostnames: to enable this, set `server.forward-confirm-hostnames` to true (#688) +* Added protection against confusable channel names (#581) +* Fixed cases where Tor users could receive CTCP messages, contrary to expectations (#752, #753) +* Fixed `NS INFO` displaying the local timezone (#710) +* Fixed `accounts.authentication-enabled` failing to disable the `NS IDENTIFY` command (#721) +* Fixed confusable protection not being applied to newly registered accounts (#745, thanks [@bogdomania](https://github.com/bogdomania)!) + +### Added +* Added support for persistent history storage in MySQL (#348) +* Added support for "always-on" clients that remain present on the server even when disconnected (#348, #701) +* Added support for LDAP (#690, thanks [@mattouille](https://github.com/mattouille), [@ivucica](https://github.com/ivucica), and [@mabgnu](https://github.com/mabgnu)!) +* Added support for the new [draft/multiline](https://github.com/ircv3/ircv3-specifications/pull/398) specification (#670, thanks [@jwheare](https://github.com/jwheare) and [@jesopo](https://github.com/jesopo)!) +* Added new modes for Unicode characters in nicknames and channel names: ASCII-only and "permissive" (allowing emoji) (#693) +* Added support for plaintext PROXY lines ahead of a TLS handshake, improving compatibility with some Kubernetes load balancers (#561, thanks @RyanSquared](https://github.com/RyanSquared) and [@daurnimator](https://github.com/daurnimator)!) +* Added support for authenticating operators by TLS client certificates, and automatically applying operator privileges on login (#696, thanks [@RyanSquared](https://github.com/RyanSquared)!) +* Added `/DEOPER` command to remove operator privileges (#549, thanks [@bogdomania](https://github.com/bogdomania)!) +* Added `/CHANSERV TRANSFER`, allowing transfers of channel ownership (#684) +* Added `/NICKSERV CERT`, allowing users to manage their authorized client certificates (#530) +* Added `/HOSTSERV TAKE`, allowing users to take pre-approved vhosts without operator approval (#737) +* Added support for configuring connection limits and throttling for individual CIDRs (#646, thanks KoDi!) +* Added `/CHANSERV PURGE`, allowing server administrators to shut down channels (#683) +* Added `/CHANSERV CLEAR`, allowing channel founders to reset stored bans and privileges (#692) +* Added `/CHANSERV SET`, allowing channel founders to disable channel history (#379) +* Added account preference `AUTOREPLAY-JOINS`, allowing greater control over when joins and parts appear in history replay (#616, thanks [@zaher](https://github.com/zaher)!) +* Added `/DEBUG CRASHSERVER` command (#791) +* `znc.in/playback` now supports nicknames as targets (#830) +* Added channel mode `+C` to suppress CTCP messages to a channel (#756) +* Added some missing snomasks for events related to accounts and vhosts (`+s v` to enable vhost snomasks) (#347, #103) + +### Changed +* Updated CHATHISTORY support to the [latest draft](https://github.com/ircv3/ircv3-specifications/pull/393) (#621, thanks [@prawnsalad](https://github.com/prawnsalad)!) +* Updated to the ratified [labeled-response](https://ircv3.net/specs/extensions/labeled-response.html) specification from the earlier `draft/labeled-response-0.2` (#757) +* `/HISTORY` now defaults to returning 100 messages, and also takes time durations like `1h` as arguments (#621, thanks lover!) +* D-Lines are no longer enforced against loopback IPs (#671) +* Password length limit was reduced from 600 bytes to 300 bytes (#775) + +### Fixed +* Fixed a bug where `znc.in/playback` commands would play every channel, regardless of the target parameter (#760, thanks [@brenns10](https://github.com/brenns10)!) +* Fixed `MODE -o` not removing all operator permissions (#725, #549, thanks [@bogdomania](https://github.com/bogdomania)!) +* Fixed client-only tags being relayed in direct messages to users without the `message-tags` capability (#754, thanks [@jesopo](https://github.com/jesopo)!) +* Fixed the channel user limit (the `+l` mode) not persisting after server restart (#705, thanks [@bogdomania](https://github.com/bogdomania)!) +* Fixed response to `JOIN` lines with parameters ending in a comma (#679, thanks [@bogdomania](https://github.com/bogdomania)!) +* Fixed confusable protection not being removed from unregistered accounts (#745, thanks [@bogdomania](https://github.com/bogdomania)!) +* Fixed rehash not enabling nickname reservation, vhosts, or history under some circumstances (#702, thanks [@bogdomania](https://github.com/bogdomania)!) +* Fixed responses to the `USERHOST` command (#682) +* Fixed bad results when running `oragono upgradedb` against a missing database file (#715, thanks [@bogdomania](https://github.com/bogdomania)!) +* Fixed confusing `NS GHOST` behavior when nickname reservation is disabled (#727, thanks horseface!) +* Fixed validation of authzid during SASL (#716, thanks [@xPaw](https://github.com/xPaw)!) +* Non-ASCII characters are proactively disallowed in `ip-cloaking.netname` (#713, thanks [@bogdomania](https://github.com/bogdomania)!) +* Limited the time during which `znc.in/playback` affects channel joins (#829) + +### Removed +* Removed `oragono.io/maxline-2` capability in favor of the new `draft/multiline` capability (#670, #752) +* Removed `oragono.io/bnc` capability (multiclient functionality is now controllable only via server config and `/NS SET MULTICLIENT`) (#787) +* Removed `draft/acc` capability and related `ACC` command (#723) + +### Internal Notes +* Updated to Go 1.14 and modules, simplifying the build process (#699) + ## [1.2.0] - 2019-11-17 We're pleased to announce Oragono 1.2.0. This version contains bug fixes and minor improvements. diff --git a/DEVELOPING.md b/DEVELOPING.md index 708d5a20..bec65072 100644 --- a/DEVELOPING.md +++ b/DEVELOPING.md @@ -9,6 +9,12 @@ You should use the [latest distribution of the Go language for your OS and archi Oragono vendors all its dependencies. Because of this, Oragono is self-contained and you should not need to fetch any dependencies with `go get`. Doing so is not recommended, since it may fetch incompatible versions of the dependencies. +If you're upgrading the Go version used by Oragono, there are several places where it's hard-coded and must be changed: + +1. `.travis.yml`, which controls the version that our CI test suite uses to build and test the code (e.g., for a PR) +2. `distrib/docker/Dockerfile`, which controls the version that the Oragono binaries in our Docker images are built with +3. `go.mod`: this should be updated automatically by Go when you do module-related operations + ## Branches @@ -21,7 +27,8 @@ Develop branches are either used to work out implementation details in preperati ## Releasing a new version -1. Run [`irctest`]() over it to make sure nothing's severely broken. +1. Test backwards compatibility guarantees. Get an example config file and an example database from the previous stable release. Make sure the current build still works with them (modulo anything explicitly called out in the changelog as a breaking change). +1. Run `irctest` over it to make sure nothing's severely broken. Talk to the maintainers to find out which version of irctest to run. 1. Update the changelog with new changes and write release notes. 1. Update the version number `irc/constants.go` (either change `-unreleased` to `-rc1`, or remove `-rc1`, as appropriate). 1. Commit the new changelog and constants change. diff --git a/README b/README index a17cb730..d7db9ca7 100644 --- a/README +++ b/README @@ -7,7 +7,7 @@ ----------------------------------------------------------------------------------------------- -Oragono is a modern, experimental IRC server written in Go. It's designed to be simple to setup +Oragono is a modern IRC server written in Go. It's designed to be simple to setup and use, and to provide the majority of features that IRC users expect today. It includes features such as UTF-8 nicks and channel names, client accounts and SASL, and other @@ -55,13 +55,8 @@ Otherwise, just starting the server will run an automagic backup and upgrade. === Credits === -* Jeremy Latt, creator of Ergonomadic, -* Edmund Huber, maintainer of Ergonomadic, -* Niels Freier, added WebSocket support to Ergonomadic, -* Daniel Oakley, maintainer of Oragono, -* Euan Kemp, contributor to Oragono and lots of useful fixes, -* Shivaram Lingamneni, has contributed a ton of fixes, refactoring, and general improvements, -* James Mills, contributed Docker support, -* Vegax, implementing some commands and helping when Oragono was just getting started, -* Sean Enck, transitioned us from using a custom script to a proper Makefile, -* apologies to anyone I forgot. +* Jeremy Latt (2012-2014) +* Edmund Huber (2014-2015) +* Daniel Oaks (2016-present) +* Shivaram Lingamneni (2017-present) +* Many other contributors and friends of the project <3 diff --git a/README.md b/README.md index 82dd9975..044d27b0 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,13 @@ ![Oragono logo](docs/logo.png) -Oragono is a modern, experimental IRC server written in Go. It's designed to be simple to setup and use, and it includes features such as UTF-8 nicks / channel names, client accounts with SASL, and other assorted IRCv3 support. +Oragono is a modern IRC server written in Go. Its core design principles are: -Oragono is a fork of the [Ergonomadic](https://github.com/edmund-huber/ergonomadic) IRC daemon <3 +* Being simple to set up and use +* Combining the features of an ircd, a services framework, and a bouncer (integrated account management, history storage, and bouncer functionality) +* Bleeding-edge [IRCv3 support](http://ircv3.net/software/servers.html), suitable for use as an IRCv3 reference implementation +* Highly customizable via a rehashable (i.e., reloadable at runtime) YAML config + +Oragono is a fork of the [Ergonomadic](https://github.com/jlatt/ergonomadic) IRC daemon <3 --- @@ -19,14 +24,15 @@ Oragono is a fork of the [Ergonomadic](https://github.com/edmund-huber/ergonomad ## Features -* UTF-8 nick and channel names with rfc7613 (PRECIS) -* [yaml](http://yaml.org/) configuration -* native TLS/SSL support -* 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 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) +* bouncer-like features: storing and replaying history, allowing multiple clients to use the same nickname +* UTF-8 nick and channel names with rfc7613 (PRECIS) +* native TLS/SSL support, including support for client certificates +* [yaml](https://yaml.org/) configuration +* updating server config and TLS certificates on-the-fly (rehashing) +* SASL authentication +* LDAP support +* supports [multiple languages](https://crowdin.com/project/oragono) (you can also set a default language for your network) * 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 @@ -117,13 +123,8 @@ Make sure to setup [SASL](https://freenode.net/kb/answer/sasl) in your client to # Credits -* Jeremy Latt, creator of Ergonomadic, -* Edmund Huber, maintainer of Ergonomadic, -* Niels Freier, added WebSocket support to Ergonomadic, -* Daniel Oakley, maintainer of Oragono, -* Euan Kemp, contributor to Oragono and lots of useful fixes, -* Shivaram Lingamneni, co-maintainer of Oragono, -* James Mills, contributed Docker support, -* Vegax, implementing some commands and helping when Oragono was just getting started, -* Sean Enck, transitioned us from using a custom script to a proper Makefile, -* apologies to anyone I forgot. +* Jeremy Latt (2012-2014) +* Edmund Huber (2014-2015) +* Daniel Oaks (2016-present) +* Shivaram Lingamneni (2017-present) +* [Many other contributors and friends of the project <3](https://github.com/oragono/oragono/blob/master/CHANGELOG.md) diff --git a/docs/MANUAL.md b/docs/MANUAL.md index 25a78997..72b30dce 100644 --- a/docs/MANUAL.md +++ b/docs/MANUAL.md @@ -28,7 +28,7 @@ _Copyright © Daniel Oaks , Shivaram Lingamneni Shivaram Lingamneni, slingamn, `, "\n") - infoString3 = strings.Split(` 3onyc - Edmund Huber - Euan Kemp (euank) - Jeremy Latt - Martin Lindhe (martinlindhe) - Roberto Besser (besser) - Robin Burchell (rburchell) - Sean Enck (enckse) - soul9 - Vegax + infoString3 = strings.Split(` Jeremy Latt, jlatt + Edmund Huber, edmund-huber `, "\n") ) diff --git a/oragono.yaml b/oragono.yaml index f1a98ce7..2250accc 100644 --- a/oragono.yaml +++ b/oragono.yaml @@ -744,6 +744,8 @@ history: # per-channel setting): registered-channels: "opt-out" - # direct messages are only stored in the database for persistent clients; - # you can control how they are stored here (same options as above) + # direct messages are only stored in the database for logged-in clients; + # you can control how they are stored here (same options as above). + # if you enable this, strict nickname reservation is strongly recommended + # as well. direct-messages: "opt-out"