func (w *Worker) HandleDeleteReq(delReq *hkp.DeleteReq) { var allResults []*DeleteResult delres := new(DeleteResult) resKeys, err := w.LookupKeys(delReq.EmailToDelete, 2) if err == ErrKeyNotFound || len(resKeys) <= 0 { //No key found by Email log.Println("Not found by email,Search by Id = ", delReq.EmailToDelete) foundKey, err1 := w.LookupKey(delReq.EmailToDelete) //Find by ID if err1 == nil && foundKey != nil { resKeys = append(resKeys, foundKey) } else { err = err1 } //fmt.Println(err) } //Handling OTL verified when multiple keys with same email is to be deleted. //OTL handeler will set delreq.KeyID to get unique key if delReq.KeyID != "" { fmt.Println("Search by delReq.KeyID = ", delReq.KeyID) foundKey, err1 := w.LookupKey(delReq.KeyID) //Find by ID if err1 == nil && foundKey != nil { resKeys = nil resKeys = append(resKeys, foundKey) } err = err1 //fmt.Println(err) } if err == ErrKeyNotFound || len(resKeys) <= 0 { //No key found delres.DeleteMessage = "No such key found on the server." delres.Email = "" } else if err == ErrTooManyResponses || len(resKeys) > 1 { delres.DeleteMessage = "Please type full e-mail and try again" delres.Email = "" } else if err != nil { delres.DeleteMessage = err.Error() } else { //Key Found,Formulate veri_data uIds := resKeys[0].UserIds() if len(uIds) > 0 { delres.Email = uIds[0].UserId.Email } //delres.DeleteMessage = fmt.Sprintf("Key Found For E-mail %s \nA verification link has been sent to above E-mail address.The link will expire in %d day/s. Please Check your email.", // delres.Email, ExpInDays) //First Check weather we are the authority for it ownAuth, err1 := GetOwnAuthority() if err1 != nil { delres.Email = delres.Email delres.DeleteMessage = "Couldnt Get Own Authority" allResults = append(allResults, delres) delReq.Response() <- &DeleteResponse{DeleteResults: allResults} return } underAuth := false email1 := delres.Email splits := strings.Split(email1, "@") domain := splits[len(splits)-1] msg := "Sorry. You can Delete keys of the following domains only : " for _, dom := range ownAuth.DomainsUnderAuth { msg += dom + " " if dom == domain { underAuth = true break } } if underAuth == false { //Check by explicit Auths err = GetExplicitAuths(email1) if err == nil { underAuth = true } } if underAuth == false { delres.Email = delReq.EmailToDelete delres.DeleteMessage = msg allResults = append(allResults, delres) delReq.Response() <- &DeleteResponse{DeleteResults: allResults} return } //Checked weather its under our own authority pubKeyToDelete := resKeys[0] isVerified, otlState := w.Verify(delres.Email, "", *pubKeyToDelete, int16(2)) fmt.Println("prc_delete.go:Is Request Verified??: ", isVerified) if isVerified { if _, err = w.Begin(); err != nil { log.Println("Delete", err) delres.Email = delres.Email delres.DeleteMessage = "Unfortunately we couldn't delete the requested key.Please try again later with new request." allResults = append(allResults, delres) delReq.Response() <- &DeleteResponse{DeleteResults: allResults} return } change, err1 := w.deleteKey(pubKeyToDelete) if err = w.Commit(); err != nil { log.Println("Delete", err) delres.Email = delres.Email delres.DeleteMessage = "Unfortunately we couldn't delete the requested key.Please try again later with new request." allResults = append(allResults, delres) delReq.Response() <- &DeleteResponse{DeleteResults: allResults} return } if err1 != nil { delres.DeleteMessage = "Unfortunately we couldn't delete the requested key.Please try again later with new request." } else { delres.DeleteMessage = "Successfully Deleted key." w.notifyChange(&change) } } else { if otlState == OTLNewOtlMade { delres.DeleteMessage = fmt.Sprintf("Key Found For E-mail %s \nA verification link has been sent to above E-mail address.The link will expire in %d day/s. Please Check your email.", delres.Email, ExpInDays) //fmt.Println("OTL NOT FOUND!!") } else if otlState == OTLExpired { delres.DeleteMessage = fmt.Sprintf("The link you have clicked has expired. Please submit your key again.") //fmt.Println("OTL Expired!!") } else if otlState == OTLNotVerified { delres.DeleteMessage = fmt.Sprintf("A request for same key has already been made.Please Check your email %s", delres.Email) //fmt.Println("OTL Not Verified!!") } else if otlState == ErrorSendingMail { delres.DeleteMessage = fmt.Sprintf("Unfortunately we were unable to send an e-mail to %s Please try after sometime with new request", delres) } } } allResults = append(allResults, delres) delReq.Response() <- &DeleteResponse{DeleteResults: allResults} //a.Response() <- &AddResponse{Changes: changes, Errors: readErrors} return }