2014-11-11 03:57:38 +01:00
|
|
|
package registry
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/http"
|
|
|
|
|
|
|
|
"github.com/gorilla/handlers"
|
|
|
|
)
|
|
|
|
|
|
|
|
// layerUploadDispatcher constructs and returns the layer upload handler for
|
|
|
|
// the given request context.
|
|
|
|
func layerUploadDispatcher(ctx *Context, r *http.Request) http.Handler {
|
|
|
|
layerUploadHandler := &layerUploadHandler{
|
|
|
|
Context: ctx,
|
|
|
|
TarSum: ctx.vars["tarsum"],
|
|
|
|
UUID: ctx.vars["uuid"],
|
|
|
|
}
|
|
|
|
|
|
|
|
layerUploadHandler.log = layerUploadHandler.log.WithField("tarsum", layerUploadHandler.TarSum)
|
|
|
|
|
|
|
|
if layerUploadHandler.UUID != "" {
|
|
|
|
layerUploadHandler.log = layerUploadHandler.log.WithField("uuid", layerUploadHandler.UUID)
|
|
|
|
}
|
|
|
|
|
|
|
|
return handlers.MethodHandler{
|
|
|
|
"POST": http.HandlerFunc(layerUploadHandler.StartLayerUpload),
|
|
|
|
"GET": http.HandlerFunc(layerUploadHandler.GetUploadStatus),
|
2014-11-19 04:38:14 +01:00
|
|
|
"HEAD": http.HandlerFunc(layerUploadHandler.GetUploadStatus),
|
2014-11-11 03:57:38 +01:00
|
|
|
"PUT": http.HandlerFunc(layerUploadHandler.PutLayerChunk),
|
|
|
|
"DELETE": http.HandlerFunc(layerUploadHandler.CancelLayerUpload),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// layerUploadHandler handles the http layer upload process.
|
|
|
|
type layerUploadHandler struct {
|
|
|
|
*Context
|
|
|
|
|
|
|
|
// TarSum is the unique identifier of the layer being uploaded.
|
|
|
|
TarSum string
|
|
|
|
|
|
|
|
// UUID identifies the upload instance for the current request.
|
|
|
|
UUID string
|
|
|
|
}
|
|
|
|
|
|
|
|
// StartLayerUpload begins the layer upload process and allocates a server-
|
|
|
|
// side upload session.
|
|
|
|
func (luh *layerUploadHandler) StartLayerUpload(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetUploadStatus returns the status of a given upload, identified by uuid.
|
|
|
|
func (luh *layerUploadHandler) GetUploadStatus(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// PutLayerChunk receives a layer chunk during the layer upload process,
|
|
|
|
// possible completing the upload with a checksum and length.
|
|
|
|
func (luh *layerUploadHandler) PutLayerChunk(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// CancelLayerUpload cancels an in-progress upload of a layer.
|
|
|
|
func (luh *layerUploadHandler) CancelLayerUpload(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
}
|