diff --git a/cmd/africastalking/main.go b/cmd/africastalking/main.go index c5016dc..be34b7f 100644 --- a/cmd/africastalking/main.go +++ b/cmd/africastalking/main.go @@ -232,7 +232,7 @@ func main() { rp := &atRequestParser{} bsh := handlers.NewBaseSessionHandler(cfg, rs, stateStore, userdataStore, rp, hl) - sh := httpserver.ToSessionHandler(bsh) + sh := httpserver.ToSessionHandler(bsh, httpserver.WithAtOutput()) s := &http.Server{ Addr: fmt.Sprintf("%s:%s", host, strconv.Itoa(int(port))), Handler: sh, diff --git a/internal/http/server.go b/internal/http/server.go index af5413a..964d23b 100644 --- a/internal/http/server.go +++ b/internal/http/server.go @@ -43,14 +43,30 @@ func(rp *DefaultRequestParser) GetInput(rq any) ([]byte, error) { return v, nil } -type SessionHandler struct { - handlers.RequestHandler + + +type SessionHandlerOption func(*SessionHandler) + +func WithAtOutput() SessionHandlerOption { + return func(sh *SessionHandler) { + sh.useAtOutput = true + } } -func ToSessionHandler(h handlers.RequestHandler) *SessionHandler { - return &SessionHandler{ +type SessionHandler struct { + handlers.RequestHandler + useAtOutput bool +} + +func ToSessionHandler(h handlers.RequestHandler, opts ...SessionHandlerOption) *SessionHandler { + sh := &SessionHandler{ RequestHandler: h, + useAtOutput: false, } + for _, opt := range opts { + opt(sh) + } + return sh } func(f *SessionHandler) writeError(w http.ResponseWriter, code int, err error) { @@ -108,7 +124,11 @@ func(f *SessionHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { w.WriteHeader(200) w.Header().Set("Content-Type", "text/plain") - rqs, err = f.Output(rqs) + if f.useAtOutput { + rqs, err = f.AtOutput(rqs) + } else { + rqs, err = f.Output(rqs) + } if err != nil { f.writeError(w, 500, err) return