diff --git a/src/panels/profile/ha-refresh-tokens-card.ts b/src/panels/profile/ha-refresh-tokens-card.ts
index 6217936dcb..3523acc417 100644
--- a/src/panels/profile/ha-refresh-tokens-card.ts
+++ b/src/panels/profile/ha-refresh-tokens-card.ts
@@ -9,6 +9,7 @@ import "../../components/ha-card";
import "../../components/ha-settings-row";
import "../../components/ha-icon-button";
import { RefreshToken } from "../../data/refresh_token";
+import { deleteAllRefreshTokens } from "../../data/auth";
import {
showAlertDialog,
showConfirmationDialog,
@@ -108,6 +109,13 @@ class HaRefreshTokens extends LitElement {
)
: ""}
+
+
+ ${this.hass.localize(
+ "ui.panel.profile.refresh_tokens.delete_all_tokens"
+ )}
+
+
`;
}
@@ -139,6 +147,29 @@ class HaRefreshTokens extends LitElement {
}
}
+ private async _deleteAllTokens(): Promise {
+ if (
+ !(await showConfirmationDialog(this, {
+ text: this.hass.localize(
+ "ui.panel.profile.refresh_tokens.confirm_delete_all"
+ ),
+ destructive: true,
+ }))
+ ) {
+ return;
+ }
+ try {
+ await deleteAllRefreshTokens(this.hass);
+ } catch (err: any) {
+ await showAlertDialog(this, {
+ title: this.hass.localize(
+ "ui.panel.profile.refresh_tokens.delete_failed"
+ ),
+ text: err.message,
+ });
+ }
+ }
+
static get styles(): CSSResultGroup {
return [
haStyle,
diff --git a/src/translations/en.json b/src/translations/en.json
index 0a0606abf3..aded614d02 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -5537,6 +5537,8 @@
"last_used": "Last used {date} from {location}",
"not_used": "Has never been used",
"confirm_delete": "Are you sure you want to delete the refresh token for {name}?",
+ "delete_all_tokens": "Delete all tokens",
+ "confirm_delete_all": "Are you sure you want to delete all refresh tokens? You will be logged out as part of this operation.",
"delete_failed": "Failed to delete the refresh token.",
"current_token_tooltip": "Unable to delete current refresh token"
},