Add revoke token to (external) auth (#1639)

* Add revoke token to external auth

* Lint

* Update to HAWS 3.1.1

* Fix constant
This commit is contained in:
Paulus Schoutsen 2018-09-07 20:37:06 +02:00 committed by GitHub
parent 300425e698
commit 0d7979a72f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 11 deletions

View File

@ -68,7 +68,7 @@
"es6-object-assign": "^1.1.0",
"eslint-import-resolver-webpack": "^0.10.0",
"fecha": "^2.3.3",
"home-assistant-js-websocket": "^3.0.0",
"home-assistant-js-websocket": "^3.1.1",
"intl-messageformat": "^2.2.0",
"js-yaml": "^3.12.0",
"leaflet": "^1.3.1",

View File

@ -3,7 +3,8 @@
*/
import { Auth } from 'home-assistant-js-websocket';
const CALLBACK_METHOD = 'externalAuthSetToken';
const CALLBACK_SET_TOKEN = 'externalAuthSetToken';
const CALLBACK_REVOKE_TOKEN = 'externalAuthRevokeToken';
if (!window.externalApp && !window.webkit) {
throw new Error('External auth requires either externalApp or webkit defined on Window object.');
@ -22,12 +23,12 @@ export default class ExternalAuth extends Auth {
}
async refreshAccessToken() {
const responseProm = new Promise((resolve) => { window[CALLBACK_METHOD] = resolve; });
const responseProm = new Promise((resolve) => { window[CALLBACK_SET_TOKEN] = resolve; });
// Allow promise to set resolve on window object.
await 0;
const callbackPayload = { callback: CALLBACK_METHOD };
const callbackPayload = { callback: CALLBACK_SET_TOKEN };
if (window.externalApp) {
window.externalApp.getExternalAuth(callbackPayload);
@ -45,4 +46,21 @@ export default class ExternalAuth extends Auth {
this.data.access_token = tokens.access_token;
this.data.expires = (tokens.expires_in * 1000) + Date.now();
}
async revoke() {
const responseProm = new Promise((resolve) => { window[CALLBACK_REVOKE_TOKEN] = resolve; });
// Allow promise to set resolve on window object.
await 0;
const callbackPayload = { callback: CALLBACK_REVOKE_TOKEN };
if (window.externalApp) {
window.externalApp.revokeExternalAuth(callbackPayload);
} else {
window.webkit.messageHandlers.revokeExternalAuth.postMessage(callbackPayload);
}
await responseProm;
}
}

View File

@ -27,9 +27,16 @@ export default superClass => class extends superClass {
});
}
_handleLogout() {
this.hass.connection.close();
clearState();
document.location.href = '/';
async _handleLogout() {
try {
await this.hass.auth.revoke();
this.hass.connection.close();
clearState();
document.location.href = '/';
} catch (err) {
// eslint-disable-next-line
console.error(err);
alert('Log out failed');
}
}
};

View File

@ -6561,9 +6561,9 @@ hoek@4.x.x:
version "4.2.1"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
home-assistant-js-websocket@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/home-assistant-js-websocket/-/home-assistant-js-websocket-3.0.0.tgz#498828a29827bdd1f3e99cf3b5e152694cededbf"
home-assistant-js-websocket@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/home-assistant-js-websocket/-/home-assistant-js-websocket-3.1.1.tgz#264f9efdafdff1053294b07bcaa5629e51a22b73"
home-or-tmp@^2.0.0:
version "2.0.0"