2014-11-18 00:29:42 +00:00
|
|
|
package storage
|
|
|
|
|
|
|
|
import (
|
2015-03-03 16:57:52 +00:00
|
|
|
"net/http"
|
2014-11-18 00:29:42 +00:00
|
|
|
"time"
|
2014-11-19 22:39:32 +00:00
|
|
|
|
2015-02-12 00:49:49 +00:00
|
|
|
"github.com/docker/distribution"
|
2014-12-24 00:01:38 +00:00
|
|
|
"github.com/docker/distribution/digest"
|
2014-11-18 00:29:42 +00:00
|
|
|
)
|
|
|
|
|
2015-03-06 17:48:25 +00:00
|
|
|
// layerReader implements Layer and provides facilities for reading and
|
2014-11-18 00:29:42 +00:00
|
|
|
// seeking.
|
|
|
|
type layerReader struct {
|
2014-11-21 01:49:35 +00:00
|
|
|
fileReader
|
2014-11-18 00:29:42 +00:00
|
|
|
|
2014-12-05 04:55:59 +00:00
|
|
|
digest digest.Digest
|
2014-11-18 00:29:42 +00:00
|
|
|
}
|
|
|
|
|
2015-02-12 00:49:49 +00:00
|
|
|
var _ distribution.Layer = &layerReader{}
|
2014-11-18 00:29:42 +00:00
|
|
|
|
2015-03-06 17:48:25 +00:00
|
|
|
func (lr *layerReader) Digest() digest.Digest {
|
|
|
|
return lr.digest
|
2014-11-18 00:29:42 +00:00
|
|
|
}
|
|
|
|
|
2015-03-06 17:48:25 +00:00
|
|
|
func (lr *layerReader) Length() int64 {
|
|
|
|
return lr.size
|
2015-03-05 04:57:14 +00:00
|
|
|
}
|
|
|
|
|
2015-03-06 17:48:25 +00:00
|
|
|
func (lr *layerReader) CreatedAt() time.Time {
|
|
|
|
return lr.modtime
|
2014-11-18 00:29:42 +00:00
|
|
|
}
|
2015-02-12 00:49:49 +00:00
|
|
|
|
|
|
|
// Close the layer. Should be called when the resource is no longer needed.
|
2015-03-06 17:48:25 +00:00
|
|
|
func (lr *layerReader) Close() error {
|
|
|
|
return lr.closeWithErr(distribution.ErrLayerClosed)
|
2015-02-12 00:49:49 +00:00
|
|
|
}
|
2015-03-03 16:57:52 +00:00
|
|
|
|
2015-03-06 17:48:25 +00:00
|
|
|
func (lr *layerReader) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
|
|
w.Header().Set("Docker-Content-Digest", lr.digest.String())
|
2015-03-03 16:57:52 +00:00
|
|
|
|
2015-03-09 17:55:52 +00:00
|
|
|
if url, err := lr.fileReader.driver.URLFor(lr.path, map[string]interface{}{}); err == nil {
|
2015-03-03 16:57:52 +00:00
|
|
|
http.Redirect(w, r, url, http.StatusTemporaryRedirect)
|
|
|
|
}
|
2015-03-06 17:48:25 +00:00
|
|
|
http.ServeContent(w, r, lr.digest.String(), lr.CreatedAt(), lr)
|
2015-03-03 16:57:52 +00:00
|
|
|
}
|