first pass at renaming Oragono to Ergo

This commit is contained in:
Shivaram Lingamneni 2021-05-25 00:34:38 -04:00
parent 7a1695c628
commit 23c7218bf1
63 changed files with 253 additions and 262 deletions

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# exclude vendor/ # exclude vendor/
SOURCES="./oragono.go ./irc" SOURCES="./ergo.go ./irc"
if [ "$1" = "--fix" ]; then if [ "$1" = "--fix" ]; then
exec gofmt -s -w $SOURCES exec gofmt -s -w $SOURCES

8
.gitignore vendored
View File

@ -95,7 +95,7 @@ _testmain.go
*.out *.out
### Oragono ### ### custom ###
/_site/ /_site/
/.vscode/* /.vscode/*
/ircd* /ircd*
@ -103,10 +103,10 @@ _testmain.go
/web.* /web.*
/ssl.* /ssl.*
/tls.* /tls.*
/oragono /ergo
/build/* /build/*
_test _test
oragono.prof ergo.prof
oragono.mprof ergo.mprof
/dist /dist
*.pem *.pem

View File

@ -1,9 +1,9 @@
# .goreleaser.yml # .goreleaser.yml
# Build customization # Build customization
project_name: oragono project_name: ergo
builds: builds:
- main: oragono.go - main: ergo.go
binary: oragono binary: ergo
goos: goos:
- freebsd - freebsd
- windows - windows
@ -44,7 +44,7 @@ archives:
files: files:
- README - README
- CHANGELOG.md - CHANGELOG.md
- oragono.motd - ergo.motd
- default.yaml - default.yaml
- traditional.yaml - traditional.yaml
- docs/MANUAL.md - docs/MANUAL.md

View File

@ -1,5 +1,5 @@
# Changelog # Changelog
All notable changes to Oragono will be documented in this file. All notable changes to Ergo will be documented in this file.
## [2.6.1] - 2021-04-26 ## [2.6.1] - 2021-04-26

View File

@ -1,18 +1,18 @@
# Developing Oragono # Developing Ergo
This is a guide to modifying Oragono's code. If you're just trying to run your own Oragono, or use one, you shouldn't need to worry about these issues. This is a guide to modifying Ergo's code. If you're just trying to run your own Ergo, or use one, you shouldn't need to worry about these issues.
## Golang issues ## Golang issues
You should use the [latest distribution of the Go language for your OS and architecture](https://golang.org/dl/). (If `uname -m` on your Raspberry Pi reports `armv7l`, use the `armv6l` distribution of Go; if it reports v8, you may be able to use the `arm64` distribution.) You should use the [latest distribution of the Go language for your OS and architecture](https://golang.org/dl/). (If `uname -m` on your Raspberry Pi reports `armv7l`, use the `armv6l` distribution of Go; if it reports v8, you may be able to use the `arm64` distribution.)
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. Ergo vendors all its dependencies. Because of this, Ergo 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: If you're upgrading the Go version used by Ergo, 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) 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. `Dockerfile`, which controls the version that the Oragono binaries in our Docker images are built with 2. `Dockerfile`, which controls the version that the Ergo binaries in our Docker images are built with
3. `go.mod`: this should be updated automatically by Go when you do module-related operations 3. `go.mod`: this should be updated automatically by Go when you do module-related operations
@ -40,7 +40,7 @@ Develop branches are either used to work out implementation details in preperati
1. Publish the release on GitHub (Releases -> "Draft a new release"); use the new tag, post the changelog entries, upload the binaries 1. Publish the release on GitHub (Releases -> "Draft a new release"); use the new tag, post the changelog entries, upload the binaries
1. Update the `irctest_stable` branch with the new changes (this may be a force push). 1. Update the `irctest_stable` branch with the new changes (this may be a force push).
1. If it's a production release (as opposed to a release candidate), update the `stable` branch with the new changes. (This may be a force push in the event that stable contained a backport. This is fine because all stable releases and release candidates are tagged.) 1. If it's a production release (as opposed to a release candidate), update the `stable` branch with the new changes. (This may be a force push in the event that stable contained a backport. This is fine because all stable releases and release candidates are tagged.)
1. Similarly, for a production release, update the `irctest_stable` branch (this is the branch used by upstream irctest to integration-test against Oragono). 1. Similarly, for a production release, update the `irctest_stable` branch (this is the branch used by upstream irctest to integration-test against Ergo).
1. Make the appropriate announcements: 1. Make the appropriate announcements:
* For a release candidate: * For a release candidate:
1. the channel topic 1. the channel topic
@ -49,7 +49,7 @@ Develop branches are either used to work out implementation details in preperati
* For a production release: * For a production release:
1. everything applicable to a release candidate 1. everything applicable to a release candidate
1. Twitter 1. Twitter
1. oragono.io/news 1. ergo.chat/news
1. ircv3.net support tables, if applicable 1. ircv3.net support tables, if applicable
1. other social media? 1. other social media?
@ -63,7 +63,7 @@ Once it's built and released, you need to setup the new development version. To
```md ```md
## Unreleased ## Unreleased
New release of Oragono! New release of Ergo!
### Config Changes ### Config Changes
@ -80,17 +80,6 @@ New release of Oragono!
## Fuzzing and Testing
Fuzzing can be useful. We don't have testing done inside the IRCd itself, but this fuzzer I've written works alright and has helped shake out various bugs: [irc_fuzz.py](https://gist.github.com/DanielOaks/63ae611039cdf591dfa4).
In addition, I've got the beginnings of a stress-tester here which is useful:
https://github.com/DanielOaks/irc-stress-test
As well, there's a decent set of 'tests' here, which I like to run Oragono through now and then:
https://github.com/DanielOaks/irctest
## Debugging ## Debugging
It's helpful to enable all loglines while developing. Here's how to configure this: It's helpful to enable all loglines while developing. Here's how to configure this:
@ -107,12 +96,12 @@ To debug a hang, the best thing to do is to get a stack trace. The easiest way t
$ kill -ABRT <procid> $ kill -ABRT <procid>
This will kill Oragono and print out a stack trace for you to take a look at. This will kill Ergo and print out a stack trace for you to take a look at.
## Concurrency design ## Concurrency design
Oragono involves a fair amount of shared state. Here are some of the main points: Ergo involves a fair amount of shared state. Here are some of the main points:
1. Each client has a separate goroutine that listens for incoming messages and synchronously processes them. 1. Each client has a separate goroutine that listens for incoming messages and synchronously processes them.
1. All sends to clients are asynchronous; `client.Send` appends the message to a queue, which is then processed on a separate goroutine. It is always safe to call `client.Send`. 1. All sends to clients are asynchronous; `client.Send` appends the message to a queue, which is then processed on a separate goroutine. It is always safe to call `client.Send`.

View File

@ -37,8 +37,8 @@ test:
./.check-gofmt.sh ./.check-gofmt.sh
smoke: smoke:
oragono mkcerts --conf ./default.yaml || true ergo mkcerts --conf ./default.yaml || true
oragono run --conf ./default.yaml --smoke ergo run --conf ./default.yaml --smoke
gofmt: gofmt:
./.check-gofmt.sh --fix ./.check-gofmt.sh --fix

20
README
View File

@ -7,7 +7,7 @@
----------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------
Oragono is a modern IRC server written in Go. Its core design principles are: Ergo is a modern IRC server written in Go. Its core design principles are:
* Being simple to set up and use * Being simple to set up and use
* Combining the features of an ircd, a services framework, and a bouncer: * Combining the features of an ircd, a services framework, and a bouncer:
@ -17,9 +17,9 @@ Oragono is a modern IRC server written in Go. Its core design principles are:
* Bleeding-edge IRCv3 support * Bleeding-edge IRCv3 support
* Highly customizable via a rehashable (runtime-reloadable) YAML config * Highly customizable via a rehashable (runtime-reloadable) YAML config
https://oragono.io/ https://ergo.chat/
https://github.com/oragono/oragono https://github.com/ergochat/ergo
#oragono on Freenode #ergo on irc.ergo.chat or irc.libera.chat
----------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------
@ -34,23 +34,23 @@ Modify the config file as needed (the recommendations at the top may be helpful)
To generate passwords for opers and connect passwords, you can use this command: To generate passwords for opers and connect passwords, you can use this command:
$ oragono genpasswd $ ergo genpasswd
If you need to generate self-signed TLS certificates, use this command: If you need to generate self-signed TLS certificates, use this command:
$ oragono mkcerts $ ergo mkcerts
You are now ready to start Oragono! You are now ready to start Ergo!
$ oragono run $ ergo run
For further instructions, consult the manual. A copy of the manual should be For further instructions, consult the manual. A copy of the manual should be
included in your release under `docs/MANUAL.md`. Or you can view it on the included in your release under `docs/MANUAL.md`. Or you can view it on the
Web: https://oragono.io/manual.html Web: https://ergo.chat/manual.html
=== Updating === === Updating ===
If you're updating from a previous version of Oragono, check out the CHANGELOG for a list If you're updating from a previous version of Ergo, check out the CHANGELOG for a list
of important changes you'll want to take a look at. The change log details config changes, of important changes you'll want to take a look at. The change log details config changes,
fixes, new features and anything else you'll want to be aware of! fixes, new features and anything else you'll want to be aware of!

View File

@ -1,9 +1,9 @@
# This is the default config file for Oragono. # This is the default config file for Ergo.
# It contains recommended defaults for all settings, including some behaviors # It contains recommended defaults for all settings, including some behaviors
# that differ from conventional ircd+services setups. See traditional.yaml # that differ from conventional ircd+services setups. See traditional.yaml
# for a config with more "mainstream" behavior. # for a config with more "mainstream" behavior.
# #
# If you are setting up a new oragono server, you should copy this file # If you are setting up a new Ergo server, you should copy this file
# to a new one named 'ircd.yaml', then read the whole file to see which # to a new one named 'ircd.yaml', then read the whole file to see which
# settings you want to customize. If you don't understand a setting, or # settings you want to customize. If you don't understand a setting, or
# aren't sure what behavior you want, most of the defaults are fine # aren't sure what behavior you want, most of the defaults are fine
@ -25,12 +25,12 @@
# network configuration # network configuration
network: network:
# name of the network # name of the network
name: OragonoTest name: ErgoTest
# server configuration # server configuration
server: server:
# server name # server name
name: oragono.test name: ergo.test
# addresses to listen on # addresses to listen on
listeners: listeners:
@ -62,12 +62,12 @@ server:
min-tls-version: 1.2 min-tls-version: 1.2
# Example of a Unix domain socket for proxying: # Example of a Unix domain socket for proxying:
# "/tmp/oragono_sock": # "/tmp/ergo_sock":
# Example of a Tor listener: any connection that comes in on this listener will # Example of a Tor listener: any connection that comes in on this listener will
# be considered a Tor connection. It is strongly recommended that this listener # be considered a Tor connection. It is strongly recommended that this listener
# *not* be on a public interface --- it should be on 127.0.0.0/8 or unix domain: # *not* be on a public interface --- it should be on 127.0.0.0/8 or unix domain:
# "/hidden_service_sockets/oragono_tor_sock": # "/hidden_service_sockets/ergo_tor_sock":
# tor: true # tor: true
# Example of a WebSocket listener: # Example of a WebSocket listener:
@ -120,14 +120,14 @@ server:
websockets: websockets:
# Restrict the origin of WebSocket connections by matching the "Origin" HTTP # Restrict the origin of WebSocket connections by matching the "Origin" HTTP
# header. This setting causes oragono to reject websocket connections unless # header. This setting causes ergo to reject websocket connections unless
# they originate from a page on one of the whitelisted websites in this list. # they originate from a page on one of the whitelisted websites in this list.
# This prevents malicious websites from making their visitors connect to your # This prevents malicious websites from making their visitors connect to your
# oragono instance without their knowledge. An empty list means there are no # ergo instance without their knowledge. An empty list means there are no
# restrictions. # restrictions.
allowed-origins: allowed-origins:
# - "https://oragono.io" # - "https://ergo.chat"
# - "https://*.oragono.io" # - "https://*.ergo.chat"
# casemapping controls what kinds of strings are permitted as identifiers (nicknames, # casemapping controls what kinds of strings are permitted as identifiers (nicknames,
# channel names, account names, etc.), and how they are normalized for case. # channel names, account names, etc.), and how they are normalized for case.
@ -164,13 +164,12 @@ server:
# the value must begin with a '~' character. comment out / omit to disable: # the value must begin with a '~' character. comment out / omit to disable:
coerce-ident: '~u' coerce-ident: '~u'
# password to login to the server # password to login to the server, generated using `ergo genpasswd`:
# generated using "oragono genpasswd" #password: "$2a$04$0123456789abcdef0123456789abcdef0123456789abcdef01234"
#password: ""
# motd filename # motd filename
# if you change the motd, you should move it to ircd.motd # if you change the motd, you should move it to ircd.motd
motd: oragono.motd motd: ergo.motd
# motd formatting codes # motd formatting codes
# if this is true, the motd is escaped using formatting codes like $c, $b, and $i # if this is true, the motd is escaped using formatting codes like $c, $b, and $i
@ -206,7 +205,7 @@ server:
# (comment this out to use passwords only) # (comment this out to use passwords only)
certfp: "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789" certfp: "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
# password the gateway uses to connect, made with oragono genpasswd # password the gateway uses to connect, made with `ergo genpasswd`
password: "$2a$04$abcdef0123456789abcdef0123456789abcdef0123456789abcde" password: "$2a$04$abcdef0123456789abcdef0123456789abcdef0123456789abcde"
# IPs/CIDRs that can use this webirc command # IPs/CIDRs that can use this webirc command
@ -228,7 +227,7 @@ server:
compatibility: compatibility:
# many clients require that the final parameter of certain messages be an # many clients require that the final parameter of certain messages be an
# RFC1459 trailing parameter, i.e., prefixed with :, whether or not this is # RFC1459 trailing parameter, i.e., prefixed with :, whether or not this is
# actually required. this forces Oragono to send those parameters # actually required. this forces Ergo to send those parameters
# as trailings. this is recommended unless you're testing clients for conformance; # as trailings. this is recommended unless you're testing clients for conformance;
# defaults to true when unset for that reason. # defaults to true when unset for that reason.
force-trailing: true force-trailing: true
@ -241,7 +240,7 @@ server:
# traditionally, IRC servers will truncate and send messages that are # traditionally, IRC servers will truncate and send messages that are
# too long to be relayed intact. this behavior can be disabled by setting # too long to be relayed intact. this behavior can be disabled by setting
# allow-truncation to false, in which case Oragono will reject the message # allow-truncation to false, in which case Ergo will reject the message
# and return an error to the client. (note that this option defaults to true # and return an error to the client. (note that this option defaults to true
# when unset.) # when unset.)
allow-truncation: false allow-truncation: false
@ -309,7 +308,7 @@ server:
# IP cloaking hides users' IP addresses from other users and from channel admins # IP cloaking hides users' IP addresses from other users and from channel admins
# (but not from server admins), while still allowing channel admins to ban # (but not from server admins), while still allowing channel admins to ban
# offending IP addresses or networks. In place of hostnames derived from reverse # offending IP addresses or networks. In place of hostnames derived from reverse
# DNS, users see fake domain names like pwbs2ui4377257x8.oragono. These names are # DNS, users see fake domain names like pwbs2ui4377257x8.irc. These names are
# generated deterministically from the underlying IP address, but if the underlying # generated deterministically from the underlying IP address, but if the underlying
# IP is not already known, it is infeasible to recover it from the cloaked name. # IP is not already known, it is infeasible to recover it from the cloaked name.
# If you disable this, you should probably enable lookup-hostnames in its place. # If you disable this, you should probably enable lookup-hostnames in its place.
@ -351,10 +350,10 @@ server:
secure-nets: secure-nets:
# - "10.0.0.0/8" # - "10.0.0.0/8"
# oragono will write files to disk under certain circumstances, e.g., # Ergo will write files to disk under certain circumstances, e.g.,
# CPU profiling or data export. by default, these files will be written # CPU profiling or data export. by default, these files will be written
# to the working directory. set this to customize: # to the working directory. set this to customize:
#output-path: "/home/oragono/out" #output-path: "/home/ergo/out"
# the hostname used by "services", e.g., NickServ, defaults to "localhost", # the hostname used by "services", e.g., NickServ, defaults to "localhost",
# e.g., `NickServ!NickServ@localhost`. uncomment this to override: # e.g., `NickServ!NickServ@localhost`. uncomment this to override:
@ -497,7 +496,7 @@ accounts:
# nickname after the initial connection is complete # nickname after the initial connection is complete
forbid-anonymous-nick-changes: false forbid-anonymous-nick-changes: false
# multiclient controls whether oragono allows multiple connections to # multiclient controls whether Ergo allows multiple connections to
# attach to the same client/nickname identity; this is part of the # attach to the same client/nickname identity; this is part of the
# functionality traditionally provided by a bouncer like ZNC # functionality traditionally provided by a bouncer like ZNC
multiclient: multiclient:
@ -658,7 +657,7 @@ opers:
# operators can be authenticated either by password (with the /OPER command), # operators can be authenticated either by password (with the /OPER command),
# or by certificate fingerprint, or both. if a password hash is set, then a # or by certificate fingerprint, or both. if a password hash is set, then a
# password is required to oper up (e.g., /OPER dan mypassword). to generate # password is required to oper up (e.g., /OPER dan mypassword). to generate
# the hash, use `oragono genpasswd`. # the hash, use `ergo genpasswd`.
password: "$2a$04$0123456789abcdef0123456789abcdef0123456789abcdef01234" password: "$2a$04$0123456789abcdef0123456789abcdef0123456789abcdef01234"
# if a SHA-256 certificate fingerprint is configured here, then it will be # if a SHA-256 certificate fingerprint is configured here, then it will be
@ -718,7 +717,7 @@ logging:
# debug options # debug options
debug: debug:
# when enabled, oragono will attempt to recover from certain kinds of # when enabled, Ergo will attempt to recover from certain kinds of
# client-triggered runtime errors that would normally crash the server. # client-triggered runtime errors that would normally crash the server.
# this makes the server more resilient to DoS, but could result in incorrect # this makes the server more resilient to DoS, but could result in incorrect
# behavior. deployments that would prefer to "start from scratch", e.g., by # behavior. deployments that would prefer to "start from scratch", e.g., by
@ -749,9 +748,9 @@ datastore:
port: 3306 port: 3306
# if socket-path is set, it will be used instead of host:port # if socket-path is set, it will be used instead of host:port
#socket-path: "/var/run/mysqld/mysqld.sock" #socket-path: "/var/run/mysqld/mysqld.sock"
user: "oragono" user: "ergo"
password: "hunter2" password: "hunter2"
history-database: "oragono_history" history-database: "ergo_history"
timeout: 3s timeout: 3s
max-conns: 4 max-conns: 4
# this may be necessary to prevent middleware from closing your connections: # this may be necessary to prevent middleware from closing your connections:
@ -965,5 +964,5 @@ history:
# - "typing" # - "typing"
# whether to allow customization of the config at runtime using environment variables, # whether to allow customization of the config at runtime using environment variables,
# e.g., ORAGONO__SERVER__MAX_SENDQ=128k. see the manual for more details. # e.g., ERGO__SERVER__MAX_SENDQ=128k. see the manual for more details.
allow-environment-overrides: true allow-environment-overrides: true

View File

@ -13,12 +13,13 @@ import (
"strings" "strings"
"syscall" "syscall"
"github.com/docopt/docopt-go"
"github.com/oragono/oragono/irc"
"github.com/oragono/oragono/irc/logger"
"github.com/oragono/oragono/irc/mkcerts"
"golang.org/x/crypto/bcrypt" "golang.org/x/crypto/bcrypt"
"golang.org/x/crypto/ssh/terminal" "golang.org/x/crypto/ssh/terminal"
"github.com/docopt/docopt-go"
"github.com/ergochat/ergo/irc"
"github.com/ergochat/ergo/irc/logger"
"github.com/ergochat/ergo/irc/mkcerts"
) )
// set via linker flags, either by make or by goreleaser: // set via linker flags, either by make or by goreleaser:
@ -47,7 +48,7 @@ func fileDoesNotExist(file string) bool {
return false return false
} }
// implements the `oragono mkcerts` command // implements the `ergo mkcerts` command
func doMkcerts(configFile string, quiet bool) { func doMkcerts(configFile string, quiet bool) {
config, err := irc.LoadRawConfig(configFile) config, err := irc.LoadRawConfig(configFile)
if err != nil { if err != nil {
@ -78,7 +79,7 @@ func doMkcerts(configFile string, quiet bool) {
if !(fileDoesNotExist(cert) && fileDoesNotExist(key)) { if !(fileDoesNotExist(cert) && fileDoesNotExist(key)) {
log.Fatalf("Preexisting TLS cert and/or key files: %s %s", cert, key) log.Fatalf("Preexisting TLS cert and/or key files: %s %s", cert, key)
} }
err := mkcerts.CreateCert("Oragono", host, cert, key) err := mkcerts.CreateCert("Ergo", host, cert, key)
if err == nil { if err == nil {
if !quiet { if !quiet {
log.Printf(" Certificate created at %s : %s\n", cert, key) log.Printf(" Certificate created at %s : %s\n", cert, key)
@ -92,16 +93,16 @@ func doMkcerts(configFile string, quiet bool) {
func main() { func main() {
irc.SetVersionString(version, commit) irc.SetVersionString(version, commit)
usage := `oragono. usage := `ergo.
Usage: Usage:
oragono initdb [--conf <filename>] [--quiet] ergo initdb [--conf <filename>] [--quiet]
oragono upgradedb [--conf <filename>] [--quiet] ergo upgradedb [--conf <filename>] [--quiet]
oragono importdb <database.json> [--conf <filename>] [--quiet] ergo importdb <database.json> [--conf <filename>] [--quiet]
oragono genpasswd [--conf <filename>] [--quiet] ergo genpasswd [--conf <filename>] [--quiet]
oragono mkcerts [--conf <filename>] [--quiet] ergo mkcerts [--conf <filename>] [--quiet]
oragono run [--conf <filename>] [--quiet] [--smoke] ergo run [--conf <filename>] [--quiet] [--smoke]
oragono -h | --help ergo -h | --help
oragono --version ergo --version
Options: Options:
--conf <filename> Configuration file to use [default: ircd.yaml]. --conf <filename> Configuration file to use [default: ircd.yaml].
--quiet Don't show startup/shutdown lines. --quiet Don't show startup/shutdown lines.
@ -183,7 +184,7 @@ Options:
// warning if running a non-final version // warning if running a non-final version
if strings.Contains(irc.Ver, "unreleased") { if strings.Contains(irc.Ver, "unreleased") {
logman.Warning("server", "You are currently running an unreleased beta version of Oragono that may be unstable and could corrupt your database.\nIf you are running a production network, please download the latest build from https://oragono.io/downloads.html and run that instead.") logman.Warning("server", "You are currently running an unreleased beta version of Ergo that may be unstable and could corrupt your database.\nIf you are running a production network, please download the latest build from https://ergo.chat/downloads.html and run that instead.")
} }
server, err := irc.NewServer(config, logman) server, err := irc.NewServer(config, logman)
@ -193,7 +194,7 @@ Options:
} }
if !arguments["--quiet"].(bool) { if !arguments["--quiet"].(bool) {
logman.Info("server", "Server running") logman.Info("server", "Server running")
defer logman.Info("server", fmt.Sprintf("Oragono v%s exiting", irc.SemVer)) defer logman.Info("server", fmt.Sprintf("%s exiting", irc.Ver))
} }
if !arguments["--smoke"].(bool) { if !arguments["--smoke"].(bool) {
server.Run() server.Run()

2
go.mod
View File

@ -1,4 +1,4 @@
module github.com/oragono/oragono module github.com/ergochat/ergo
go 1.16 go 1.16

View File

@ -15,12 +15,12 @@ import (
"time" "time"
"unicode" "unicode"
"github.com/oragono/oragono/irc/connection_limits" "github.com/ergochat/ergo/irc/connection_limits"
"github.com/oragono/oragono/irc/email" "github.com/ergochat/ergo/irc/email"
"github.com/oragono/oragono/irc/migrations" "github.com/ergochat/ergo/irc/migrations"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
"github.com/oragono/oragono/irc/passwd" "github.com/ergochat/ergo/irc/passwd"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
"github.com/tidwall/buntdb" "github.com/tidwall/buntdb"
) )

View File

@ -10,7 +10,7 @@ import (
"fmt" "fmt"
"net" "net"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
// JSON-serializable input and output types for the script // JSON-serializable input and output types for the script

View File

@ -5,7 +5,7 @@ package caps
import ( import (
"fmt" "fmt"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
// Set holds a set of enabled capabilities. // Set holds a set of enabled capabilities.

View File

@ -15,10 +15,10 @@ import (
"github.com/goshuirc/irc-go/ircutils" "github.com/goshuirc/irc-go/ircutils"
"github.com/oragono/oragono/irc/caps" "github.com/ergochat/ergo/irc/caps"
"github.com/oragono/oragono/irc/history" "github.com/ergochat/ergo/irc/history"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
type ChannelSettings struct { type ChannelSettings struct {

View File

@ -7,7 +7,7 @@ import (
"sort" "sort"
"sync" "sync"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
type channelManagerEntry struct { type channelManagerEntry struct {

View File

@ -12,8 +12,8 @@ import (
"github.com/tidwall/buntdb" "github.com/tidwall/buntdb"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
// this is exclusively the *persistence* layer for channel registration; // this is exclusively the *persistence* layer for channel registration;

View File

@ -10,10 +10,10 @@ import (
"strings" "strings"
"time" "time"
"github.com/ergochat/ergo/irc/modes"
"github.com/ergochat/ergo/irc/sno"
"github.com/ergochat/ergo/irc/utils"
"github.com/goshuirc/irc-go/ircfmt" "github.com/goshuirc/irc-go/ircfmt"
"github.com/oragono/oragono/irc/modes"
"github.com/oragono/oragono/irc/sno"
"github.com/oragono/oragono/irc/utils"
) )
const chanservHelp = `ChanServ lets you register and manage channels.` const chanservHelp = `ChanServ lets you register and manage channels.`

View File

@ -21,13 +21,13 @@ import (
"github.com/goshuirc/irc-go/ircreader" "github.com/goshuirc/irc-go/ircreader"
ident "github.com/oragono/go-ident" ident "github.com/oragono/go-ident"
"github.com/oragono/oragono/irc/caps" "github.com/ergochat/ergo/irc/caps"
"github.com/oragono/oragono/irc/connection_limits" "github.com/ergochat/ergo/irc/connection_limits"
"github.com/oragono/oragono/irc/flatip" "github.com/ergochat/ergo/irc/flatip"
"github.com/oragono/oragono/irc/history" "github.com/ergochat/ergo/irc/history"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
"github.com/oragono/oragono/irc/sno" "github.com/ergochat/ergo/irc/sno"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
const ( const (

View File

@ -8,9 +8,9 @@ import (
"strings" "strings"
"sync" "sync"
"github.com/oragono/oragono/irc/caps" "github.com/ergochat/ergo/irc/caps"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
// ClientManager keeps track of clients by nick, enforcing uniqueness of casefolded nicks // ClientManager keeps track of clients by nick, enforcing uniqueness of casefolded nicks

View File

@ -6,7 +6,7 @@ package irc
import ( import (
"testing" "testing"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
func TestGenerateBatchID(t *testing.T) { func TestGenerateBatchID(t *testing.T) {

View File

@ -8,7 +8,7 @@ import (
"golang.org/x/crypto/sha3" "golang.org/x/crypto/sha3"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
type CloakConfig struct { type CloakConfig struct {

View File

@ -27,19 +27,19 @@ import (
"github.com/goshuirc/irc-go/ircfmt" "github.com/goshuirc/irc-go/ircfmt"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
"github.com/oragono/oragono/irc/caps" "github.com/ergochat/ergo/irc/caps"
"github.com/oragono/oragono/irc/cloaks" "github.com/ergochat/ergo/irc/cloaks"
"github.com/oragono/oragono/irc/connection_limits" "github.com/ergochat/ergo/irc/connection_limits"
"github.com/oragono/oragono/irc/custime" "github.com/ergochat/ergo/irc/custime"
"github.com/oragono/oragono/irc/email" "github.com/ergochat/ergo/irc/email"
"github.com/oragono/oragono/irc/isupport" "github.com/ergochat/ergo/irc/isupport"
"github.com/oragono/oragono/irc/jwt" "github.com/ergochat/ergo/irc/jwt"
"github.com/oragono/oragono/irc/languages" "github.com/ergochat/ergo/irc/languages"
"github.com/oragono/oragono/irc/logger" "github.com/ergochat/ergo/irc/logger"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
"github.com/oragono/oragono/irc/mysql" "github.com/ergochat/ergo/irc/mysql"
"github.com/oragono/oragono/irc/passwd" "github.com/ergochat/ergo/irc/passwd"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
// here's how this works: exported (capitalized) members of the config structs // here's how this works: exported (capitalized) members of the config structs
@ -1025,10 +1025,13 @@ func (ce *configPathError) Error() string {
func mungeFromEnvironment(config *Config, envPair string) (applied bool, err *configPathError) { func mungeFromEnvironment(config *Config, envPair string) (applied bool, err *configPathError) {
equalIdx := strings.IndexByte(envPair, '=') equalIdx := strings.IndexByte(envPair, '=')
name, value := envPair[:equalIdx], envPair[equalIdx+1:] name, value := envPair[:equalIdx], envPair[equalIdx+1:]
if !strings.HasPrefix(name, "ORAGONO__") { if strings.HasPrefix(name, "ERGO__") {
name = strings.TrimPrefix(name, "ERGO__")
} else if strings.HasPrefix(name, "ORAGONO__") {
name = strings.TrimPrefix(name, "ORAGONO__")
} else {
return false, nil return false, nil
} }
name = strings.TrimPrefix(name, "ORAGONO__")
pathComponents := strings.Split(name, "__") pathComponents := strings.Split(name, "__")
for i, pathComponent := range pathComponents { for i, pathComponent := range pathComponents {
pathComponents[i] = screamingSnakeToKebab(pathComponent) pathComponents[i] = screamingSnakeToKebab(pathComponent)

View File

@ -19,12 +19,12 @@ func TestEnvironmentOverrides(t *testing.T) {
env := []string{ env := []string{
`USER=shivaram`, // unrelated var `USER=shivaram`, // unrelated var
`ORAGONO_USER=oragono`, // this should be ignored as well `ORAGONO_USER=oragono`, // this should be ignored as well
`ORAGONO__NETWORK__NAME=example.com`, `ERGO__NETWORK__NAME=example.com`,
`ORAGONO__SERVER__COMPATIBILITY__FORCE_TRAILING=false`, `ORAGONO__SERVER__COMPATIBILITY__FORCE_TRAILING=false`,
`ORAGONO__SERVER__COERCE_IDENT="~user"`, `ORAGONO__SERVER__COERCE_IDENT="~user"`,
`ORAGONO__SERVER__MOTD=short.motd.txt`, `ERGO__SERVER__MOTD=short.motd.txt`,
`ORAGONO__ACCOUNTS__NICK_RESERVATION__ENABLED=true`, `ORAGONO__ACCOUNTS__NICK_RESERVATION__ENABLED=true`,
`ORAGONO__ACCOUNTS__DEFAULT_USER_MODES="+iR"`, `ERGO__ACCOUNTS__DEFAULT_USER_MODES="+iR"`,
`ORAGONO__SERVER__IP_CLOAKING={"enabled": true, "enabled-for-always-on": true, "netname": "irc", "cidr-len-ipv4": 32, "cidr-len-ipv6": 64, "num-bits": 64}`, `ORAGONO__SERVER__IP_CLOAKING={"enabled": true, "enabled-for-always-on": true, "netname": "irc", "cidr-len-ipv4": 32, "cidr-len-ipv6": 64, "num-bits": 64}`,
} }
for _, envPair := range env { for _, envPair := range env {

View File

@ -10,8 +10,8 @@ import (
"sync" "sync"
"time" "time"
"github.com/oragono/oragono/irc/flatip" "github.com/ergochat/ergo/irc/flatip"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
var ( var (

View File

@ -8,7 +8,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/oragono/oragono/irc/flatip" "github.com/ergochat/ergo/irc/flatip"
) )
func easyParseIP(ipstr string) (result flatip.IP) { func easyParseIP(ipstr string) (result flatip.IP) {

View File

@ -14,8 +14,8 @@ import (
"strings" "strings"
"time" "time"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
"github.com/tidwall/buntdb" "github.com/tidwall/buntdb"
) )

View File

@ -10,7 +10,7 @@ import (
"sync" "sync"
"time" "time"
"github.com/oragono/oragono/irc/flatip" "github.com/ergochat/ergo/irc/flatip"
"github.com/tidwall/buntdb" "github.com/tidwall/buntdb"
) )

View File

@ -10,7 +10,7 @@ import (
"regexp" "regexp"
"strings" "strings"
"github.com/oragono/oragono/irc/smtp" "github.com/ergochat/ergo/irc/smtp"
) )
var ( var (

View File

@ -10,7 +10,7 @@ import (
"fmt" "fmt"
"time" "time"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
// Runtime Errors // Runtime Errors

View File

@ -9,9 +9,9 @@ import (
"errors" "errors"
"net" "net"
"github.com/oragono/oragono/irc/flatip" "github.com/ergochat/ergo/irc/flatip"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
var ( var (

View File

@ -9,10 +9,10 @@ import (
"time" "time"
"unsafe" "unsafe"
"github.com/oragono/oragono/irc/caps" "github.com/ergochat/ergo/irc/caps"
"github.com/oragono/oragono/irc/languages" "github.com/ergochat/ergo/irc/languages"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
func (server *Server) Config() (config *Config) { func (server *Server) Config() (config *Config) {

View File

@ -25,14 +25,14 @@ import (
"github.com/goshuirc/irc-go/ircutils" "github.com/goshuirc/irc-go/ircutils"
"golang.org/x/crypto/bcrypt" "golang.org/x/crypto/bcrypt"
"github.com/oragono/oragono/irc/caps" "github.com/ergochat/ergo/irc/caps"
"github.com/oragono/oragono/irc/custime" "github.com/ergochat/ergo/irc/custime"
"github.com/oragono/oragono/irc/flatip" "github.com/ergochat/ergo/irc/flatip"
"github.com/oragono/oragono/irc/history" "github.com/ergochat/ergo/irc/history"
"github.com/oragono/oragono/irc/jwt" "github.com/ergochat/ergo/irc/jwt"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
"github.com/oragono/oragono/irc/sno" "github.com/ergochat/ergo/irc/sno"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
// helper function to parse ACC callbacks, e.g., mailto:person@example.com, tel:16505551234 // helper function to parse ACC callbacks, e.g., mailto:person@example.com, tel:16505551234
@ -710,7 +710,7 @@ func debugHandler(server *Server, client *Client, msg ircmsg.Message, rb *Respon
rb.Notice(fmt.Sprintf("num goroutines: %d", count)) rb.Notice(fmt.Sprintf("num goroutines: %d", count))
case "PROFILEHEAP": case "PROFILEHEAP":
profFile := server.Config().getOutputPath("oragono.mprof") profFile := server.Config().getOutputPath("ergo.mprof")
file, err := os.Create(profFile) file, err := os.Create(profFile)
if err != nil { if err != nil {
rb.Notice(fmt.Sprintf("error: %s", err)) rb.Notice(fmt.Sprintf("error: %s", err))
@ -721,7 +721,7 @@ func debugHandler(server *Server, client *Client, msg ircmsg.Message, rb *Respon
rb.Notice(fmt.Sprintf("written to %s", profFile)) rb.Notice(fmt.Sprintf("written to %s", profFile))
case "STARTCPUPROFILE": case "STARTCPUPROFILE":
profFile := server.Config().getOutputPath("oragono.prof") profFile := server.Config().getOutputPath("ergo.prof")
file, err := os.Create(profFile) file, err := os.Create(profFile)
if err != nil { if err != nil {
rb.Notice(fmt.Sprintf("error: %s", err)) rb.Notice(fmt.Sprintf("error: %s", err))
@ -1082,13 +1082,13 @@ func infoHandler(server *Server, client *Client, msg ircmsg.Message, rb *Respons
for _, line := range infoString1 { for _, line := range infoString1 {
rb.Add(nil, server.name, RPL_INFO, nick, line) rb.Add(nil, server.name, RPL_INFO, nick, line)
} }
rb.Add(nil, server.name, RPL_INFO, nick, fmt.Sprintf(client.t("This is Oragono version %s."), SemVer)) rb.Add(nil, server.name, RPL_INFO, nick, fmt.Sprintf(client.t("This is Ergo version %s."), SemVer))
if Commit != "" { if Commit != "" {
rb.Add(nil, server.name, RPL_INFO, nick, fmt.Sprintf(client.t("It was built from git hash %s."), Commit)) rb.Add(nil, server.name, RPL_INFO, nick, fmt.Sprintf(client.t("It was built from git hash %s."), Commit))
} }
rb.Add(nil, server.name, RPL_INFO, nick, fmt.Sprintf(client.t("It was compiled using %s."), runtime.Version())) rb.Add(nil, server.name, RPL_INFO, nick, fmt.Sprintf(client.t("It was compiled using %s."), runtime.Version()))
rb.Add(nil, server.name, RPL_INFO, nick, "") rb.Add(nil, server.name, RPL_INFO, nick, "")
rb.Add(nil, server.name, RPL_INFO, nick, client.t("Oragono is released under the MIT license.")) rb.Add(nil, server.name, RPL_INFO, nick, client.t("Ergo is released under the MIT license."))
rb.Add(nil, server.name, RPL_INFO, nick, "") rb.Add(nil, server.name, RPL_INFO, nick, "")
rb.Add(nil, server.name, RPL_INFO, nick, client.t("Core Developers:")) rb.Add(nil, server.name, RPL_INFO, nick, client.t("Core Developers:"))
for _, line := range infoString2 { for _, line := range infoString2 {
@ -1099,7 +1099,7 @@ func infoHandler(server *Server, client *Client, msg ircmsg.Message, rb *Respons
rb.Add(nil, server.name, RPL_INFO, nick, line) rb.Add(nil, server.name, RPL_INFO, nick, line)
} }
rb.Add(nil, server.name, RPL_INFO, nick, client.t("For a more complete list of contributors, see our changelog:")) rb.Add(nil, server.name, RPL_INFO, nick, client.t("For a more complete list of contributors, see our changelog:"))
rb.Add(nil, server.name, RPL_INFO, nick, " https://github.com/oragono/oragono/blob/master/CHANGELOG.md") rb.Add(nil, server.name, RPL_INFO, nick, " https://github.com/ergochat/ergo/blob/master/CHANGELOG.md")
rb.Add(nil, server.name, RPL_INFO, nick, "") rb.Add(nil, server.name, RPL_INFO, nick, "")
// show translators for languages other than good ole' regular English // show translators for languages other than good ole' regular English
tlines := server.Languages().Translators() tlines := server.Languages().Translators()

View File

@ -9,7 +9,7 @@ import (
"strings" "strings"
"sync" "sync"
"github.com/oragono/oragono/irc/languages" "github.com/ergochat/ergo/irc/languages"
) )
// HelpEntryType represents the different sorts of help entries that can exist. // HelpEntryType represents the different sorts of help entries that can exist.
@ -37,7 +37,7 @@ type HelpEntry struct {
var ( var (
cmodeHelpText = `== Channel Modes == cmodeHelpText = `== Channel Modes ==
Oragono supports the following channel modes: Ergo supports the following channel modes:
+b | Client masks that are banned from the channel (e.g. *!*@127.0.0.1) +b | Client masks that are banned from the channel (e.g. *!*@127.0.0.1)
+e | Client masks that are exempted from bans. +e | Client masks that are exempted from bans.
@ -68,7 +68,7 @@ Oragono supports the following channel modes:
+v (+) | Voice channel mode.` +v (+) | Voice channel mode.`
umodeHelpText = `== User Modes == umodeHelpText = `== User Modes ==
Oragono supports the following user modes: Ergo supports the following user modes:
+a | User is marked as being away. This mode is set with the /AWAY command. +a | User is marked as being away. This mode is set with the /AWAY command.
+i | User is marked as invisible (their channels are hidden from whois replies). +i | User is marked as invisible (their channels are hidden from whois replies).
@ -81,7 +81,7 @@ Oragono supports the following user modes:
+T | CTCP messages to the user are blocked.` +T | CTCP messages to the user are blocked.`
snomaskHelpText = `== Server Notice Masks == snomaskHelpText = `== Server Notice Masks ==
Oragono supports the following server notice masks for operators: Ergo supports the following server notice masks for operators:
a | Local announcements. a | Local announcements.
c | Local client connections. c | Local client connections.
@ -502,7 +502,7 @@ given, views the current topic on the channel.`,
"uban": { "uban": {
text: `UBAN <subcommand> [arguments] text: `UBAN <subcommand> [arguments]
Oragono's "unified ban" system. Accepts the following subcommands: Ergo's "unified ban" system. Accepts the following subcommands:
1. UBAN ADD <target> [REQUIRE-SASL] [DURATION <duration>] [REASON...] 1. UBAN ADD <target> [REQUIRE-SASL] [DURATION <duration>] [REASON...]
2. UBAN DEL <target> 2. UBAN DEL <target>
@ -638,15 +638,15 @@ for direct use by end users.`,
"casemapping": { "casemapping": {
text: `RPL_ISUPPORT CASEMAPPING text: `RPL_ISUPPORT CASEMAPPING
Oragono supports an experimental unicode casemapping designed for extended Ergo supports an experimental unicode casemapping designed for extended
Unicode support. This casemapping is based off RFC 7613 and the draft rfc7613 Unicode support. This casemapping is based off RFC 7613 and the draft rfc7613
casemapping spec here: https://oragono.io/specs.html`, casemapping spec here: https://ergo.chat/specs.html`,
helpType: ISupportHelpEntry, helpType: ISupportHelpEntry,
}, },
"prefix": { "prefix": {
text: `RPL_ISUPPORT PREFIX text: `RPL_ISUPPORT PREFIX
Oragono supports the following channel membership prefixes: Ergo supports the following channel membership prefixes:
+q (~) | Founder channel mode. +q (~) | Founder channel mode.
+a (&) | Admin channel mode. +a (&) | Admin channel mode.

View File

@ -4,7 +4,7 @@
package history package history
import ( import (
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
"sync" "sync"
"time" "time"
) )

View File

@ -11,9 +11,9 @@ import (
"strconv" "strconv"
"time" "time"
"github.com/oragono/oragono/irc/history" "github.com/ergochat/ergo/irc/history"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
const ( const (

View File

@ -10,7 +10,7 @@ import (
"github.com/goshuirc/irc-go/ircfmt" "github.com/goshuirc/irc-go/ircfmt"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
const ( const (

View File

@ -12,7 +12,7 @@ import (
"github.com/tidwall/buntdb" "github.com/tidwall/buntdb"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
const ( const (

View File

@ -12,7 +12,7 @@ import (
"github.com/goshuirc/irc-go/ircmsg" "github.com/goshuirc/irc-go/ircmsg"
"github.com/goshuirc/irc-go/ircreader" "github.com/goshuirc/irc-go/ircreader"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
const ( const (

View File

@ -13,7 +13,7 @@ import (
"github.com/tidwall/buntdb" "github.com/tidwall/buntdb"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
const ( const (

View File

@ -13,7 +13,7 @@ import (
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
var ( var (

View File

@ -8,8 +8,8 @@ import (
"github.com/goshuirc/irc-go/ircmsg" "github.com/goshuirc/irc-go/ircmsg"
"github.com/oragono/oragono/irc/caps" "github.com/ergochat/ergo/irc/caps"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
// MessageCache caches serialized IRC messages. // MessageCache caches serialized IRC messages.

View File

@ -10,9 +10,9 @@ import (
"strconv" "strconv"
"strings" "strings"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
"github.com/oragono/oragono/irc/sno" "github.com/ergochat/ergo/irc/sno"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
var ( var (

View File

@ -10,7 +10,7 @@ import (
"sort" "sort"
"strings" "strings"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
var ( var (

View File

@ -7,7 +7,7 @@ import (
"reflect" "reflect"
"testing" "testing"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
) )
func TestParseDefaultChannelModes(t *testing.T) { func TestParseDefaultChannelModes(t *testing.T) {

View File

@ -16,10 +16,10 @@ import (
"sync/atomic" "sync/atomic"
"time" "time"
"github.com/ergochat/ergo/irc/history"
"github.com/ergochat/ergo/irc/logger"
"github.com/ergochat/ergo/irc/utils"
_ "github.com/go-sql-driver/mysql" _ "github.com/go-sql-driver/mysql"
"github.com/oragono/oragono/irc/history"
"github.com/oragono/oragono/irc/logger"
"github.com/oragono/oragono/irc/utils"
) )
var ( var (

View File

@ -3,8 +3,8 @@ package mysql
import ( import (
"encoding/json" "encoding/json"
"github.com/oragono/oragono/irc/history" "github.com/ergochat/ergo/irc/history"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
// 123 / '{' is the magic number that means JSON; // 123 / '{' is the magic number that means JSON;

View File

@ -9,11 +9,11 @@ import (
"fmt" "fmt"
"strings" "strings"
"github.com/ergochat/ergo/irc/history"
"github.com/ergochat/ergo/irc/modes"
"github.com/ergochat/ergo/irc/sno"
"github.com/ergochat/ergo/irc/utils"
"github.com/goshuirc/irc-go/ircfmt" "github.com/goshuirc/irc-go/ircfmt"
"github.com/oragono/oragono/irc/history"
"github.com/oragono/oragono/irc/modes"
"github.com/oragono/oragono/irc/sno"
"github.com/oragono/oragono/irc/utils"
) )
var ( var (

View File

@ -13,10 +13,10 @@ import (
"github.com/goshuirc/irc-go/ircfmt" "github.com/goshuirc/irc-go/ircfmt"
"github.com/oragono/oragono/irc/custime" "github.com/ergochat/ergo/irc/custime"
"github.com/oragono/oragono/irc/passwd" "github.com/ergochat/ergo/irc/passwd"
"github.com/oragono/oragono/irc/sno" "github.com/ergochat/ergo/irc/sno"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
// "enabled" callbacks for specific nickserv commands // "enabled" callbacks for specific nickserv commands

View File

@ -7,9 +7,9 @@ import (
"runtime/debug" "runtime/debug"
"time" "time"
"github.com/ergochat/ergo/irc/caps"
"github.com/ergochat/ergo/irc/utils"
"github.com/goshuirc/irc-go/ircmsg" "github.com/goshuirc/irc-go/ircmsg"
"github.com/oragono/oragono/irc/caps"
"github.com/oragono/oragono/irc/utils"
) )
const ( const (

View File

@ -7,9 +7,9 @@ import (
"fmt" "fmt"
"strings" "strings"
"github.com/oragono/oragono/irc/history" "github.com/ergochat/ergo/irc/history"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
const ( const (

View File

@ -5,7 +5,7 @@ package irc
import ( import (
"runtime" "runtime"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
// See #237 for context. Operations that might allocate large amounts of temporary // See #237 for context. Operations that might allocate large amounts of temporary

View File

@ -22,15 +22,15 @@ import (
"github.com/goshuirc/irc-go/ircfmt" "github.com/goshuirc/irc-go/ircfmt"
"github.com/oragono/oragono/irc/caps" "github.com/ergochat/ergo/irc/caps"
"github.com/oragono/oragono/irc/connection_limits" "github.com/ergochat/ergo/irc/connection_limits"
"github.com/oragono/oragono/irc/flatip" "github.com/ergochat/ergo/irc/flatip"
"github.com/oragono/oragono/irc/history" "github.com/ergochat/ergo/irc/history"
"github.com/oragono/oragono/irc/logger" "github.com/ergochat/ergo/irc/logger"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
"github.com/oragono/oragono/irc/mysql" "github.com/ergochat/ergo/irc/mysql"
"github.com/oragono/oragono/irc/sno" "github.com/ergochat/ergo/irc/sno"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
"github.com/tidwall/buntdb" "github.com/tidwall/buntdb"
) )
@ -356,9 +356,9 @@ func (server *Server) tryRegister(c *Client, session *Session) (exiting bool) {
func (server *Server) playSTSBurst(session *Session) { func (server *Server) playSTSBurst(session *Session) {
nick := utils.SafeErrorParam(session.client.preregNick) nick := utils.SafeErrorParam(session.client.preregNick)
session.Send(nil, server.name, RPL_WELCOME, nick, fmt.Sprintf("Welcome to the Internet Relay Network %s", nick)) session.Send(nil, server.name, RPL_WELCOME, nick, fmt.Sprintf("Welcome to the Internet Relay Network %s", nick))
session.Send(nil, server.name, RPL_YOURHOST, nick, fmt.Sprintf("Your host is %[1]s, running version %[2]s", server.name, "oragono")) session.Send(nil, server.name, RPL_YOURHOST, nick, fmt.Sprintf("Your host is %[1]s, running version %[2]s", server.name, "ergo"))
session.Send(nil, server.name, RPL_CREATED, nick, fmt.Sprintf("This server was created %s", time.Time{}.Format(time.RFC1123))) session.Send(nil, server.name, RPL_CREATED, nick, fmt.Sprintf("This server was created %s", time.Time{}.Format(time.RFC1123)))
session.Send(nil, server.name, RPL_MYINFO, nick, server.name, "oragono", "o", "o", "o") session.Send(nil, server.name, RPL_MYINFO, nick, server.name, "ergo", "o", "o", "o")
session.Send(nil, server.name, RPL_ISUPPORT, nick, "CASEMAPPING=ascii", "are supported by this server") session.Send(nil, server.name, RPL_ISUPPORT, nick, "CASEMAPPING=ascii", "are supported by this server")
session.Send(nil, server.name, ERR_NOMOTD, nick, "MOTD is unavailable") session.Send(nil, server.name, ERR_NOMOTD, nick, "MOTD is unavailable")
for _, line := range server.Config().Server.STS.bannerLines { for _, line := range server.Config().Server.STS.bannerLines {
@ -1059,8 +1059,8 @@ var (
. . . .
. · . ·
https://oragono.io/ https://ergo.chat/
https://github.com/oragono/oragono https://github.com/ergochat/ergo
https://crowdin.com/project/oragono https://crowdin.com/project/oragono
`, "\n") `, "\n")
infoString2 = strings.Split(` Daniel Oakley, DanielOaks, <daniel@danieloaks.net> infoString2 = strings.Split(` Daniel Oakley, DanielOaks, <daniel@danieloaks.net>

View File

@ -11,9 +11,9 @@ import (
"strings" "strings"
"time" "time"
"github.com/ergochat/ergo/irc/utils"
"github.com/goshuirc/irc-go/ircfmt" "github.com/goshuirc/irc-go/ircfmt"
"github.com/goshuirc/irc-go/ircmsg" "github.com/goshuirc/irc-go/ircmsg"
"github.com/oragono/oragono/irc/utils"
) )
// defines an IRC service, e.g., NICKSERV // defines an IRC service, e.g., NICKSERV

View File

@ -4,8 +4,8 @@ import (
"fmt" "fmt"
"sync" "sync"
"github.com/ergochat/ergo/irc/sno"
"github.com/goshuirc/irc-go/ircfmt" "github.com/goshuirc/irc-go/ircfmt"
"github.com/oragono/oragono/irc/sno"
) )
// SnoManager keeps track of which clients to send snomasks to. // SnoManager keeps track of which clients to send snomasks to.

View File

@ -9,7 +9,7 @@ import (
"io" "io"
"sync" "sync"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
var ( var (

View File

@ -16,7 +16,7 @@ import (
"golang.org/x/text/unicode/norm" "golang.org/x/text/unicode/norm"
"golang.org/x/text/width" "golang.org/x/text/width"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
const ( const (

View File

@ -8,7 +8,7 @@ package irc
import ( import (
"time" "time"
"github.com/oragono/oragono/irc/modes" "github.com/ergochat/ergo/irc/modes"
) )
type empty struct{} type empty struct{}

View File

@ -11,10 +11,10 @@ import (
"github.com/goshuirc/irc-go/ircmsg" "github.com/goshuirc/irc-go/ircmsg"
"github.com/oragono/oragono/irc/custime" "github.com/ergochat/ergo/irc/custime"
"github.com/oragono/oragono/irc/flatip" "github.com/ergochat/ergo/irc/flatip"
"github.com/oragono/oragono/irc/sno" "github.com/ergochat/ergo/irc/sno"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
func consumeDuration(params []string, rb *ResponseBuffer) (duration time.Duration, requireSASL bool, remainingParams []string, err error) { func consumeDuration(params []string, rb *ResponseBuffer) (duration time.Duration, requireSASL bool, remainingParams []string, err error) {

View File

@ -13,7 +13,7 @@ import (
"time" "time"
"unsafe" "unsafe"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
type MaskInfo struct { type MaskInfo struct {

View File

@ -6,13 +6,13 @@ package irc
import "fmt" import "fmt"
const ( const (
// SemVer is the semantic version of Oragono. // SemVer is the semantic version of Ergo.
SemVer = "2.7.0-unreleased" SemVer = "2.7.0-unreleased"
) )
var ( var (
// Ver is the full version of Oragono, used in responses to clients. // Ver is the full version of Ergo, used in responses to clients.
Ver = fmt.Sprintf("oragono-%s", SemVer) Ver = fmt.Sprintf("ergo-%s", SemVer)
// Commit is the full git hash, if available // Commit is the full git hash, if available
Commit string Commit string
) )
@ -21,8 +21,8 @@ var (
func SetVersionString(version, commit string) { func SetVersionString(version, commit string) {
Commit = commit Commit = commit
if version != "" { if version != "" {
Ver = fmt.Sprintf("oragono-%s", version) Ver = fmt.Sprintf("ergo-%s", version)
} else if len(Commit) == 40 { } else if len(Commit) == 40 {
Ver = fmt.Sprintf("oragono-%s-%s", SemVer, Commit[:16]) Ver = fmt.Sprintf("ergo-%s-%s", SemVer, Commit[:16])
} }
} }

View File

@ -9,8 +9,8 @@ import (
"strings" "strings"
"time" "time"
"github.com/oragono/oragono/irc/history" "github.com/ergochat/ergo/irc/history"
"github.com/oragono/oragono/irc/utils" "github.com/ergochat/ergo/irc/utils"
) )
const ( const (

View File

@ -1,17 +1,17 @@
# This is the "traditional" or "mainstream" config file for Oragono. # This is the "traditional" or "mainstream" config file for Ergo.
# It tries to replicate the behavior of other ircds, at the cost of not # It tries to replicate the behavior of other ircds, at the cost of not
# taking full advantage of Oragono's features. This config is suitable for use # taking full advantage of Ergo's features. This config is suitable for use
# in IRCv3 conformance testing. # in IRCv3 conformance testing.
# network configuration # network configuration
network: network:
# name of the network # name of the network
name: OragonoTest name: ErgoTest
# server configuration # server configuration
server: server:
# server name # server name
name: oragono.test name: ergo.test
# addresses to listen on # addresses to listen on
listeners: listeners:
@ -36,12 +36,12 @@ server:
# min-tls-version: 1.2 # min-tls-version: 1.2
# Example of a Unix domain socket for proxying: # Example of a Unix domain socket for proxying:
# "/tmp/oragono_sock": # "/tmp/ergo_sock":
# Example of a Tor listener: any connection that comes in on this listener will # Example of a Tor listener: any connection that comes in on this listener will
# be considered a Tor connection. It is strongly recommended that this listener # be considered a Tor connection. It is strongly recommended that this listener
# *not* be on a public interface --- it should be on 127.0.0.0/8 or unix domain: # *not* be on a public interface --- it should be on 127.0.0.0/8 or unix domain:
# "/hidden_service_sockets/oragono_tor_sock": # "/hidden_service_sockets/ergo_tor_sock":
# tor: true # tor: true
# Example of a WebSocket listener: # Example of a WebSocket listener:
@ -94,14 +94,14 @@ server:
websockets: websockets:
# Restrict the origin of WebSocket connections by matching the "Origin" HTTP # Restrict the origin of WebSocket connections by matching the "Origin" HTTP
# header. This setting causes oragono to reject websocket connections unless # header. This setting causes ergo to reject websocket connections unless
# they originate from a page on one of the whitelisted websites in this list. # they originate from a page on one of the whitelisted websites in this list.
# This prevents malicious websites from making their visitors connect to your # This prevents malicious websites from making their visitors connect to your
# oragono instance without their knowledge. An empty list means there are no # ergo instance without their knowledge. An empty list means there are no
# restrictions. # restrictions.
allowed-origins: allowed-origins:
# - "https://oragono.io" # - "https://ergo.chat"
# - "https://*.oragono.io" # - "https://*.ergo.chat"
# casemapping controls what kinds of strings are permitted as identifiers (nicknames, # casemapping controls what kinds of strings are permitted as identifiers (nicknames,
# channel names, account names, etc.), and how they are normalized for case. # channel names, account names, etc.), and how they are normalized for case.
@ -137,13 +137,12 @@ server:
# the value must begin with a '~' character. comment out / omit to disable: # the value must begin with a '~' character. comment out / omit to disable:
#coerce-ident: '~u' #coerce-ident: '~u'
# password to login to the server # password to login to the server, generated using `ergo genpasswd`:
# generated using "oragono genpasswd" #password: "$2a$04$0123456789abcdef0123456789abcdef0123456789abcdef01234"
#password: ""
# motd filename # motd filename
# if you change the motd, you should move it to ircd.motd # if you change the motd, you should move it to ircd.motd
motd: oragono.motd motd: ergo.motd
# motd formatting codes # motd formatting codes
# if this is true, the motd is escaped using formatting codes like $c, $b, and $i # if this is true, the motd is escaped using formatting codes like $c, $b, and $i
@ -179,7 +178,7 @@ server:
# (comment this out to use passwords only) # (comment this out to use passwords only)
certfp: "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789" certfp: "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789"
# password the gateway uses to connect, made with oragono genpasswd # password the gateway uses to connect, made with `ergo genpasswd`
password: "$2a$04$abcdef0123456789abcdef0123456789abcdef0123456789abcde" password: "$2a$04$abcdef0123456789abcdef0123456789abcdef0123456789abcde"
# IPs/CIDRs that can use this webirc command # IPs/CIDRs that can use this webirc command
@ -201,7 +200,7 @@ server:
compatibility: compatibility:
# many clients require that the final parameter of certain messages be an # many clients require that the final parameter of certain messages be an
# RFC1459 trailing parameter, i.e., prefixed with :, whether or not this is # RFC1459 trailing parameter, i.e., prefixed with :, whether or not this is
# actually required. this forces Oragono to send those parameters # actually required. this forces Ergo to send those parameters
# as trailings. this is recommended unless you're testing clients for conformance; # as trailings. this is recommended unless you're testing clients for conformance;
# defaults to true when unset for that reason. # defaults to true when unset for that reason.
force-trailing: true force-trailing: true
@ -214,7 +213,7 @@ server:
# traditionally, IRC servers will truncate and send messages that are # traditionally, IRC servers will truncate and send messages that are
# too long to be relayed intact. this behavior can be disabled by setting # too long to be relayed intact. this behavior can be disabled by setting
# allow-truncation to false, in which case Oragono will reject the message # allow-truncation to false, in which case Ergo will reject the message
# and return an error to the client. (note that this option defaults to true # and return an error to the client. (note that this option defaults to true
# when unset.) # when unset.)
allow-truncation: true allow-truncation: true
@ -282,7 +281,7 @@ server:
# IP cloaking hides users' IP addresses from other users and from channel admins # IP cloaking hides users' IP addresses from other users and from channel admins
# (but not from server admins), while still allowing channel admins to ban # (but not from server admins), while still allowing channel admins to ban
# offending IP addresses or networks. In place of hostnames derived from reverse # offending IP addresses or networks. In place of hostnames derived from reverse
# DNS, users see fake domain names like pwbs2ui4377257x8.oragono. These names are # DNS, users see fake domain names like pwbs2ui4377257x8.irc. These names are
# generated deterministically from the underlying IP address, but if the underlying # generated deterministically from the underlying IP address, but if the underlying
# IP is not already known, it is infeasible to recover it from the cloaked name. # IP is not already known, it is infeasible to recover it from the cloaked name.
ip-cloaking: ip-cloaking:
@ -323,10 +322,10 @@ server:
secure-nets: secure-nets:
# - "10.0.0.0/8" # - "10.0.0.0/8"
# oragono will write files to disk under certain circumstances, e.g., # Ergo will write files to disk under certain circumstances, e.g.,
# CPU profiling or data export. by default, these files will be written # CPU profiling or data export. by default, these files will be written
# to the working directory. set this to customize: # to the working directory. set this to customize:
#output-path: "/home/oragono/out" #output-path: "/home/ergo/out"
# the hostname used by "services", e.g., NickServ, defaults to "localhost", # the hostname used by "services", e.g., NickServ, defaults to "localhost",
# e.g., `NickServ!NickServ@localhost`. uncomment this to override: # e.g., `NickServ!NickServ@localhost`. uncomment this to override:
@ -469,7 +468,7 @@ accounts:
# nickname after the initial connection is complete # nickname after the initial connection is complete
forbid-anonymous-nick-changes: false forbid-anonymous-nick-changes: false
# multiclient controls whether oragono allows multiple connections to # multiclient controls whether Ergo allows multiple connections to
# attach to the same client/nickname identity; this is part of the # attach to the same client/nickname identity; this is part of the
# functionality traditionally provided by a bouncer like ZNC # functionality traditionally provided by a bouncer like ZNC
multiclient: multiclient:
@ -630,7 +629,7 @@ opers:
# operators can be authenticated either by password (with the /OPER command), # operators can be authenticated either by password (with the /OPER command),
# or by certificate fingerprint, or both. if a password hash is set, then a # or by certificate fingerprint, or both. if a password hash is set, then a
# password is required to oper up (e.g., /OPER dan mypassword). to generate # password is required to oper up (e.g., /OPER dan mypassword). to generate
# the hash, use `oragono genpasswd`. # the hash, use `ergo genpasswd`.
password: "$2a$04$0123456789abcdef0123456789abcdef0123456789abcdef01234" password: "$2a$04$0123456789abcdef0123456789abcdef0123456789abcdef01234"
# if a SHA-256 certificate fingerprint is configured here, then it will be # if a SHA-256 certificate fingerprint is configured here, then it will be
@ -691,7 +690,7 @@ logging:
# debug options # debug options
debug: debug:
# when enabled, oragono will attempt to recover from certain kinds of # when enabled, Ergo will attempt to recover from certain kinds of
# client-triggered runtime errors that would normally crash the server. # client-triggered runtime errors that would normally crash the server.
# this makes the server more resilient to DoS, but could result in incorrect # this makes the server more resilient to DoS, but could result in incorrect
# behavior. deployments that would prefer to "start from scratch", e.g., by # behavior. deployments that would prefer to "start from scratch", e.g., by
@ -722,9 +721,9 @@ datastore:
port: 3306 port: 3306
# if socket-path is set, it will be used instead of host:port # if socket-path is set, it will be used instead of host:port
#socket-path: "/var/run/mysqld/mysqld.sock" #socket-path: "/var/run/mysqld/mysqld.sock"
user: "oragono" user: "ergo"
password: "hunter2" password: "hunter2"
history-database: "oragono_history" history-database: "ergo_history"
timeout: 3s timeout: 3s
max-conns: 4 max-conns: 4
# this may be necessary to prevent middleware from closing your connections: # this may be necessary to prevent middleware from closing your connections:
@ -937,5 +936,5 @@ history:
# - "typing" # - "typing"
# whether to allow customization of the config at runtime using environment variables, # whether to allow customization of the config at runtime using environment variables,
# e.g., ORAGONO__SERVER__MAX_SENDQ=128k. see the manual for more details. # e.g., ERGO__SERVER__MAX_SENDQ=128k. see the manual for more details.
allow-environment-overrides: true allow-environment-overrides: true