diff options
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: |