mirror of
https://github.com/1f349/lotus.git
synced 2024-09-19 19:26:28 +01:00
59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/1f349/primrose/imap"
|
|
"github.com/1f349/primrose/smtp"
|
|
"github.com/julienschmidt/httprouter"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
type Conf struct {
|
|
Listen string `yaml:"listen"`
|
|
}
|
|
|
|
func SetupApiServer(conf Conf, send *smtp.Smtp, recv *imap.Imap) *http.Server {
|
|
r := httprouter.New()
|
|
|
|
// smtp
|
|
r.POST("/message", func(rw http.ResponseWriter, req *http.Request, params httprouter.Params) {
|
|
// check body exists
|
|
if req.Body == nil {
|
|
rw.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
// parse json body
|
|
var j smtp.Json
|
|
err := json.NewDecoder(req.Body).Decode(&j)
|
|
if err != nil {
|
|
rw.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
mail, err := j.PrepareMail()
|
|
if err != nil {
|
|
rw.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
if send.Send(mail) != nil {
|
|
rw.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
rw.WriteHeader(http.StatusAccepted)
|
|
})
|
|
|
|
return &http.Server{
|
|
Addr: conf.Listen,
|
|
Handler: r,
|
|
ReadTimeout: time.Minute,
|
|
ReadHeaderTimeout: time.Minute,
|
|
WriteTimeout: time.Minute,
|
|
IdleTimeout: time.Minute,
|
|
MaxHeaderBytes: 2500,
|
|
}
|
|
}
|