diff --git a/hassio/src/snapshots/hassio-snapshot.js b/hassio/src/snapshots/hassio-snapshot.js
index d105d8436d..e36c4c1b5b 100644
--- a/hassio/src/snapshots/hassio-snapshot.js
+++ b/hassio/src/snapshots/hassio-snapshot.js
@@ -7,6 +7,7 @@ import "@polymer/paper-icon-button/paper-icon-button";
import "@polymer/paper-input/paper-input";
import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element";
+import { getSignedPath } from "../../../src/auth/data";
import "../../../src/resources/ha-style";
@@ -116,16 +117,12 @@ class HassioSnapshot extends PolymerElement {
class="warning"
title="Delete snapshot"
>
-
-
-
+
Restore selected
@@ -282,14 +279,24 @@ class HassioSnapshot extends PolymerElement {
);
}
- _computeDownloadUrl(snapshotSlug) {
- const password = encodeURIComponent(this.hass.connection.options.authToken);
- return `/api/hassio/snapshots/${snapshotSlug}/download?api_password=${password}`;
- }
-
- _computeDownloadName(snapshot) {
- const name = this._computeName(snapshot).replace(/[^a-z0-9]+/gi, "_");
- return `Hass_io_${name}.tar`;
+ async _downloadClicked() {
+ let signedPath;
+ try {
+ signedPath = await getSignedPath(
+ this.hass,
+ `/api/hassio/snapshots/${this.snapshotSlug}/download`
+ );
+ } catch (err) {
+ alert(`Error: ${err.message}`);
+ return;
+ }
+ const name = this._computeName(this.snapshot).replace(/[^a-z0-9]+/gi, "_");
+ const a = document.createElement("A");
+ a.href = signedPath.path;
+ a.download = `Hass_io_${name}.tar`;
+ this.$.dialog.appendChild(a);
+ a.click();
+ this.$.dialog.removeChild(a);
}
_computeName(snapshot) {
diff --git a/src/auth/data.ts b/src/auth/data.ts
new file mode 100644
index 0000000000..f970e90d52
--- /dev/null
+++ b/src/auth/data.ts
@@ -0,0 +1,7 @@
+import { HomeAssistant } from "../types";
+import { SignedPath } from "./types";
+
+export const getSignedPath = (
+ hass: HomeAssistant,
+ path: string
+): Promise => hass.callWS({ type: "auth/sign_path", path });
diff --git a/src/auth/types.ts b/src/auth/types.ts
new file mode 100644
index 0000000000..bb1b00180a
--- /dev/null
+++ b/src/auth/types.ts
@@ -0,0 +1,3 @@
+export interface SignedPath {
+ path: string;
+}