Files
local-server/html/ui/js/Downloads.js

72 lines
2.5 KiB
JavaScript
Raw Normal View History

2023-02-07 21:29:19 +01:00
export default {
props: [ 'kind', 'name', 'token', 'state' ],
data() {
return { createDisabled: false, selectedAssets: {} }
},
computed: {
availableAssets() {
return {
cluster: ['addons'],
host: [
"kernel",
2023-08-20 11:08:42 +02:00
"initrd",
2023-02-07 21:29:19 +01:00
"bootstrap.tar",
2023-08-20 11:08:42 +02:00
"boot.img.lz4",
2023-02-07 21:29:19 +01:00
"boot.img.gz",
2025-06-12 11:53:08 +02:00
"boot.qcow2",
"boot.vmdk",
2025-06-29 00:12:12 +02:00
"boot.img",
"boot.iso",
"boot.tar",
"boot-efi.tar",
"config",
"bootstrap-config",
2023-02-07 21:29:19 +01:00
"ipxe",
],
}[this.kind]
},
downloads() {
return Object.entries(this.state.Downloads)
2023-02-07 21:29:19 +01:00
.filter(e => { let d=e[1]; return d.Kind == this.kind && d.Name == this.name })
.map(e => {
const token= e[0];
return {
text: token.substring(0, 5) + '...',
url: '/public/downloads/'+token+"/",
}
2023-02-07 21:29:19 +01:00
})
},
assets() {
return this.availableAssets.filter(a => this.selectedAssets[a])
},
},
methods: {
createToken() {
event.preventDefault()
this.createDisabled = true
fetch('/authorize-download', {
method: 'POST',
body: JSON.stringify({Kind: this.kind, Name: this.name, Assets: this.assets}),
2023-02-13 17:24:28 +01:00
headers: { 'Authorization': 'Bearer ' + this.token, 'Content-Type': 'application/json' },
2023-02-07 21:29:19 +01:00
}).then((resp) => resp.json())
.then((token) => { this.selectedAssets = {}; this.createDisabled = false })
.catch((e) => { alert('failed to create link'); this.createDisabled = false })
},
},
2025-06-29 00:12:12 +02:00
template: `
<h4>Available assets</h4>
<p class="downloads">
<template v-for="asset in availableAssets">
<label :class="{selected: selectedAssets[asset]}"><input type="checkbox" v-model="selectedAssets[asset]" />&nbsp;{{ asset }}</label>
{{" "}}
</template>
</p>
<p><button :disabled="createDisabled || assets.length==0" @click="createToken">Create link</button></p>
2025-06-29 00:12:12 +02:00
<template v-if="downloads.length">
2025-06-29 08:06:59 +02:00
<h4>Active links</h4>
<p class="download-links"><template v-for="d in downloads"><a :href="d.url" target="_blank">{{ d.text }}</a>{{" "}}</template></p>
2025-06-29 08:06:59 +02:00
</template>`
2023-02-07 21:29:19 +01:00
}