Files
sxchnge/backend/pkg/merrors/signup_email_policy.go
T

79 lines
1.8 KiB
Go

package merrors
import (
"errors"
"strings"
)
const (
SignupEmailPolicyCode = "signup_email_rejected"
SignupEmailPolicyReasonInvalidEmail = "invalid_email"
SignupEmailPolicyReasonDisposableDomain = "disposable_domain"
SignupEmailPolicyReasonFreeDomain = "free_domain"
)
var ErrSignupEmailPolicyRejected = Define(SignupEmailPolicyCode)
type SignupEmailPolicyError struct {
reason string
domain string
}
func NormalizeSignupEmailPolicyReason(reason string) string {
switch strings.TrimSpace(reason) {
case SignupEmailPolicyReasonInvalidEmail:
return SignupEmailPolicyReasonInvalidEmail
case SignupEmailPolicyReasonDisposableDomain:
return SignupEmailPolicyReasonDisposableDomain
case SignupEmailPolicyReasonFreeDomain:
return SignupEmailPolicyReasonFreeDomain
default:
return SignupEmailPolicyReasonInvalidEmail
}
}
func IsSignupEmailPolicyReason(reason string) bool {
return strings.TrimSpace(reason) == NormalizeSignupEmailPolicyReason(reason)
}
func (e *SignupEmailPolicyError) Error() string {
if e == nil || e.reason == "" {
return SignupEmailPolicyCode
}
return SignupEmailPolicyCode + ": " + e.reason
}
func (e *SignupEmailPolicyError) Unwrap() error {
return ErrSignupEmailPolicyRejected
}
func (e *SignupEmailPolicyError) Reason() string {
if e == nil {
return ""
}
return strings.TrimSpace(e.reason)
}
func (e *SignupEmailPolicyError) Domain() string {
if e == nil {
return ""
}
return strings.TrimSpace(e.domain)
}
func SignupEmailPolicyRejected(reason, domain string) error {
return &SignupEmailPolicyError{
reason: NormalizeSignupEmailPolicyReason(reason),
domain: strings.TrimSpace(domain),
}
}
func AsSignupEmailPolicyError(err error) (*SignupEmailPolicyError, bool) {
var policyErr *SignupEmailPolicyError
if errors.As(err, &policyErr) && policyErr != nil {
return policyErr, true
}
return nil, false
}