package models import ( "errors" "time" emailverifier "github.com/AfterShip/email-verifier" "gorm.io/gorm" ) func init() { registerModel(&User{}) } type User struct { gorm.Model FirstName string LastName string Email string `gorm:"unique"` PasswordHash string Role string PublicKeys []PublicKey APIKeys []APIKey Uploads []Upload LastLogin *time.Time LastLoginIP string OTPEnabled bool `gorm:"default:false;"` OTPVerified bool `gorm:"default:false;"` OTPSecret string OTPAuthUrl string Verified bool `gorm:"default:false;"` EmailVerifications []EmailVerification PasswordResets []PasswordReset } func (u *User) BeforeUpdate(tx *gorm.DB) error { if tx.Statement.Changed("Email") { verify, err := getEmailVerfier().Verify(u.Email) if err != nil { return err } if !verify.Syntax.Valid { return errors.New("email is invalid") } } return nil } func getEmailVerfier() *emailverifier.Verifier { verifier := emailverifier.NewVerifier() verifier.DisableSMTPCheck() verifier.DisableGravatarCheck() verifier.DisableDomainSuggest() verifier.DisableAutoUpdateDisposable() return verifier }