in desktop/src/client/core/aad/auth-loopback-client.ts [44:90]
async listenForAuthCode(successTemplate?: string, errorTemplate?: string): Promise<ServerAuthorizationCodeResponse> {
if (!!this.server) {
throw new Error("Auth code listener already exists. Cannot create another.");
}
const authCodeListener = new Promise<ServerAuthorizationCodeResponse>((resolve, reject) => {
this.server = createServer(async (req: IncomingMessage, res: ServerResponse) => {
const url = req.url;
if (!url) {
res.end(errorTemplate || "Login failed: Error occurred loading redirectUrl");
reject(new Error("Auth code listener callback was invoked without a url."));
return;
} else if (url === "/") {
res.end(successTemplate || "Successfully logged in to Batch Explorer. You may close this window.");
return;
}
const authCodeResponse = AuthLoopbackClient.getDeserializedQueryString(url);
if (authCodeResponse.code) {
const redirectUri = this.getRedirectUri();
res.writeHead(302, { location: redirectUri }); // Prevent auth code from being saved in the browser history
res.end();
}
resolve(authCodeResponse);
});
this.server.listen(this.port);
log.debug(`Initialized auth code listener on port ${this.port}`);
});
// Wait for server to be listening
await new Promise<void>((resolve) => {
let ticks = 0;
const id = setInterval(() => {
if ((5000 / 100) < ticks) {
throw new Error("Timed out waiting for auth code listener to be registered.");
}
if (this.server.listening) {
clearInterval(id);
resolve();
}
ticks++;
}, 100);
});
return authCodeListener;
}