github.com/mailgun/mailgun-go/v3@v3.6.4/mock_validation.go (about)

     1  package mailgun
     2  
     3  import (
     4  	"net/http"
     5  	"net/mail"
     6  	"strings"
     7  
     8  	"github.com/go-chi/chi"
     9  )
    10  
    11  func (ms *MockServer) addValidationRoutes(r chi.Router) {
    12  	r.Get("/address/validate", ms.validateEmail)
    13  	r.Get("/address/parse", ms.parseEmail)
    14  	r.Get("/address/private/validate", ms.validateEmail)
    15  	r.Get("/address/private/parse", ms.parseEmail)
    16  }
    17  
    18  func (ms *MockServer) validateEmail(w http.ResponseWriter, r *http.Request) {
    19  	if r.FormValue("address") == "" {
    20  		w.WriteHeader(http.StatusBadRequest)
    21  		toJSON(w, okResp{Message: "'address' parameter is required"})
    22  		return
    23  	}
    24  
    25  	var results EmailVerification
    26  	parts, err := mail.ParseAddress(r.FormValue("address"))
    27  	if err == nil {
    28  		results.IsValid = true
    29  		results.Parts.Domain = strings.Split(parts.Address, "@")[1]
    30  		results.Parts.LocalPart = strings.Split(parts.Address, "@")[0]
    31  		results.Parts.DisplayName = parts.Name
    32  	}
    33  	toJSON(w, results)
    34  }
    35  
    36  func (ms *MockServer) parseEmail(w http.ResponseWriter, r *http.Request) {
    37  	if r.FormValue("addresses") == "" {
    38  		w.WriteHeader(http.StatusBadRequest)
    39  		toJSON(w, okResp{Message: "'addresses' parameter is required"})
    40  		return
    41  	}
    42  
    43  	addresses := strings.Split(r.FormValue("addresses"), ",")
    44  
    45  	var results addressParseResult
    46  	for _, address := range addresses {
    47  		_, err := mail.ParseAddress(address)
    48  		if err != nil {
    49  			results.Unparseable = append(results.Unparseable, address)
    50  		} else {
    51  			results.Parsed = append(results.Parsed, address)
    52  		}
    53  	}
    54  	toJSON(w, results)
    55  }