in go/storage/certdatabase.go [117:153]
func (db *CertDatabase) GetIssuerAndDatesFromChannel(reader <-chan string) ([]types.IssuerDate, error) {
// The channel entries are strings of the form "serials::<date>::<issuer id>".
// We gather these by issuer to obtain a list of the form
// [(issuer 1, [date 1, date 2, ...]), (issuer 2, [...]), ...].
issuerMap := make(map[string]types.IssuerDate)
for entry := range reader {
parts := strings.Split(entry, "::")
if len(parts) != 3 {
return []types.IssuerDate{}, fmt.Errorf("Unexpected key format: %s", entry)
}
issuer := types.NewIssuerFromString(parts[2])
expDate, err := types.NewExpDate(parts[1])
if err != nil {
glog.Warningf("Couldn't parse expiration date %s: %s", entry, err)
continue
}
_, ok := issuerMap[issuer.ID()]
if !ok {
issuerMap[issuer.ID()] = types.IssuerDate{
Issuer: issuer,
ExpDates: make([]types.ExpDate, 0),
}
}
tmp := issuerMap[issuer.ID()]
tmp.ExpDates = append(tmp.ExpDates, expDate)
issuerMap[issuer.ID()] = tmp
}
issuerList := make([]types.IssuerDate, 0, len(issuerMap))
for _, v := range issuerMap {
issuerList = append(issuerList, v)
}
return issuerList, nil
}