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; }