mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-28 19:56:42 +00:00
Force refresh tokens if external app (#4461)
This commit is contained in:
parent
5c32413bf7
commit
40ac456937
@ -55,8 +55,12 @@ const connProm = async (auth) => {
|
|||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
// We can get invalid auth if auth tokens were stored that are no longer valid
|
// We can get invalid auth if auth tokens were stored that are no longer valid
|
||||||
// Clear stored tokens.
|
if (isExternal) {
|
||||||
if (!isExternal) {
|
// Tell the external app to force refresh the access tokens.
|
||||||
|
// This should trigger their unauthorized handling.
|
||||||
|
await auth.refreshAccessToken(true);
|
||||||
|
} else {
|
||||||
|
// Clear stored tokens.
|
||||||
saveTokens(null);
|
saveTokens(null);
|
||||||
}
|
}
|
||||||
auth = await authProm();
|
auth = await authProm();
|
||||||
|
@ -11,6 +11,10 @@ interface BasePayload {
|
|||||||
callback: string;
|
callback: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface GetExternalAuthPayload extends BasePayload {
|
||||||
|
force?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
interface RefreshTokenResponse {
|
interface RefreshTokenResponse {
|
||||||
access_token: string;
|
access_token: string;
|
||||||
expires_in: number;
|
expires_in: number;
|
||||||
@ -26,7 +30,7 @@ declare global {
|
|||||||
webkit?: {
|
webkit?: {
|
||||||
messageHandlers: {
|
messageHandlers: {
|
||||||
getExternalAuth: {
|
getExternalAuth: {
|
||||||
postMessage(payload: BasePayload);
|
postMessage(payload: GetExternalAuthPayload);
|
||||||
};
|
};
|
||||||
revokeExternalAuth: {
|
revokeExternalAuth: {
|
||||||
postMessage(payload: BasePayload);
|
postMessage(payload: BasePayload);
|
||||||
@ -60,8 +64,13 @@ class ExternalAuth extends Auth {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async refreshAccessToken() {
|
public async refreshAccessToken(force?: boolean) {
|
||||||
const callbackPayload = { callback: CALLBACK_SET_TOKEN };
|
const payload: GetExternalAuthPayload = {
|
||||||
|
callback: CALLBACK_SET_TOKEN,
|
||||||
|
};
|
||||||
|
if (force) {
|
||||||
|
payload.force = true;
|
||||||
|
}
|
||||||
|
|
||||||
const callbackPromise = new Promise<RefreshTokenResponse>(
|
const callbackPromise = new Promise<RefreshTokenResponse>(
|
||||||
(resolve, reject) => {
|
(resolve, reject) => {
|
||||||
@ -73,11 +82,9 @@ class ExternalAuth extends Auth {
|
|||||||
await 0;
|
await 0;
|
||||||
|
|
||||||
if (window.externalApp) {
|
if (window.externalApp) {
|
||||||
window.externalApp.getExternalAuth(JSON.stringify(callbackPayload));
|
window.externalApp.getExternalAuth(JSON.stringify(payload));
|
||||||
} else {
|
} else {
|
||||||
window.webkit!.messageHandlers.getExternalAuth.postMessage(
|
window.webkit!.messageHandlers.getExternalAuth.postMessage(payload);
|
||||||
callbackPayload
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const tokens = await callbackPromise;
|
const tokens = await callbackPromise;
|
||||||
@ -87,7 +94,7 @@ class ExternalAuth extends Auth {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async revoke() {
|
public async revoke() {
|
||||||
const callbackPayload = { callback: CALLBACK_REVOKE_TOKEN };
|
const payload: BasePayload = { callback: CALLBACK_REVOKE_TOKEN };
|
||||||
|
|
||||||
const callbackPromise = new Promise((resolve, reject) => {
|
const callbackPromise = new Promise((resolve, reject) => {
|
||||||
window[CALLBACK_REVOKE_TOKEN] = (success, data) =>
|
window[CALLBACK_REVOKE_TOKEN] = (success, data) =>
|
||||||
@ -97,11 +104,9 @@ class ExternalAuth extends Auth {
|
|||||||
await 0;
|
await 0;
|
||||||
|
|
||||||
if (window.externalApp) {
|
if (window.externalApp) {
|
||||||
window.externalApp.revokeExternalAuth(JSON.stringify(callbackPayload));
|
window.externalApp.revokeExternalAuth(JSON.stringify(payload));
|
||||||
} else {
|
} else {
|
||||||
window.webkit!.messageHandlers.revokeExternalAuth.postMessage(
|
window.webkit!.messageHandlers.revokeExternalAuth.postMessage(payload);
|
||||||
callbackPayload
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await callbackPromise;
|
await callbackPromise;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user