aboutsummaryrefslogtreecommitdiff
path: root/forged/internal/unsorted/lmtp_server.go
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-09-25 08:23:20 +0800
committerRunxi Yu <me@runxiyu.org>2025-09-25 08:23:20 +0800
commit98b250df38ca82f08ad0b6ee19eace3dfb182ede (patch)
tree0aa9621edf1dcd262fd95bd73bb469c122007bde /forged/internal/unsorted/lmtp_server.go
parentUpdate README (diff)
downloadforge-98b250df38ca82f08ad0b6ee19eace3dfb182ede.tar.gz
forge-98b250df38ca82f08ad0b6ee19eace3dfb182ede.tar.zst
forge-98b250df38ca82f08ad0b6ee19eace3dfb182ede.zip
Mailing lists: implement sub/unsub
Diffstat (limited to 'forged/internal/unsorted/lmtp_server.go')
-rw-r--r--forged/internal/unsorted/lmtp_server.go29
1 files changed, 27 insertions, 2 deletions
diff --git a/forged/internal/unsorted/lmtp_server.go b/forged/internal/unsorted/lmtp_server.go
index e1f3cab..4e92c23 100644
--- a/forged/internal/unsorted/lmtp_server.go
+++ b/forged/internal/unsorted/lmtp_server.go
@@ -185,8 +185,33 @@ func (session *lmtpSession) Data(r io.Reader) error {
goto end
}
case "lists":
- if err = session.s.lmtpHandleMailingList(session, groupPath, moduleName, email, data, from); err != nil {
- slog.Error("error handling mailing list message", "error", err)
+ var moduleAction string
+ if len(segments) > sepIndex+3 {
+ moduleAction = segments[sepIndex+3]
+ if len(segments) > sepIndex+4 {
+ err = errors.New("too many path segments for mailing list command")
+ goto end
+ }
+ }
+
+ switch moduleAction {
+ case "":
+ if err = session.s.lmtpHandleMailingList(session, groupPath, moduleName, email, data, from); err != nil {
+ slog.Error("error handling mailing list message", "error", err)
+ goto end
+ }
+ case "subscribe":
+ if err = session.s.lmtpHandleMailingListSubscribe(session, groupPath, moduleName, from); err != nil {
+ slog.Error("error handling mailing list subscribe", "error", err)
+ goto end
+ }
+ case "unsubscribe":
+ if err = session.s.lmtpHandleMailingListUnsubscribe(session, groupPath, moduleName, from); err != nil {
+ slog.Error("error handling mailing list unsubscribe", "error", err)
+ goto end
+ }
+ default:
+ err = fmt.Errorf("unsupported mailing list command: %q", moduleAction)
goto end
}
default: