mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	Use notary library for trusted image fetch and signing
Add a trusted flag to force the cli to resolve a tag into a digest via the notary trust library and pull by digest. On push the flag the trust flag will indicate the digest and size of a manifest should be signed and push to a notary server. If a tag is given, the cli will resolve the tag into a digest and pull by digest. After pulling, if a tag is given the cli makes a request to tag the image. Use certificate directory for notary requests Read certificates using same logic used by daemon for registry requests. Catch JSON syntax errors from Notary client When an uncaught error occurs in Notary it may show up in Docker as a JSON syntax error, causing a confusing error message to the user. Provide a generic error when a JSON syntax error occurs. Catch expiration errors and wrap in additional context. Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
This commit is contained in:
		
							parent
							
								
									f5a4a8da15
								
							
						
					
					
						commit
						ed13c3abfb
					
				
					 15 changed files with 759 additions and 78 deletions
				
			
		
							
								
								
									
										68
									
								
								registry/reference.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								registry/reference.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,68 @@
 | 
			
		|||
package registry
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/distribution/digest"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Reference represents a tag or digest within a repository
 | 
			
		||||
type Reference interface {
 | 
			
		||||
	// HasDigest returns whether the reference has a verifiable
 | 
			
		||||
	// content addressable reference which may be considered secure.
 | 
			
		||||
	HasDigest() bool
 | 
			
		||||
 | 
			
		||||
	// ImageName returns an image name for the given repository
 | 
			
		||||
	ImageName(string) string
 | 
			
		||||
 | 
			
		||||
	// Returns a string representation of the reference
 | 
			
		||||
	String() string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type tagReference struct {
 | 
			
		||||
	tag string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (tr tagReference) HasDigest() bool {
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (tr tagReference) ImageName(repo string) string {
 | 
			
		||||
	return repo + ":" + tr.tag
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (tr tagReference) String() string {
 | 
			
		||||
	return tr.tag
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type digestReference struct {
 | 
			
		||||
	digest digest.Digest
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (dr digestReference) HasDigest() bool {
 | 
			
		||||
	return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (dr digestReference) ImageName(repo string) string {
 | 
			
		||||
	return repo + "@" + dr.String()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (dr digestReference) String() string {
 | 
			
		||||
	return dr.digest.String()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParseReference parses a reference into either a digest or tag reference
 | 
			
		||||
func ParseReference(ref string) Reference {
 | 
			
		||||
	if strings.Contains(ref, ":") {
 | 
			
		||||
		dgst, err := digest.ParseDigest(ref)
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			return digestReference{digest: dgst}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return tagReference{tag: ref}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DigestReference creates a digest reference using a digest
 | 
			
		||||
func DigestReference(dgst digest.Digest) Reference {
 | 
			
		||||
	return digestReference{digest: dgst}
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue