1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Add defensive code around Cluster.broadcastConnectUpdate (#5297)

This commit is contained in:
Sebastian Malton 2022-05-12 08:27:33 -04:00 committed by GitHub
parent 19c77eefaf
commit d92233d58e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 5 deletions

View File

@ -504,7 +504,9 @@ export class Cluster implements ClusterModel, ClusterState {
return ClusterStatus.AccessDenied;
}
this.broadcastConnectUpdate(error.error || error.message, true);
const message = String(error.error || error.message) || String(error);
this.broadcastConnectUpdate(message, true);
return ClusterStatus.Offline;
}
@ -521,7 +523,9 @@ export class Cluster implements ClusterModel, ClusterState {
return ClusterStatus.AccessDenied;
}
this.broadcastConnectUpdate(error.message, true);
const message = String(error.error || error.message) || String(error);
this.broadcastConnectUpdate(message, true);
return ClusterStatus.Offline;
}

View File

@ -73,6 +73,14 @@ export function isString(val: unknown): val is string {
return typeof val === "string";
}
/**
* checks if val is of type boolean
* @param val the value to be checked
*/
export function isBoolean(val: unknown): val is boolean {
return typeof val === "boolean";
}
/**
* checks if val is of type object and isn't null
* @param val the value to be checked

View File

@ -11,7 +11,7 @@ import React from "react";
import { ipcRendererOn } from "../../../common/ipc";
import type { Cluster } from "../../../common/cluster/cluster";
import type { IClassName } from "../../utils";
import { cssNames } from "../../utils";
import { isBoolean, hasTypedProperty, isObject, isString, cssNames } from "../../utils";
import { Button } from "../button";
import { Icon } from "../icon";
import { Spinner } from "../spinner";
@ -55,8 +55,16 @@ class NonInjectedClusterStatus extends React.Component<ClusterStatusProps & Depe
componentDidMount() {
disposeOnUnmount(this, [
ipcRendererOn(`cluster:${this.cluster.id}:connection-update`, (evt, res: KubeAuthUpdate) => {
this.authOutput.push(res);
ipcRendererOn(`cluster:${this.cluster.id}:connection-update`, (evt, res: unknown) => {
if (
isObject(res)
&& hasTypedProperty(res, "message", isString)
&& hasTypedProperty(res, "isError", isBoolean)
) {
this.authOutput.push(res);
} else {
console.warn(`Got invalid connection update for ${this.cluster.id}`, { update: res });
}
}),
]);
}