71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"git.s.int/packages/go/email-api/client"
|
|
"github.com/go-playground/validator"
|
|
"github.com/labstack/echo/v4"
|
|
"github.com/labstack/echo/v4/middleware"
|
|
"html/template"
|
|
"net/http"
|
|
)
|
|
|
|
type Message struct {
|
|
Name string `json:"name" validate:"required"`
|
|
Email string `json:"email" validate:"required,email"`
|
|
Phone string `json:"phone"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
type CustomValidator struct {
|
|
validator *validator.Validate
|
|
}
|
|
|
|
func (cv *CustomValidator) Validate(i interface{}) error {
|
|
if err := cv.validator.Struct(i); err != nil {
|
|
return echo.NewHTTPError(http.StatusBadRequest, err.Error())
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func main() {
|
|
e := echo.New()
|
|
e.Validator = &CustomValidator{validator: validator.New()}
|
|
e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
|
|
AllowOrigins: []string{"http://localhost:5173", "https://bacfrederick.com"},
|
|
AllowHeaders: []string{echo.HeaderOrigin, echo.HeaderContentType, echo.HeaderAccept},
|
|
}))
|
|
|
|
e.POST("/email-request", func(c echo.Context) error {
|
|
config := client.ConfigFromEnv()
|
|
apiClient := client.NewClient(config)
|
|
request := new(client.EmailRequest)
|
|
request.Source = "no-reply@bacfrederick.com"
|
|
request.Message.Subject.Data = "New Request"
|
|
request.Destination.ToAddresses = append(request.Destination.ToAddresses, "membership@bacfrederick.com")
|
|
|
|
t, err := template.ParseFiles("templates/request.gohtml")
|
|
message := new(Message)
|
|
if err = c.Bind(message); err != nil {
|
|
return echo.NewHTTPError(http.StatusBadRequest, err.Error())
|
|
}
|
|
if err = c.Validate(message); err != nil {
|
|
return err
|
|
}
|
|
|
|
messageContent := bytes.NewBuffer(make([]byte, 0))
|
|
_ = t.Execute(messageContent, message)
|
|
|
|
request.Message.Body.Html.Data = messageContent.String()
|
|
|
|
email, err := apiClient.SendEmail(request)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return c.String(http.StatusOK, email.Id)
|
|
})
|
|
|
|
e.Logger.Fatal(e.Start(":8080"))
|
|
}
|