aggregate all signers for a "released" hash+tagname pair. To be "released," the tag must have been signed into the "targets" or "targets/releases" role. Output is sorted by tag name
(allTargets []client.TargetSignedStruct)
| 141 | // aggregate all signers for a "released" hash+tagname pair. To be "released," the tag must have been |
| 142 | // signed into the "targets" or "targets/releases" role. Output is sorted by tag name |
| 143 | func matchReleasedSignatures(allTargets []client.TargetSignedStruct) []trustTagRow { |
| 144 | signatureRows := []trustTagRow{} |
| 145 | // do a first pass to get filter on tags signed into "targets" or "targets/releases" |
| 146 | releasedTargetRows := map[trustTagKey][]string{} |
| 147 | for _, tgt := range allTargets { |
| 148 | if isReleasedTarget(tgt.Role.Name) { |
| 149 | releasedKey := trustTagKey{tgt.Target.Name, hex.EncodeToString(tgt.Target.Hashes[notary.SHA256])} |
| 150 | releasedTargetRows[releasedKey] = []string{} |
| 151 | } |
| 152 | } |
| 153 | |
| 154 | // now fill out all signers on released keys |
| 155 | for _, tgt := range allTargets { |
| 156 | targetKey := trustTagKey{tgt.Target.Name, hex.EncodeToString(tgt.Target.Hashes[notary.SHA256])} |
| 157 | // only considered released targets |
| 158 | if _, ok := releasedTargetRows[targetKey]; ok && !isReleasedTarget(tgt.Role.Name) { |
| 159 | releasedTargetRows[targetKey] = append(releasedTargetRows[targetKey], notaryRoleToSigner(tgt.Role.Name)) |
| 160 | } |
| 161 | } |
| 162 | |
| 163 | // compile the final output as a sorted slice |
| 164 | for targetKey, signers := range releasedTargetRows { |
| 165 | signatureRows = append(signatureRows, trustTagRow{targetKey, signers}) |
| 166 | } |
| 167 | sort.Slice(signatureRows, func(i, j int) bool { |
| 168 | return sortorder.NaturalLess(signatureRows[i].SignedTag, signatureRows[j].SignedTag) |
| 169 | }) |
| 170 | return signatureRows |
| 171 | } |
| 172 | |
| 173 | // authResolver returns an auth resolver function from a [config.Provider]. |
| 174 | func authResolver(dockerCLI config.Provider) func(ctx context.Context, index *registrytypes.IndexInfo) registrytypes.AuthConfig { |
searching dependent graphs…