From 14a0b769565035a625a63aa83a2745dd5ef603e3 Mon Sep 17 00:00:00 2001 From: maxjeffos <44034094+maxjeffos@users.noreply.github.com> Date: Wed, 11 Aug 2021 16:49:37 -0400 Subject: [PATCH] fix: use OAUTH token if set for analytics --- src/lib/analytics/index.ts | 5 +++-- src/lib/api-token.ts | 4 ++++ test/jest/acceptance/analytics.spec.ts | 20 +++++++++++++++++++- test/jest/unit/lib/analytics/index.spec.ts | 21 +++++++++++++++++++++ 4 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 test/jest/unit/lib/analytics/index.spec.ts diff --git a/src/lib/analytics/index.ts b/src/lib/analytics/index.ts index 18f0dd9774c..9d39c3ace18 100644 --- a/src/lib/analytics/index.ts +++ b/src/lib/analytics/index.ts @@ -1,4 +1,5 @@ const snyk = require('../../lib'); +import { someTokenExists, getAuthHeader } from '../api-token'; const config = require('../config'); import { makeRequest } from '../request'; const debug = require('debug')('snyk'); @@ -66,8 +67,8 @@ export async function postAnalytics( debug('analytics', JSON.stringify(analyticsData, null, ' ')); const headers = {}; - if (snyk.api) { - headers['authorization'] = 'token ' + snyk.api; + if (someTokenExists()) { + headers['authorization'] = getAuthHeader(); } const queryStringParams = {}; diff --git a/src/lib/api-token.ts b/src/lib/api-token.ts index 0a448ed3866..3a6b60c6c83 100644 --- a/src/lib/api-token.ts +++ b/src/lib/api-token.ts @@ -44,3 +44,7 @@ export function getAuthHeader(): string { } return `token ${api()}`; } + +export function someTokenExists(): boolean { + return Boolean(getOAuthToken() || getDockerToken() || api()); +} diff --git a/test/jest/acceptance/analytics.spec.ts b/test/jest/acceptance/analytics.spec.ts index 122b63f4139..fe03c6c7fe9 100644 --- a/test/jest/acceptance/analytics.spec.ts +++ b/test/jest/acceptance/analytics.spec.ts @@ -22,7 +22,6 @@ describe('analytics module', () => { SNYK_INTEGRATION_NAME: 'JENKINS', SNYK_INTEGRATION_VERSION: '1.2.3', }; - server = fakeServer(baseApi, env.SNYK_TOKEN); server.listen(port, () => { done(); @@ -300,6 +299,25 @@ describe('analytics module', () => { }); }); + it('uses OAUTH token if set', async () => { + const project = await createProjectFromWorkspace('npm-package'); + const { code } = await runSnykCLI('version', { + cwd: project.path(), + env: { + ...env, + SNYK_OAUTH_TOKEN: 'oauth-jwt-token', + }, + }); + expect(code).toBe(0); + + const lastRequest = server.popRequest(); + expect(lastRequest).toMatchObject({ + headers: { + authorization: 'Bearer oauth-jwt-token', + }, + }); + }); + it("won't send analytics if disable analytics is set", async () => { const { code } = await runSnykCLI(`version`, { env: { diff --git a/test/jest/unit/lib/analytics/index.spec.ts b/test/jest/unit/lib/analytics/index.spec.ts new file mode 100644 index 00000000000..81ab65579b6 --- /dev/null +++ b/test/jest/unit/lib/analytics/index.spec.ts @@ -0,0 +1,21 @@ +import * as analytics from '../../../../../src/lib/analytics'; +import * as request from '../../../../../src/lib/request'; +import { argsFrom } from './utils'; +import * as apiTokenModule from '../../../../../src/lib/api-token'; + +describe('analytics module', () => { + it('sends anaytics with no token set', async () => { + analytics.add('k1', 'v1'); + const requestSpy = jest.spyOn(request, 'makeRequest'); + const someTokenExistsSpy = jest.spyOn(apiTokenModule, 'someTokenExists'); + someTokenExistsSpy.mockReturnValue(false); + requestSpy.mockImplementation(jest.fn()); + await analytics.addDataAndSend({ + args: argsFrom({}), + }); + expect(requestSpy).toBeCalledTimes(1); + expect(requestSpy.mock.calls[0][0]).not.toHaveProperty( + 'headers.authorization', + ); + }); +});