56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
|
package mailgun
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
"net/mail"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/go-chi/chi"
|
||
|
)
|
||
|
|
||
|
func (ms *MockServer) addValidationRoutes(r chi.Router) {
|
||
|
r.Get("/address/validate", ms.validateEmail)
|
||
|
r.Get("/address/parse", ms.parseEmail)
|
||
|
r.Get("/address/private/validate", ms.validateEmail)
|
||
|
r.Get("/address/private/parse", ms.parseEmail)
|
||
|
}
|
||
|
|
||
|
func (ms *MockServer) validateEmail(w http.ResponseWriter, r *http.Request) {
|
||
|
if r.FormValue("address") == "" {
|
||
|
w.WriteHeader(http.StatusBadRequest)
|
||
|
toJSON(w, okResp{Message: "'address' parameter is required"})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
var results EmailVerification
|
||
|
parts, err := mail.ParseAddress(r.FormValue("address"))
|
||
|
if err == nil {
|
||
|
results.IsValid = true
|
||
|
results.Parts.Domain = strings.Split(parts.Address, "@")[1]
|
||
|
results.Parts.LocalPart = strings.Split(parts.Address, "@")[0]
|
||
|
results.Parts.DisplayName = parts.Name
|
||
|
}
|
||
|
toJSON(w, results)
|
||
|
}
|
||
|
|
||
|
func (ms *MockServer) parseEmail(w http.ResponseWriter, r *http.Request) {
|
||
|
if r.FormValue("addresses") == "" {
|
||
|
w.WriteHeader(http.StatusBadRequest)
|
||
|
toJSON(w, okResp{Message: "'addresses' parameter is required"})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
addresses := strings.Split(r.FormValue("addresses"), ",")
|
||
|
|
||
|
var results addressParseResult
|
||
|
for _, address := range addresses {
|
||
|
_, err := mail.ParseAddress(address)
|
||
|
if err != nil {
|
||
|
results.Unparseable = append(results.Unparseable, address)
|
||
|
} else {
|
||
|
results.Parsed = append(results.Parsed, address)
|
||
|
}
|
||
|
}
|
||
|
toJSON(w, results)
|
||
|
}
|