diff --git a/handlers.go b/handlers.go index f4299a6..1a61a8a 100644 --- a/handlers.go +++ b/handlers.go @@ -254,11 +254,30 @@ func DeleteConfig(w http.ResponseWriter, r *http.Request) { } } +const ( + mimeTypeAPIV1 = "application/vnd.x.restic.rest.v1" + mimeTypeAPIV2 = "application/vnd.x.restic.rest.v2" +) + // ListBlobs lists all blobs of a given type in an arbitrary order. func ListBlobs(w http.ResponseWriter, r *http.Request) { if Config.Debug { log.Println("ListBlobs()") } + + switch r.Header.Get("Accept") { + case mimeTypeAPIV2: + ListBlobsV2(w, r) + default: + ListBlobsV1(w, r) + } +} + +// ListBlobsV1 lists all blobs of a given type in an arbitrary order. +func ListBlobsV1(w http.ResponseWriter, r *http.Request) { + if Config.Debug { + log.Println("ListBlobsV1()") + } fileType := pat.Param(r, "type") path, err := getPath(r, fileType) if err != nil { @@ -305,6 +324,7 @@ func ListBlobs(w http.ResponseWriter, r *http.Request) { return } + w.Header().Set("Content-Type", mimeTypeAPIV1) _, _ = w.Write(data) } @@ -365,6 +385,7 @@ func ListBlobsV2(w http.ResponseWriter, r *http.Request) { return } + w.Header().Set("Content-Type", mimeTypeAPIV2) _, _ = w.Write(data) } diff --git a/mux.go b/mux.go index 307a403..591f8b3 100644 --- a/mux.go +++ b/mux.go @@ -72,8 +72,6 @@ func NewMux() *goji.Mux { mux.HandleFunc(pat.Post("/:repo/config"), SaveConfig) mux.HandleFunc(pat.Delete("/config"), DeleteConfig) mux.HandleFunc(pat.Delete("/:repo/config"), DeleteConfig) - mux.HandleFunc(pat.Get("/v2/:type/"), ListBlobsV2) - mux.HandleFunc(pat.Get("/v2/:repo/:type/"), ListBlobsV2) mux.HandleFunc(pat.Get("/:type/"), ListBlobs) mux.HandleFunc(pat.Get("/:repo/:type/"), ListBlobs) mux.HandleFunc(pat.Head("/:type/:name"), CheckBlob)