53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
package v2
 | 
						|
 | 
						|
import (
 | 
						|
	"sync"
 | 
						|
 | 
						|
	"github.com/gorilla/mux"
 | 
						|
)
 | 
						|
 | 
						|
// The following are definitions of the name under which all V2 routes are
 | 
						|
// registered. These symbols can be used to look up a route based on the name.
 | 
						|
const (
 | 
						|
	RouteNameBase            = "base"
 | 
						|
	RouteNameManifest        = "manifest"
 | 
						|
	RouteNameTags            = "tags"
 | 
						|
	RouteNameBlob            = "blob"
 | 
						|
	RouteNameBlobUpload      = "blob-upload"
 | 
						|
	RouteNameBlobUploadChunk = "blob-upload-chunk"
 | 
						|
	RouteNameCatalog         = "catalog"
 | 
						|
)
 | 
						|
 | 
						|
var (
 | 
						|
	baseRouter           *mux.Router
 | 
						|
	createBaseRouterOnce sync.Once
 | 
						|
)
 | 
						|
 | 
						|
// Router builds a gorilla router with named routes for the various API
 | 
						|
// methods. This can be used directly by both server implementations and
 | 
						|
// clients.
 | 
						|
func Router() *mux.Router {
 | 
						|
	createBaseRouterOnce.Do(func() {
 | 
						|
		baseRouter = RouterWithPrefix("")
 | 
						|
	})
 | 
						|
	return baseRouter
 | 
						|
}
 | 
						|
 | 
						|
// RouterWithPrefix builds a gorilla router with a configured prefix
 | 
						|
// on all routes.
 | 
						|
func RouterWithPrefix(prefix string) *mux.Router {
 | 
						|
	rootRouter := mux.NewRouter()
 | 
						|
	router := rootRouter
 | 
						|
	if prefix != "" {
 | 
						|
		router = router.PathPrefix(prefix).Subrouter()
 | 
						|
	}
 | 
						|
 | 
						|
	router.StrictSlash(true)
 | 
						|
 | 
						|
	for _, descriptor := range routeDescriptors {
 | 
						|
		router.Path(descriptor.Path).Name(descriptor.Name)
 | 
						|
	}
 | 
						|
 | 
						|
	return rootRouter
 | 
						|
}
 |