45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package controllers
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/go-playground/validator/v10"
|
|
|
|
"GoMembership/internal/services"
|
|
"GoMembership/pkg/logger"
|
|
)
|
|
|
|
type ContactController struct {
|
|
EmailService *services.EmailService
|
|
}
|
|
type contactData struct {
|
|
email string `validate:"required,email"`
|
|
name string
|
|
message string `validate:"required"`
|
|
}
|
|
|
|
func (cc *ContactController) RelayContactRequest(c *gin.Context) {
|
|
var msgData contactData
|
|
if c.Query("username") != "" {
|
|
// A bot is talking to us
|
|
return
|
|
}
|
|
msgData.name = c.Query("name")
|
|
msgData.email = c.Query("email")
|
|
msgData.message = c.Query("message")
|
|
|
|
validate := validator.New()
|
|
if err := validate.Struct(msgData); err != nil {
|
|
logger.Error.Printf("Couldn't validate contact form data: %v", err)
|
|
c.JSON(http.StatusNotAcceptable, gin.H{"error": "Couldn't validate contact form data"})
|
|
}
|
|
|
|
if err := cc.EmailService.RelayContactFormMessage(&msgData.email, &msgData.name, &msgData.message); err != nil {
|
|
logger.Error.Printf("Couldn't send contact message mail: %v", err)
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "Couldn't send mail"})
|
|
}
|
|
c.JSON(http.StatusOK, "Your message has been sent")
|
|
}
|