mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-18 14:56:37 +00:00
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:
parent
300425e698
commit
0d7979a72f
@ -68,7 +68,7 @@
|
|||||||
"es6-object-assign": "^1.1.0",
|
"es6-object-assign": "^1.1.0",
|
||||||
"eslint-import-resolver-webpack": "^0.10.0",
|
"eslint-import-resolver-webpack": "^0.10.0",
|
||||||
"fecha": "^2.3.3",
|
"fecha": "^2.3.3",
|
||||||
"home-assistant-js-websocket": "^3.0.0",
|
"home-assistant-js-websocket": "^3.1.1",
|
||||||
"intl-messageformat": "^2.2.0",
|
"intl-messageformat": "^2.2.0",
|
||||||
"js-yaml": "^3.12.0",
|
"js-yaml": "^3.12.0",
|
||||||
"leaflet": "^1.3.1",
|
"leaflet": "^1.3.1",
|
||||||
|
@ -3,7 +3,8 @@
|
|||||||
*/
|
*/
|
||||||
import { Auth } from 'home-assistant-js-websocket';
|
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) {
|
if (!window.externalApp && !window.webkit) {
|
||||||
throw new Error('External auth requires either externalApp or webkit defined on Window object.');
|
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() {
|
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.
|
// Allow promise to set resolve on window object.
|
||||||
await 0;
|
await 0;
|
||||||
|
|
||||||
const callbackPayload = { callback: CALLBACK_METHOD };
|
const callbackPayload = { callback: CALLBACK_SET_TOKEN };
|
||||||
|
|
||||||
if (window.externalApp) {
|
if (window.externalApp) {
|
||||||
window.externalApp.getExternalAuth(callbackPayload);
|
window.externalApp.getExternalAuth(callbackPayload);
|
||||||
@ -45,4 +46,21 @@ export default class ExternalAuth extends Auth {
|
|||||||
this.data.access_token = tokens.access_token;
|
this.data.access_token = tokens.access_token;
|
||||||
this.data.expires = (tokens.expires_in * 1000) + Date.now();
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,9 +27,16 @@ export default superClass => class extends superClass {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleLogout() {
|
async _handleLogout() {
|
||||||
this.hass.connection.close();
|
try {
|
||||||
clearState();
|
await this.hass.auth.revoke();
|
||||||
document.location.href = '/';
|
this.hass.connection.close();
|
||||||
|
clearState();
|
||||||
|
document.location.href = '/';
|
||||||
|
} catch (err) {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
console.error(err);
|
||||||
|
alert('Log out failed');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -6561,9 +6561,9 @@ hoek@4.x.x:
|
|||||||
version "4.2.1"
|
version "4.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
|
resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
|
||||||
|
|
||||||
home-assistant-js-websocket@^3.0.0:
|
home-assistant-js-websocket@^3.1.1:
|
||||||
version "3.0.0"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/home-assistant-js-websocket/-/home-assistant-js-websocket-3.0.0.tgz#498828a29827bdd1f3e99cf3b5e152694cededbf"
|
resolved "https://registry.yarnpkg.com/home-assistant-js-websocket/-/home-assistant-js-websocket-3.1.1.tgz#264f9efdafdff1053294b07bcaa5629e51a22b73"
|
||||||
|
|
||||||
home-or-tmp@^2.0.0:
|
home-or-tmp@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user