diff options
author | Runxi Yu <me@runxiyu.org> | 2025-09-25 08:23:20 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-09-25 08:23:20 +0800 |
commit | 98b250df38ca82f08ad0b6ee19eace3dfb182ede (patch) | |
tree | 0aa9621edf1dcd262fd95bd73bb469c122007bde /forged/internal/unsorted/lmtp_server.go | |
parent | Update README (diff) | |
download | forge-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.go | 29 |
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: |