package main import ( "log" "net" "reflect" "strings" ) func (vD VirtualDomain) DomainExists() bool { query := Db.Where("name = ?", vD.Name).Find(&vD) if query.Error != nil { log.Println(query.Error) return false } if vD.Name == "" { return false } return true } func (vD VirtualDomain) CreateDomain() bool { if !Db.Debug().NewRecord(vD) { log.Println("Creating new record failed.", vD.Name) return false } query := Db.Debug().Create(&vD) if query.Error != nil { log.Println(query.Error) return false } return true } func (vD VirtualDomain) ValidateDomain(ref string) bool { log.Println("Validating " + vD.Name) if vD.Name == "" { return false } addr, err := net.LookupIP(vD.Name) if err != nil { log.Println(vD.Name + " " + err.Error()) return false } if len(addr) == 0 { return false } serverIP, err := net.LookupIP(ref) if err != nil { log.Println(ref + " " + err.Error()) return false } return reflect.DeepEqual(serverIP, addr) } func (vD VirtualDomain) ValidateDomainMX(ref string) bool { log.Println("Validating MX " + vD.Name) if vD.Name == "" { log.Println("Empty domain.") return false } mx, err := net.LookupMX(vD.Name) if err != nil { log.Println("Lookup error " + vD.Name + " " + err.Error()) return false } match := false serverIP, err := net.LookupIP(ref) if err != nil { log.Println("Lookup error for server " + ref + " " + err.Error()) return false } for _, v := range mx { mxIP, err := net.LookupIP(v.Host) if err != nil { log.Println(err) } if reflect.DeepEqual(serverIP, mxIP) { match = true } } return match } func GetDomain(email string) string { fragments := strings.Split(email, "@") return fragments[len(fragments)-1] } func (vD VirtualDomain) GetPrimaryKey() int64 { Db.Find(&vD) return vD.Id }