in capi/capi.go [198:248]
func verifyFromCCADB(resp http.ResponseWriter, _ *http.Request) {
defer func() {
if err := recover(); err != nil {
log.Error(err)
}
}()
report, err := ccadb.NewReport()
if err != nil {
resp.WriteHeader(500)
resp.Write([]byte(err.Error()))
return
}
ret := make(chan model.TestWebsiteResult, 30)
work := make(chan ccadb.Record, len(report.Records))
for _, record := range report.Records {
work <- record
}
close(work)
wg := sync.WaitGroup{}
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for record := range work {
root := record.Root()
ret <- test(record.TestWebsiteValid(), root, service.Valid)
ret <- test(record.TestWebsiteExpired(), root, service.Expired)
ret <- test(record.TestWebsiteRevoked(), root, service.Revoked)
}
}()
}
go func() {
wg.Wait()
close(ret)
}()
resp.Write([]byte{'['})
jsonResp := json.NewEncoder(resp)
jsonResp.SetIndent("", " ")
i := 0
for answer := range ret {
i++
jsonResp.Encode(answer)
if i < len(report.Records)*3 {
resp.Write([]byte{','})
}
if flusher, ok := resp.(http.Flusher); ok {
flusher.Flush()
}
}
resp.Write([]byte{']'})
}