Refactoring cloudfactory layer handler into a more generic storage
middleware concept. This also breaks the dependency the storage package had on goamz Signed-off-by: David Lawrence <david.lawrence@docker.com> (github: endophage)
This commit is contained in:
@@ -1,13 +1,14 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/docker/distribution"
|
||||
"github.com/docker/distribution/digest"
|
||||
)
|
||||
|
||||
// layerReadSeeker implements Layer and provides facilities for reading and
|
||||
// LayerRead implements Layer and provides facilities for reading and
|
||||
// seeking.
|
||||
type layerReader struct {
|
||||
fileReader
|
||||
@@ -17,6 +18,10 @@ type layerReader struct {
|
||||
|
||||
var _ distribution.Layer = &layerReader{}
|
||||
|
||||
func (lrs *layerReader) Path() string {
|
||||
return lrs.path
|
||||
}
|
||||
|
||||
func (lrs *layerReader) Digest() digest.Digest {
|
||||
return lrs.digest
|
||||
}
|
||||
@@ -33,3 +38,12 @@ func (lrs *layerReader) CreatedAt() time.Time {
|
||||
func (lrs *layerReader) Close() error {
|
||||
return lrs.closeWithErr(distribution.ErrLayerClosed)
|
||||
}
|
||||
|
||||
func (lrs *layerReader) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Docker-Content-Digest", lrs.digest.String())
|
||||
|
||||
if url, err := lrs.fileReader.driver.URLFor(lrs.Path(), map[string]interface{}{}); err == nil {
|
||||
http.Redirect(w, r, url, http.StatusTemporaryRedirect)
|
||||
}
|
||||
http.ServeContent(w, r, lrs.Digest().String(), lrs.CreatedAt(), lrs)
|
||||
}
|
||||
|
Reference in New Issue
Block a user