From 8b87fe23e2266555d909a3047fa51e1982af1ef4 Mon Sep 17 00:00:00 2001 From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> Date: Mon, 20 Jun 2022 17:31:32 -0700 Subject: [PATCH] Fix UA string --- ts/test-node/logging/uploadDebugLogs_test.ts | 6 +++--- ts/test-node/util/getUserAgent_test.ts | 17 +++++++++++++---- ts/util/getUserAgent.ts | 15 ++++++++++++--- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/ts/test-node/logging/uploadDebugLogs_test.ts b/ts/test-node/logging/uploadDebugLogs_test.ts index ff01d161e..bd6bc1234 100644 --- a/ts/test-node/logging/uploadDebugLogs_test.ts +++ b/ts/test-node/logging/uploadDebugLogs_test.ts @@ -18,7 +18,7 @@ describe('upload', () => { beforeEach(function beforeEach() { this.sandbox = sinon.createSandbox(); - this.sandbox.stub(process, 'platform').get(() => 'linux'); + this.sandbox.stub(process, 'platform').get(() => 'freebsd'); this.fakeGet = this.sandbox.stub(got, 'get'); this.fakePost = this.sandbox.stub(got, 'post'); @@ -48,7 +48,7 @@ describe('upload', () => { sinon.assert.calledOnce(this.fakeGet); sinon.assert.calledWith(this.fakeGet, 'https://debuglogs.org/', { responseType: 'json', - headers: { 'User-Agent': 'Signal-Desktop/1.2.3 Linux' }, + headers: { 'User-Agent': 'Signal-Desktop/1.2.3' }, timeout: { request: durations.MINUTE }, }); @@ -56,7 +56,7 @@ describe('upload', () => { sinon.assert.calledOnce(this.fakePost); sinon.assert.calledWith(this.fakePost, 'https://example.com/fake-upload', { - headers: { 'User-Agent': 'Signal-Desktop/1.2.3 Linux' }, + headers: { 'User-Agent': 'Signal-Desktop/1.2.3' }, timeout: { request: durations.MINUTE }, body: sinon.match((value: unknown) => { if (!(value instanceof FormData)) { diff --git a/ts/test-node/util/getUserAgent_test.ts b/ts/test-node/util/getUserAgent_test.ts index 45527d600..4761d1ae6 100644 --- a/ts/test-node/util/getUserAgent_test.ts +++ b/ts/test-node/util/getUserAgent_test.ts @@ -17,21 +17,30 @@ describe('getUserAgent', () => { it('returns the right User-Agent on Windows', function test() { this.sandbox.stub(process, 'platform').get(() => 'win32'); - assert.strictEqual(getUserAgent('1.2.3'), 'Signal-Desktop/1.2.3 Windows'); + assert.strictEqual( + getUserAgent('1.2.3', '10.0.22000'), + 'Signal-Desktop/1.2.3 Windows 10.0.22000' + ); }); it('returns the right User-Agent on macOS', function test() { this.sandbox.stub(process, 'platform').get(() => 'darwin'); - assert.strictEqual(getUserAgent('1.2.3'), 'Signal-Desktop/1.2.3 macOS'); + assert.strictEqual( + getUserAgent('1.2.3', '21.5.0'), + 'Signal-Desktop/1.2.3 macOS 21.5.0' + ); }); it('returns the right User-Agent on Linux', function test() { this.sandbox.stub(process, 'platform').get(() => 'linux'); - assert.strictEqual(getUserAgent('1.2.3'), 'Signal-Desktop/1.2.3 Linux'); + assert.strictEqual( + getUserAgent('1.2.3', '20.04'), + 'Signal-Desktop/1.2.3 Linux 20.04' + ); }); it('omits the platform on unsupported platforms', function test() { this.sandbox.stub(process, 'platform').get(() => 'freebsd'); - assert.strictEqual(getUserAgent('1.2.3'), 'Signal-Desktop/1.2.3'); + assert.strictEqual(getUserAgent('1.2.3', '13.1'), 'Signal-Desktop/1.2.3'); }); }); diff --git a/ts/util/getUserAgent.ts b/ts/util/getUserAgent.ts index 55b4e07da..3e7c379d0 100644 --- a/ts/util/getUserAgent.ts +++ b/ts/util/getUserAgent.ts @@ -1,6 +1,8 @@ // Copyright 2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only +import os from 'os'; + import { getOwn } from './getOwn'; const PLATFORM_STRINGS: { [platform: string]: string } = { @@ -9,12 +11,19 @@ const PLATFORM_STRINGS: { [platform: string]: string } = { linux: 'Linux', }; -export function getUserAgent(appVersion: string): string { +export function getUserAgent( + appVersion: string, + release = os.release() +): string { // `process.platform` could be missing if someone figures out how to compile Signal on // an unsupported OS and forgets to update this file. We'd rather send nothing than // crash. const platformString = getOwn(PLATFORM_STRINGS, process.platform); - const platformStringWithSpace = platformString ? ` ${platformString}` : ''; - return `Signal-Desktop/${appVersion}${platformStringWithSpace}`; + let result = `Signal-Desktop/${appVersion}`; + if (platformString) { + result += ` ${platformString} ${release}`; + } + + return result; }