diff --git a/cmd/dkl-local-server/ws-downloads.go b/cmd/dkl-local-server/ws-downloads.go index f823a29..842d473 100644 --- a/cmd/dkl-local-server/ws-downloads.go +++ b/cmd/dkl-local-server/ws-downloads.go @@ -8,6 +8,7 @@ import ( "log" "net/http" "strconv" + "strings" "time" restful "github.com/emicklei/go-restful" @@ -55,7 +56,7 @@ func wsAuthorizeDownload(req *restful.Request, resp *restful.Response) { resp.WriteAsJson(token) } -func wsDownload(req *restful.Request, resp *restful.Response) { +func wsDownloadAsset(req *restful.Request, resp *restful.Response) { token := req.PathParameter("token") asset := req.PathParameter("asset") @@ -152,6 +153,23 @@ func wsDownload(req *restful.Request, resp *restful.Response) { } } +func wsDownload(req *restful.Request, resp *restful.Response) { + if strings.HasSuffix(req.Request.URL.Path, "/") { + wsDownloadPage(req, resp) + return + } + + token := req.PathParameter("token") + + spec, ok := wState.Get().Downloads[token] + if !ok { + wsNotFound(resp) + return + } + + resp.WriteEntity(spec) +} + func wsDownloadPage(req *restful.Request, resp *restful.Response) { token := req.PathParameter("token") diff --git a/cmd/dkl-local-server/ws.go b/cmd/dkl-local-server/ws.go index 2db59b9..667fc19 100644 --- a/cmd/dkl-local-server/ws.go +++ b/cmd/dkl-local-server/ws.go @@ -37,8 +37,8 @@ func registerWS(rest *restful.Container) { Route(ws.POST("/store.tar").To(wsStoreUpload). Consumes(mime.TAR). Doc("Upload an existing store")). - Route(ws.GET("/downloads/{token}/").To(wsDownloadPage)). - Route(ws.GET("/downloads/{token}/{asset}").To(wsDownload). + Route(ws.GET("/downloads/{token}").To(wsDownload)). + Route(ws.GET("/downloads/{token}/{asset}").To(wsDownloadAsset). Param(ws.PathParameter("token", "the download token")). Param(ws.PathParameter("asset", "the requested asset")). Doc("Fetch an asset via a download token"))