From cef444120801d12f20544b8c2579ec0ff79e8a1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Cluseau?= Date: Tue, 22 Jul 2025 11:58:18 +0200 Subject: [PATCH] download token: also render JSON --- cmd/dkl-local-server/ws-downloads.go | 20 +++++++++++++++++++- cmd/dkl-local-server/ws.go | 4 ++-- 2 files changed, 21 insertions(+), 3 deletions(-) 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"))