From 450e6f2d7c9ce2a72a7c6e2be58c9de46a3d3a66 Mon Sep 17 00:00:00 2001 From: Lorenzo Blasa Date: Thu, 19 Oct 2023 13:57:36 -0700 Subject: [PATCH] Fixes an issue whereas server configuration is not yet set Summary: ^ Reviewed By: aigoncharov Differential Revision: D50470060 fbshipit-source-id: cc59ac7cace092addbf48dfa16219983bd129cb0 --- .../certificate-utils.tsx | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/desktop/flipper-server-core/src/app-connectivity/certificate-exchange/certificate-utils.tsx b/desktop/flipper-server-core/src/app-connectivity/certificate-exchange/certificate-utils.tsx index 044403519..d2a62c31e 100644 --- a/desktop/flipper-server-core/src/app-connectivity/certificate-exchange/certificate-utils.tsx +++ b/desktop/flipper-server-core/src/app-connectivity/certificate-exchange/certificate-utils.tsx @@ -286,10 +286,21 @@ const getManifestPath = (config: FlipperServerConfig): string => { return path.resolve(config.paths.staticPath, manifestFilename); }; -const exportTokenToManifest = async ( - config: FlipperServerConfig, - token: string, -) => { +const exportTokenToManifest = async (token: string) => { + console.info('Export token to manifest'); + let config: FlipperServerConfig | undefined; + try { + config = getFlipperServerConfig(); + } catch { + console.warn( + 'Unable to obtain server configuration whilst exporting token to manifest', + ); + } + + if (!config || !config.environmentInfo.isHeadlessBuild) { + return; + } + const manifestPath = getManifestPath(config); try { const manifestData = await fs.readFile(manifestPath, { @@ -313,8 +324,6 @@ export const generateAuthToken = async () => { await ensureServerCertExists(); - const config = getFlipperServerConfig(); - const privateKey = await fs.readFile(serverKey); const token = jwt.sign({unixname: os.userInfo().username}, privateKey, { algorithm: 'RS256', @@ -323,11 +332,7 @@ export const generateAuthToken = async () => { await fs.writeFile(serverAuthToken, token); - console.info('Token generated and saved to disk'); - if (config.environmentInfo.isHeadlessBuild) { - console.info('Token exported to manifest'); - await exportTokenToManifest(config, token); - } + await exportTokenToManifest(token); return token; }; @@ -349,25 +354,22 @@ export const getAuthToken = async (): Promise => { return generateAuthToken(); } - const token = await fs.readFile(serverAuthToken); + const tokenBuffer = await fs.readFile(serverAuthToken); + const token = tokenBuffer.toString(); try { console.info('Verify authentication token'); const serverCertificate = await fs.readFile(serverCert); - jwt.verify(token.toString(), serverCertificate); + jwt.verify(token, serverCertificate); console.info('Token verification succeeded'); } catch (_) { console.warn('Either token has expired or is invalid'); return generateAuthToken(); } - const config = getFlipperServerConfig(); - if (config.environmentInfo.isHeadlessBuild) { - console.info('Token exported to manifest'); - await exportTokenToManifest(config, token.toString()); - } + await exportTokenToManifest(token); - return token.toString(); + return token; }; export const hasAuthToken = async (): Promise => {