refactor: migrate HTTP handlers to shared service layer
All checks were successful
check / check (push) Successful in 54s
All checks were successful
check / check (push) Successful in 54s
- Migrate all HTTP command handlers (PRIVMSG, JOIN, PART, NICK, TOPIC, KICK, QUIT, AWAY, OPER, MODE) to use hdlr.svc.* service methods instead of direct database calls. Both HTTP and IRC transports now share the same business logic path. - Fix BroadcastQuit bug: was inserting N separate message rows (one per recipient); now uses FanOut pattern with 1 InsertMessage + N EnqueueToSession calls. - Fix README: IRC listener is enabled by default on :6667, not disabled. Remove redundant -e IRC_LISTEN_ADDR from Docker example. - Add EXPOSE 6667 to Dockerfile alongside existing HTTP port. - Add service layer unit tests (JoinChannel, PartChannel, SendChannelMessage, FanOut, BroadcastQuit, moderated channel). - Update handler test setup to provide Service instance. - Use constant-time comparison in Oper credential validation to prevent timing attacks. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
14
README.md
14
README.md
@@ -2252,17 +2252,15 @@ neoirc includes an optional traditional IRC wire protocol listener (RFC
|
||||
backward compatibility with existing IRC clients like irssi, weechat, hexchat,
|
||||
and others.
|
||||
|
||||
### Enabling
|
||||
### Configuration
|
||||
|
||||
Set the `IRC_LISTEN_ADDR` environment variable to a TCP address:
|
||||
The IRC listener is **enabled by default** on `:6667`. To disable it, set
|
||||
`IRC_LISTEN_ADDR` to an empty string:
|
||||
|
||||
```bash
|
||||
IRC_LISTEN_ADDR=:6667
|
||||
IRC_LISTEN_ADDR=
|
||||
```
|
||||
|
||||
When unset or empty, the IRC listener is disabled and only the HTTP/JSON API is
|
||||
available.
|
||||
|
||||
### Supported Commands
|
||||
|
||||
| Category | Commands |
|
||||
@@ -2297,13 +2295,13 @@ connected via the HTTP API can communicate in the same channels seamlessly.
|
||||
|
||||
### Docker Usage
|
||||
|
||||
To expose the IRC port in Docker:
|
||||
To expose the IRC port in Docker (the listener is enabled by default on
|
||||
`:6667`):
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
-p 8080:8080 \
|
||||
-p 6667:6667 \
|
||||
-e IRC_LISTEN_ADDR=:6667 \
|
||||
-v neoirc-data:/var/lib/neoirc \
|
||||
neoirc
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user