From af3944bd753485e0079d79341ed99ca4a0697ce6 Mon Sep 17 00:00:00 2001 From: Christopher Kolstad Date: Wed, 10 May 2023 13:31:42 +0200 Subject: [PATCH] fix: log missing user at warn level (#3735) When using PATs if the user that the PAT is for has been removed, we currently log the missing user at ERROR level. Since this is not something our SREs can fix, this PR downgrades the NotFoundError to WARN, instead of ERROR. --- src/lib/middleware/pat-middleware.test.ts | 35 +++++++++++++++++++++++ src/lib/middleware/pat-middleware.ts | 10 ++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/lib/middleware/pat-middleware.test.ts b/src/lib/middleware/pat-middleware.test.ts index 8690c040272..4927c67bb06 100644 --- a/src/lib/middleware/pat-middleware.test.ts +++ b/src/lib/middleware/pat-middleware.test.ts @@ -1,6 +1,7 @@ import getLogger from '../../test/fixtures/no-logger'; import patMiddleware from './pat-middleware'; import User from '../types/user'; +import NotFoundError from '../error/notfound-error'; let config: any; @@ -108,3 +109,37 @@ test('should call next if accountService throws exception', async () => { expect(cb).toHaveBeenCalled(); getLogger.setMuteError(false); }); + +test('Should not log at error level if user not found', async () => { + let fakeLogger = { + debug: () => {}, + info: () => {}, + warn: jest.fn(), + error: jest.fn(), + fatal: console.error, + }; + const conf = { + getLogger: () => { + return fakeLogger; + }, + flagResolver: { + isEnabled: jest.fn().mockReturnValue(true), + }, + }; + const accountService = { + getAccountByPersonalAccessToken: jest.fn().mockImplementation(() => { + throw new NotFoundError('Could not find pat'); + }), + }; + let mw = patMiddleware(conf, { accountService }); + const cb = jest.fn(); + + const req = { + header: jest.fn().mockReturnValue('user:some-token'), + user: undefined, + }; + + await mw(req, undefined, cb); + expect(fakeLogger.error).not.toHaveBeenCalled(); + expect(fakeLogger.warn).toHaveBeenCalled(); +}); diff --git a/src/lib/middleware/pat-middleware.ts b/src/lib/middleware/pat-middleware.ts index 947b743435c..a3ffc520dad 100644 --- a/src/lib/middleware/pat-middleware.ts +++ b/src/lib/middleware/pat-middleware.ts @@ -1,5 +1,6 @@ import { IUnleashConfig } from '../types'; import { IAuthRequest } from '../routes/unleash-types'; +import NotFoundError from '../error/notfound-error'; /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ const patMiddleware = ( @@ -21,7 +22,14 @@ const patMiddleware = ( accountService.addPATSeen(apiToken); } } catch (error) { - logger.error(error); + if (error instanceof NotFoundError) { + logger.warn( + 'Tried to use a PAT token for user that no longer existed', + error, + ); + } else { + logger.error(error); + } } next(); };