diff --git a/cmd/dkl-local-server/ws-downloads.go b/cmd/dkl-local-server/ws-downloads.go index b911e06..f823a29 100644 --- a/cmd/dkl-local-server/ws-downloads.go +++ b/cmd/dkl-local-server/ws-downloads.go @@ -1,8 +1,10 @@ package main import ( + "bytes" "crypto/rand" "encoding/base32" + "fmt" "log" "net/http" "strconv" @@ -149,3 +151,45 @@ func wsDownload(req *restful.Request, resp *restful.Response) { wsNotFound(resp) } } + +func wsDownloadPage(req *restful.Request, resp *restful.Response) { + token := req.PathParameter("token") + + spec, ok := wState.Get().Downloads[token] + if !ok { + resp.WriteHeader(http.StatusNotFound) + resp.Write([]byte(` + + + Token not found + + +

Token not found

+`)) + return + } + + buf := new(bytes.Buffer) + fmt.Fprintf(buf, ` + + + Token assets: %s %s + + +

Token assets: %s %s

+") + buf.WriteTo(resp) +} diff --git a/cmd/dkl-local-server/ws.go b/cmd/dkl-local-server/ws.go index 87f32ca..2db59b9 100644 --- a/cmd/dkl-local-server/ws.go +++ b/cmd/dkl-local-server/ws.go @@ -37,6 +37,7 @@ 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). Param(ws.PathParameter("token", "the download token")). Param(ws.PathParameter("asset", "the requested asset")). diff --git a/html/ui/js/Downloads.js b/html/ui/js/Downloads.js index 1299b72..fbaab1e 100644 --- a/html/ui/js/Downloads.js +++ b/html/ui/js/Downloads.js @@ -27,16 +27,15 @@ export default { }[this.kind] }, downloads() { - let ret = [] - Object.entries(this.state.Downloads) + return Object.entries(this.state.Downloads) .filter(e => { let d=e[1]; return d.Kind == this.kind && d.Name == this.name }) - .forEach(e => { - let token= e[0], d = e[1] - d.Assets.forEach(asset => { - ret.push({name: asset, url: '/public/downloads/'+token+'/'+asset}) - }) + .map(e => { + const token= e[0]; + return { + text: token.substring(0, 5) + '...', + url: '/public/downloads/'+token+"/", + } }) - return ret }, assets() { return this.availableAssets.filter(a => this.selectedAssets[a]) @@ -64,9 +63,9 @@ export default { {{" "}}

-

+

` }