aboutsummaryrefslogtreecommitdiff
path: root/forged/internal/unsorted/lmtp_server.go
diff options
context:
space:
mode:
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: