Add last used to token on profile page (#1659)

This commit is contained in:
Paulus Schoutsen 2018-09-12 13:12:26 +02:00 committed by GitHub
parent a672b84b88
commit c546d8787d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 72 additions and 7 deletions

View File

@ -60,6 +60,7 @@
"@polymer/paper-tabs": "^3.0.0-pre.19",
"@polymer/paper-toast": "^3.0.0-pre.19",
"@polymer/paper-toggle-button": "^3.0.0-pre.19",
"@polymer/paper-tooltip": "^3.0.0-pre.26",
"@polymer/polymer": "^3.0.2",
"@vaadin/vaadin-combo-box": "4.1.0-alpha2",
"@vaadin/vaadin-date-picker": "3.2.0-alpha3",

View File

@ -44,9 +44,10 @@ class HaLongLivedTokens extends LocalizeMixin(EventsMixin(PolymerElement)) {
</template>
</div>
<template is='dom-repeat' items='[[_tokens]]'>
<ha-settings-row>
<ha-settings-row three-line>
<span slot='heading'>[[item.client_name]]</span>
<span slot='description'>[[_formatCreatedAt(item.created_at)]]</span>
<div slot='description'>[[_formatCreatedAt(item.created_at)]]</div>
<div slot='description'>[[_formatLastUsed(item)]]</div>
<paper-icon-button icon="hass:delete" on-click='_handleDelete'></paper-icon-button>
</ha-settings-row>
</template>
@ -88,6 +89,14 @@ class HaLongLivedTokens extends LocalizeMixin(EventsMixin(PolymerElement)) {
);
}
_formatLastUsed(item) {
return item.last_used_at ? this.localize(
'ui.panel.profile.refresh_tokens.last_used',
'date', formatDateTime(new Date(item.last_used_at)),
'location', item.last_used_ip
) : this.localize('ui.panel.profile.refresh_tokens.not_used');
}
async _handleCreate() {
const name = prompt(this.localize('ui.panel.profile.long_lived_access_tokens.prompt_name'));
if (!name) return;

View File

@ -1,4 +1,5 @@
import '@polymer/paper-icon-button/paper-icon-button.js';
import '@polymer/paper-tooltip/paper-tooltip.js';
import { html } from '@polymer/polymer/lib/utils/html-tag.js';
import { PolymerElement } from '@polymer/polymer/polymer-element.js';
@ -29,10 +30,22 @@ class HaRefreshTokens extends LocalizeMixin(EventsMixin(PolymerElement)) {
<paper-card heading="[[localize('ui.panel.profile.refresh_tokens.header')]]">
<div class="card-content">[[localize('ui.panel.profile.refresh_tokens.description')]]</div>
<template is='dom-repeat' items='[[_computeTokens(refreshTokens)]]'>
<ha-settings-row>
<ha-settings-row three-line>
<span slot='heading'>[[_formatTitle(item.client_id)]]</span>
<span slot='description'>[[_formatCreatedAt(item.created_at)]]</span>
<paper-icon-button icon="hass:delete" on-click='_handleDelete' disabled="[[item.is_current]]"></paper-icon-button>
<div slot='description'>[[_formatCreatedAt(item.created_at)]]</div>
<div slot='description'>[[_formatLastUsed(item)]]</div>
<div>
<template is='dom-if' if='[[item.is_current]]'>
<paper-tooltip
position="left"
>[[localize('ui.panel.profile.refresh_tokens.current_token_tooltip')]]</paper-tooltip>
</template>
<paper-icon-button
icon="hass:delete"
on-click='_handleDelete'
disabled="[[item.is_current]]"
></paper-icon-button>
</div>
</ha-settings-row>
</template>
</paper-card>
@ -64,6 +77,14 @@ class HaRefreshTokens extends LocalizeMixin(EventsMixin(PolymerElement)) {
);
}
_formatLastUsed(item) {
return item.last_used_at ? this.localize(
'ui.panel.profile.refresh_tokens.last_used',
'date', formatDateTime(new Date(item.last_used_at)),
'location', item.last_used_ip
) : this.localize('ui.panel.profile.refresh_tokens.not_used');
}
async _handleDelete(ev) {
if (!confirm(this.localize('ui.panel.profile.refresh_tokens.confirm_delete', 'name', ev.model.item.client_id))) {
return;

View File

@ -22,7 +22,7 @@ class HaSettingsRow extends PolymerElement {
padding-right: 16px;
}
</style>
<paper-item-body two-line>
<paper-item-body two-line$='[[!threeLine]]' three-line$='[[threeLine]]'>
<slot name="heading"></slot>
<div secondary><slot name="description"></slot></div>
</paper-item-body>
@ -35,6 +35,10 @@ class HaSettingsRow extends PolymerElement {
narrow: {
type: Boolean,
reflectToAttribute: true,
},
threeLine: {
type: Boolean,
value: false,
}
};
}

View File

@ -752,14 +752,19 @@
"description": "Each refresh token represents a login session. Refresh tokens will be automatically removed when you click log out. Below a list of refresh tokens that are currently active for your account.",
"token_title": "Refresh token for {clientId}",
"created_at": "Created at {date}",
"last_used": "Last used at {date} from {location}",
"not_used": "Has never been used",
"confirm_delete": "Are you sure you want to delete the refresh token for {name}?",
"delete_failed": "Failed to delete the refresh token."
"delete_failed": "Failed to delete the refresh token.",
"current_token_tooltip": "Unable to delete current refresh token"
},
"long_lived_access_tokens": {
"header": "Long-Lived Access Tokens",
"description": "Create long-lived access tokens to allow your scripts to interact with your Home Assistant instance. Each token will be valid for 10 years from creation. The following long-lived access tokens are currently active.",
"learn_auth_requests": "Learn how to make authenticated requests.",
"created_at": "Created at {date}",
"last_used": "Last used at {date} from {location}",
"not_used": "Has never been used",
"confirm_delete": "Are you sure you want to delete the access token for {name}?",
"delete_failed": "Failed to delete the access token.",
"create": "Create Token",

View File

@ -641,6 +641,10 @@
version "3.0.0-pre.19"
resolved "https://registry.yarnpkg.com/@polymer/font-roboto/-/font-roboto-3.0.0-pre.19.tgz#d67384a000eebb2632c00c268182a8528aca4a7c"
"@polymer/font-roboto@^3.0.1":
version "3.0.1"
resolved "https://registry.yarnpkg.com/@polymer/font-roboto/-/font-roboto-3.0.1.tgz#0f3e184ce1c09e132653e34cbbbf1014164a986c"
"@polymer/iron-a11y-announcer@^3.0.0-pre.12", "@polymer/iron-a11y-announcer@^3.0.0-pre.19":
version "3.0.0-pre.19"
resolved "https://registry.yarnpkg.com/@polymer/iron-a11y-announcer/-/iron-a11y-announcer-3.0.0-pre.19.tgz#6a3b724df1e1cfda6f1270c359136d3e55ed7363"
@ -704,6 +708,12 @@
dependencies:
"@polymer/polymer" "^3.0.0"
"@polymer/iron-flex-layout@^3.0.0-pre.25":
version "3.0.0-pre.26"
resolved "https://registry.yarnpkg.com/@polymer/iron-flex-layout/-/iron-flex-layout-3.0.0-pre.26.tgz#5b73eeafa63bcd5cfe4916a6beb8d39b32414e0e"
dependencies:
"@polymer/polymer" "^3.0.0"
"@polymer/iron-form-element-behavior@^3.0.0-pre.19":
version "3.0.0-pre.19"
resolved "https://registry.yarnpkg.com/@polymer/iron-form-element-behavior/-/iron-form-element-behavior-3.0.0-pre.19.tgz#0fee7892af6a79cea7ef7ef1c7f738ac9f916ec6"
@ -1058,6 +1068,14 @@
"@polymer/iron-flex-layout" "^3.0.0-pre.19"
"@polymer/polymer" "^3.0.0"
"@polymer/paper-styles@^3.0.0-pre.25":
version "3.0.0-pre.26"
resolved "https://registry.yarnpkg.com/@polymer/paper-styles/-/paper-styles-3.0.0-pre.26.tgz#301c8d98505f5abf1cd8afed38936f7c112ab76c"
dependencies:
"@polymer/font-roboto" "^3.0.1"
"@polymer/iron-flex-layout" "^3.0.0-pre.25"
"@polymer/polymer" "^3.0.0"
"@polymer/paper-tabs@^3.0.0-pre.19":
version "3.0.0-pre.19"
resolved "https://registry.yarnpkg.com/@polymer/paper-tabs/-/paper-tabs-3.0.0-pre.19.tgz#c758179061d713d830b4d77e2b5fa640508b2a18"
@ -1091,6 +1109,13 @@
"@polymer/paper-styles" "^3.0.0-pre.19"
"@polymer/polymer" "^3.0.0"
"@polymer/paper-tooltip@^3.0.0-pre.26":
version "3.0.0-pre.26"
resolved "https://registry.yarnpkg.com/@polymer/paper-tooltip/-/paper-tooltip-3.0.0-pre.26.tgz#1fe5009df63df8a12784426f77f57cf0f249bd8e"
dependencies:
"@polymer/paper-styles" "^3.0.0-pre.25"
"@polymer/polymer" "^3.0.0"
"@polymer/polymer@^3.0.0", "@polymer/polymer@^3.0.0-pre.13", "@polymer/polymer@^3.0.2":
version "3.0.2"
resolved "https://registry.yarnpkg.com/@polymer/polymer/-/polymer-3.0.2.tgz#626e6f9fae9716b0962ce0211e21df242153eab2"