mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
don't use so many exceptions
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
40fa387b5e
commit
29e675b630
@ -68,10 +68,6 @@ const disallowedPorts = new Set([
|
|||||||
10080,
|
10080,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
class UnsafePortError {
|
|
||||||
constructor(public port: number) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class LensProxy extends Singleton {
|
export class LensProxy extends Singleton {
|
||||||
protected origin: string;
|
protected origin: string;
|
||||||
protected proxyServer: http.Server;
|
protected proxyServer: http.Server;
|
||||||
@ -114,11 +110,12 @@ export class LensProxy extends Singleton {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts to listen on an OS provided port. Will reject if the server throws
|
* Starts to listen on an OS provided port. Will reject if the server throws
|
||||||
* an error or if the port picked by the OS is one which chrome rejects
|
* an error.
|
||||||
* connections to.
|
*
|
||||||
|
* Resolves with the port number that was picked
|
||||||
*/
|
*/
|
||||||
private attemptToListen(): Promise<void> {
|
private attemptToListen(): Promise<number> {
|
||||||
return new Promise<void>((resolve, reject) => {
|
return new Promise<number>((resolve, reject) => {
|
||||||
this.proxyServer.listen(0, "127.0.0.1");
|
this.proxyServer.listen(0, "127.0.0.1");
|
||||||
|
|
||||||
this.proxyServer
|
this.proxyServer
|
||||||
@ -127,12 +124,6 @@ export class LensProxy extends Singleton {
|
|||||||
|
|
||||||
const { address, port } = this.proxyServer.address() as net.AddressInfo;
|
const { address, port } = this.proxyServer.address() as net.AddressInfo;
|
||||||
|
|
||||||
if (disallowedPorts.has(port)) {
|
|
||||||
logger.warn(`[LENS-PROXY]: Proxy server has with port known to be considered unsafe to connect to by chrome, restarting...`);
|
|
||||||
|
|
||||||
return reject(new UnsafePortError(port));
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.info(`[LENS-PROXY]: Proxy server has started at ${address}:${port}`);
|
logger.info(`[LENS-PROXY]: Proxy server has started at ${address}:${port}`);
|
||||||
|
|
||||||
this.proxyServer.on("error", (error) => {
|
this.proxyServer.on("error", (error) => {
|
||||||
@ -141,7 +132,7 @@ export class LensProxy extends Singleton {
|
|||||||
|
|
||||||
this.port = port;
|
this.port = port;
|
||||||
appEventBus.emit({ name: "lens-proxy", action: "listen", params: { port }});
|
appEventBus.emit({ name: "lens-proxy", action: "listen", params: { port }});
|
||||||
resolve();
|
resolve(port);
|
||||||
})
|
})
|
||||||
.once("error", (error) => {
|
.once("error", (error) => {
|
||||||
logger.info(`[LENS-PROXY]: Proxy server failed to start: ${error}`);
|
logger.info(`[LENS-PROXY]: Proxy server failed to start: ${error}`);
|
||||||
@ -158,21 +149,26 @@ export class LensProxy extends Singleton {
|
|||||||
async listen(): Promise<void> {
|
async listen(): Promise<void> {
|
||||||
const seenPorts = new Set<number>();
|
const seenPorts = new Set<number>();
|
||||||
|
|
||||||
for(;;) {
|
while(true) {
|
||||||
try {
|
this.proxyServer?.close();
|
||||||
this.proxyServer?.close();
|
const port = await this.attemptToListen();
|
||||||
await this.attemptToListen();
|
|
||||||
break;
|
|
||||||
} catch (error) {
|
|
||||||
if (error instanceof UnsafePortError) {
|
|
||||||
if (seenPorts.has(error.port)) {
|
|
||||||
throw new Error("Failed to start LensProxy due to seeing too many unsafe ports. Please restart Lens.");
|
|
||||||
}
|
|
||||||
|
|
||||||
continue;
|
if (!disallowedPorts.has(port)) {
|
||||||
}
|
// We didn't get a port that would result in an ERR_UNSAFE_PORT error, use it
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
throw error;
|
logger.warn(`[LENS-PROXY]: Proxy server has with port known to be considered unsafe to connect to by chrome, restarting...`);
|
||||||
|
|
||||||
|
if (seenPorts.has(port)) {
|
||||||
|
/**
|
||||||
|
* Assume that if we have seen the port before, then the OS has looped
|
||||||
|
* through all the ports possible and we will not be able to get a safe
|
||||||
|
* port.
|
||||||
|
*/
|
||||||
|
throw new Error("Failed to start LensProxy due to seeing too many unsafe ports. Please restart Lens.");
|
||||||
|
} else {
|
||||||
|
seenPorts.add(port);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user