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
+
+`, spec.Kind, spec.Name, spec.Kind, spec.Name)
+
+ for _, asset := range spec.Assets {
+ fmt.Fprintf(buf, "- %s
\n", asset, asset)
+ }
+
+ buf.WriteString("
")
+ 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 {
{{" "}}
-
+
Active links
- {{ d.name }}{{" "}}
+ {{ d.text }}{{" "}}
`
}