mirror of
				https://github.com/distribution/distribution.git
				synced 2025-10-31 01:12:48 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package auth
 | |
| 
 | |
| import (
 | |
| 	"net/http"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| // APIVersion represents a version of an API including its
 | |
| // type and version number.
 | |
| type APIVersion struct {
 | |
| 	// Type refers to the name of a specific API specification
 | |
| 	// such as "registry"
 | |
| 	Type string
 | |
| 
 | |
| 	// Version is the version of the API specification implemented,
 | |
| 	// This may omit the revision number and only include
 | |
| 	// the major and minor version, such as "2.0"
 | |
| 	Version string
 | |
| }
 | |
| 
 | |
| // String returns the string formatted API Version
 | |
| func (v APIVersion) String() string {
 | |
| 	return v.Type + "/" + v.Version
 | |
| }
 | |
| 
 | |
| // APIVersions gets the API versions out of an HTTP response using the provided
 | |
| // version header as the key for the HTTP header.
 | |
| func APIVersions(resp *http.Response, versionHeader string) []APIVersion {
 | |
| 	versions := []APIVersion{}
 | |
| 	if versionHeader != "" {
 | |
| 		for _, supportedVersions := range resp.Header[http.CanonicalHeaderKey(versionHeader)] {
 | |
| 			for _, version := range strings.Fields(supportedVersions) {
 | |
| 				versions = append(versions, ParseAPIVersion(version))
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	return versions
 | |
| }
 | |
| 
 | |
| // ParseAPIVersion parses an API version string into an APIVersion
 | |
| // Format (Expected, not enforced):
 | |
| // API version string = <API type> '/' <API version>
 | |
| // API type = [a-z][a-z0-9]*
 | |
| // API version = [0-9]+(\.[0-9]+)?
 | |
| // TODO(dmcgowan): Enforce format, add error condition, remove unknown type
 | |
| func ParseAPIVersion(versionStr string) APIVersion {
 | |
| 	idx := strings.IndexRune(versionStr, '/')
 | |
| 	if idx == -1 {
 | |
| 		return APIVersion{
 | |
| 			Type:    "unknown",
 | |
| 			Version: versionStr,
 | |
| 		}
 | |
| 	}
 | |
| 	return APIVersion{
 | |
| 		Type:    strings.ToLower(versionStr[:idx]),
 | |
| 		Version: versionStr[idx+1:],
 | |
| 	}
 | |
| }
 |