func (edb *EntriesDatabase) getOrInsertName(txn *gorp.Transaction, fqdn string) (uint64, error) { var nameId uint64 err := txn.SelectOne(&nameId, "SELECT nameID FROM fqdn WHERE name = ? LIMIT 1", fqdn) if err != nil { // Didn't exist, so let's insert it fqdnObj := &FQDN{ Name: fqdn, } err = txn.Insert(fqdnObj) if err != nil { return 0, err } nameId = fqdnObj.NameID // Add to netscan queue queueObj := &NetscanQueue{ NameID: nameId, TimeAdded: time.Now(), } err = txn.Insert(queueObj) if err != nil { return 0, err } } if nameId == 0 { err = fmt.Errorf("Failed to obtain NameID") } return nameId, err }
func (edb *EntriesDatabase) insertRegisteredDomains(txn *gorp.Transaction, certId uint64, names map[string]struct{}) error { domains := make(map[string]struct{}) for name, _ := range names { domain, err := publicsuffix.EffectiveTLDPlusOne(name) if err != nil { // This is non-critical. We'd rather have the cert with an incomplete // eTLD, so mask this error if edb.Verbose { fmt.Printf("%s\n", err) } continue } domains[domain] = struct{}{} } for domain, _ := range domains { etld, _ := publicsuffix.PublicSuffix(domain) label := strings.Replace(domain, "."+etld, "", 1) var regdomId uint64 err := txn.SelectOne(®domId, "SELECT regdomID FROM registereddomain WHERE domain = ? LIMIT 1", domain) if err != nil { domainObj := &RegisteredDomain{ Domain: domain, ETLD: etld, Label: label, } // Ignore errors on insert err := txn.Insert(domainObj) if errorIsNotDuplicate(err) { return fmt.Errorf("DB error on Registered Domain: %s: %s", domain, err) } regdomId = domainObj.RegDomID } certRegDomObj := &CertToRegisteredDomain{ RegDomID: regdomId, CertID: certId, } // Ignore errors on insert err = txn.Insert(certRegDomObj) if errorIsNotDuplicate(err) { return fmt.Errorf("DB error on Registered Domain: %s: %s", domain, err) } } return nil }