func()

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
}