From 793346031b84aca2d7fd972adc025bdaaec058b0 Mon Sep 17 00:00:00 2001 From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> Date: Mon, 22 Apr 2024 23:25:56 +0200 Subject: [PATCH] Rename backupServerPublicParams --- app/main.ts | 1 + config/default.json | 3 ++- config/production.json | 3 ++- ts/RemoteConfig.ts | 1 + ts/background.ts | 7 +++++-- ts/services/backups/credentials.ts | 8 ++++---- ts/services/backups/index.ts | 7 ++++++- ts/types/RendererConfig.ts | 1 + ts/util/isBackupEnabled.ts | 8 ++++++++ ts/window.d.ts | 1 + ts/windows/main/phase1-ipc.ts | 1 + 11 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 ts/util/isBackupEnabled.ts diff --git a/app/main.ts b/app/main.ts index dffa82c8b0..7f8406c2fc 100644 --- a/app/main.ts +++ b/app/main.ts @@ -2469,6 +2469,7 @@ ipc.on('get-config', async event => { serverPublicParams: config.get('serverPublicParams'), serverTrustRoot: config.get('serverTrustRoot'), genericServerPublicParams: config.get('genericServerPublicParams'), + backupServerPublicParams: config.get('backupServerPublicParams'), theme, appStartInitialSpellcheckSetting, diff --git a/config/default.json b/config/default.json index 2b353cf76b..2955dbaea6 100644 --- a/config/default.json +++ b/config/default.json @@ -26,5 +26,6 @@ "certificateAuthority": "-----BEGIN CERTIFICATE-----\nMIIF2zCCA8OgAwIBAgIUAMHz4g60cIDBpPr1gyZ/JDaaPpcwDQYJKoZIhvcNAQEL\nBQAwdTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcT\nDU1vdW50YWluIFZpZXcxHjAcBgNVBAoTFVNpZ25hbCBNZXNzZW5nZXIsIExMQzEZ\nMBcGA1UEAxMQU2lnbmFsIE1lc3NlbmdlcjAeFw0yMjAxMjYwMDQ1NTFaFw0zMjAx\nMjQwMDQ1NTBaMHUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYw\nFAYDVQQHEw1Nb3VudGFpbiBWaWV3MR4wHAYDVQQKExVTaWduYWwgTWVzc2VuZ2Vy\nLCBMTEMxGTAXBgNVBAMTEFNpZ25hbCBNZXNzZW5nZXIwggIiMA0GCSqGSIb3DQEB\nAQUAA4ICDwAwggIKAoICAQDEecifxMHHlDhxbERVdErOhGsLO08PUdNkATjZ1kT5\n1uPf5JPiRbus9F4J/GgBQ4ANSAjIDZuFY0WOvG/i0qvxthpW70ocp8IjkiWTNiA8\n1zQNQdCiWbGDU4B1sLi2o4JgJMweSkQFiyDynqWgHpw+KmvytCzRWnvrrptIfE4G\nPxNOsAtXFbVH++8JO42IaKRVlbfpe/lUHbjiYmIpQroZPGPY4Oql8KM3o39ObPnT\no1WoM4moyOOZpU3lV1awftvWBx1sbTBL02sQWfHRxgNVF+Pj0fdDMMFdFJobArrL\nVfK2Ua+dYN4pV5XIxzVarSRW73CXqQ+2qloPW/ynpa3gRtYeGWV4jl7eD0PmeHpK\nOY78idP4H1jfAv0TAVeKpuB5ZFZ2szcySxrQa8d7FIf0kNJe9gIRjbQ+XrvnN+ZZ\nvj6d+8uBJq8LfQaFhlVfI0/aIdggScapR7w8oLpvdflUWqcTLeXVNLVrg15cEDwd\nlV8PVscT/KT0bfNzKI80qBq8LyRmauAqP0CDjayYGb2UAabnhefgmRY6aBE5mXxd\nbyAEzzCS3vDxjeTD8v8nbDq+SD6lJi0i7jgwEfNDhe9XK50baK15Udc8Cr/ZlhGM\njNmWqBd0jIpaZm1rzWA0k4VwXtDwpBXSz8oBFshiXs3FD6jHY2IhOR3ppbyd4qRU\npwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV\nHQ4EFgQUtfNLxuXWS9DlgGuMUMNnW7yx83EwHwYDVR0jBBgwFoAUtfNLxuXWS9Dl\ngGuMUMNnW7yx83EwDQYJKoZIhvcNAQELBQADggIBABUeiryS0qjykBN75aoHO9bV\nPrrX+DSJIB9V2YzkFVyh/io65QJMG8naWVGOSpVRwUwhZVKh3JVp/miPgzTGAo7z\nhrDIoXc+ih7orAMb19qol/2Ha8OZLa75LojJNRbZoCR5C+gM8C+spMLjFf9k3JVx\ndajhtRUcR0zYhwsBS7qZ5Me0d6gRXD0ZiSbadMMxSw6KfKk3ePmPb9gX+MRTS63c\n8mLzVYB/3fe/bkpq4RUwzUHvoZf+SUD7NzSQRQQMfvAHlxk11TVNxScYPtxXDyiy\n3Cssl9gWrrWqQ/omuHipoH62J7h8KAYbr6oEIq+Czuenc3eCIBGBBfvCpuFOgckA\nXXE4MlBasEU0MO66GrTCgMt9bAmSw3TrRP12+ZUFxYNtqWluRU8JWQ4FCCPcz9pg\nMRBOgn4lTxDZG+I47OKNuSRjFEP94cdgxd3H/5BK7WHUz1tAGQ4BgepSXgmjzifF\nT5FVTDTl3ZnWUVBXiHYtbOBgLiSIkbqGMCLtrBtFIeQ7RRTb3L+IE9R0UB0cJB3A\nXbf1lVkOcmrdu2h8A32aCwtr5S1fBF1unlG7imPmqJfpOMWa8yIF/KWVm29JAPq8\nLrsybb0z5gg8w7ZblEuB9zOW9M3l60DXuJO6l7g+deV6P96rv2unHS8UlvWiVWDy\n9qfgAJizyy3kqM4lOwBH\n-----END CERTIFICATE-----\n", "serverPublicParams": "ABSY21VckQcbSXVNCGRYJcfWHiAMZmpTtTELcDmxgdFbtp/bWsSxZdMKzfCp8rvIs8ocCU3B37fT3r4Mi5qAemeGeR2X+/YmOGR5ofui7tD5mDQfstAI9i+4WpMtIe8KC3wU5w3Inq3uNWVmoGtpKndsNfwJrCg0Hd9zmObhypUnSkfYn2ooMOOnBpfdanRtrvetZUayDMSC5iSRcXKpdlukrpzzsCIvEwjwQlJYVPOQPj4V0F4UXXBdHSLK05uoPBCQG8G9rYIGedYsClJXnbrgGYG3eMTG5hnx4X4ntARBgELuMWWUEEfSK0mjXg+/2lPmWcTZWR9nkqgQQP0tbzuiPm74H2wMO4u1Wafe+UwyIlIT9L7KLS19Aw8r4sPrXZSSsOZ6s7M1+rTJN0bI5CKY2PX29y5Ok3jSWufIKcgKOnWoP67d5b2du2ZVJjpjfibNIHbT/cegy/sBLoFwtHogVYUewANUAXIaMPyCLRArsKhfJ5wBtTminG/PAvuBdJ70Z/bXVPf8TVsR292zQ65xwvWTejROW6AZX6aqucUjlENAErBme1YHmOSpU6tr6doJ66dPzVAWIanmO/5mgjNEDeK7DDqQdB1xd03HT2Qs2TxY3kCK8aAb/0iM0HQiXjxZ9HIgYhbtvGEnDKW5ILSUydqH/KBhW4Pb0jZWnqN/YgbWDKeJxnDbYcUob5ZY5Lt5ZCMKuaGUvCJRrCtuugSMaqjowCGRempsDdJEt+cMaalhZ6gczklJB/IbdwENW9KeVFPoFNFzhxWUIS5ML9riVYhAtE6JE5jX0xiHNVIIPthb458cfA8daR0nYfYAUKogQArm0iBezOO+mPk5vCNWI+wwkyFCqNDXz/qxl1gAntuCJtSfq9OC3NkdhQlgYQ==", "serverTrustRoot": "BbqY1DzohE4NUZoVF+L18oUPrK3kILllLEJh2UnPSsEx", - "genericServerPublicParams": "AHYrGb9IfugAAJiPKp+mdXUx+OL9zBolPYHYQz6GI1gWjpEu5me3zVNSvmYY4zWboZHif+HG1sDHSuvwFd0QszSwuSF4X4kRP3fJREdTZ5MCR0n55zUppTwfHRW2S4sdQ0JGz7YDQIJCufYSKh0pGNEHL6hv79Agrdnr4momr3oXdnkpVBIp3HWAQ6IbXQVSG18X36GaicI1vdT0UFmTwU2KTneluC2eyL9c5ff8PcmiS+YcLzh0OKYQXB5ZfQ06d6DiINvDQLy75zcfUOniLAj0lGJiHxGczin/RXisKSR8" + "genericServerPublicParams": "AHILOIrFPXX9laLbalbA9+L1CXpSbM/bTJXZGZiuyK1JaI6dK5FHHWL6tWxmHKYAZTSYmElmJ5z2A5YcirjO/yfoemE03FItyaf8W1fE4p14hzb5qnrmfXUSiAIVrhaXVwIwSzH6RL/+EO8jFIjJ/YfExfJ8aBl48CKHgu1+A6kWynhttonvWWx6h7924mIzW0Czj2ROuh4LwQyZypex4GuOPW8sgIT21KNZaafgg+KbV7XM1x1tF3XA17B4uGUaDbDw2O+nR1+U5p6qHPzmJ7ggFjSN6Utu+35dS1sS0P9N", + "backupServerPublicParams": "AHYrGb9IfugAAJiPKp+mdXUx+OL9zBolPYHYQz6GI1gWjpEu5me3zVNSvmYY4zWboZHif+HG1sDHSuvwFd0QszSwuSF4X4kRP3fJREdTZ5MCR0n55zUppTwfHRW2S4sdQ0JGz7YDQIJCufYSKh0pGNEHL6hv79Agrdnr4momr3oXdnkpVBIp3HWAQ6IbXQVSG18X36GaicI1vdT0UFmTwU2KTneluC2eyL9c5ff8PcmiS+YcLzh0OKYQXB5ZfQ06d6DiINvDQLy75zcfUOniLAj0lGJiHxGczin/RXisKSR8" } diff --git a/config/production.json b/config/production.json index 480e296ac7..fb3c848363 100644 --- a/config/production.json +++ b/config/production.json @@ -14,6 +14,7 @@ "registrationChallengeUrl": "https://signalcaptchas.org/registration/generate.html", "serverPublicParams": "AMhf5ywVwITZMsff/eCyudZx9JDmkkkbV6PInzG4p8x3VqVJSFiMvnvlEKWuRob/1eaIetR31IYeAbm0NdOuHH8Qi+Rexi1wLlpzIo1gstHWBfZzy1+qHRV5A4TqPp15YzBPm0WSggW6PbSn+F4lf57VCnHF7p8SvzAA2ZZJPYJURt8X7bbg+H3i+PEjH9DXItNEqs2sNcug37xZQDLm7X36nOoGPs54XsEGzPdEV+itQNGUFEjY6X9Uv+Acuks7NpyGvCoKxGwgKgE5XyJ+nNKlyHHOLb6N1NuHyBrZrgtY/JYJHRooo5CEqYKBqdFnmbTVGEkCvJKxLnjwKWf+fEPoWeQFj5ObDjcKMZf2Jm2Ae69x+ikU5gBXsRmoF94GXTLfN0/vLt98KDPnxwAQL9j5V1jGOY8jQl6MLxEs56cwXN0dqCnImzVH3TZT1cJ8SW1BRX6qIVxEzjsSGx3yxF3suAilPMqGRp4ffyopjMD1JXiKR2RwLKzizUe5e8XyGOy9fplzhw3jVzTRyUZTRSZKkMLWcQ/gv0E4aONNqs4P+NameAZYOD12qRkxosQQP5uux6B2nRyZ7sAV54DgFyLiRcq1FvwKw2EPQdk4HDoePrO/RNUbyNddnM/mMgj4FW65xCoT1LmjrIjsv/Ggdlx46ueczhMgtBunx1/w8k8V+l8LVZ8gAT6wkU5J+DPQalQguMg12Jzug3q4TbdHiGCmD9EunCwOmsLuLJkz6EcSYXtrlDEnAM+hicw7iergYLLlMXpfTdGxJCWJmP4zqUFeTTmsmhsjGBt7NiEB/9pFFEB3pSbf4iiUukw63Eo8Aqnf4iwob6X1QviCWuc8t0LUlT9vALgh/f2DPVOOmR0RW6bgRvc7DSF20V/omg+YBw==", "serverTrustRoot": "BXu6QIKVz5MA8gstzfOgRQGqyLqOwNKHL6INkv3IHWMF", - "genericServerPublicParams": "AJwNSU55fsFCbgaxGRD11wO1juAs8Yr5GF8FPlGzzvdJJIKH5/4CC7ZJSOe3yL2vturVaRU2Cx0n751Vt8wkj1bozK3CBV1UokxV09GWf+hdVImLGjXGYLLhnI1J2TWEe7iWHyb553EEnRb5oxr9n3lUbNAJuRmFM7hrr0Al0F0wrDD4S8lo2mGaXe0MJCOM166F8oYRQqpFeEHfiLnxA1O8ZLh7vMdv4g9jI5phpRBTsJ5IjiJrWeP0zdIGHEssUeprDZ9OUJ14m0v61eYJMKsf59Bn+mAT2a7YfB+Don9O", + "genericServerPublicParams": "AByD873dTilmOSG0TjKrvpeaKEsUmIO8Vx9BeMmftwUs9v7ikPwM8P3OHyT0+X3EUMZrSe9VUp26Wai51Q9I8mdk0hX/yo7CeFGJyzoOqn8e/i4Ygbn5HoAyXJx5eXfIbqpc0bIxzju4H/HOQeOpt6h742qii5u/cbwOhFZCsMIbElZTaeU+BWMBQiZHIGHT5IE0qCordQKZ5iPZom0HeFa8Yq0ShuEyAl0WINBiY6xE3H/9WnvzXBbMuuk//eRxXgzO8ieCeK8FwQNxbfXqZm6Ro1cMhCOF3u7xoX83QhpN", + "backupServerPublicParams": "AJwNSU55fsFCbgaxGRD11wO1juAs8Yr5GF8FPlGzzvdJJIKH5/4CC7ZJSOe3yL2vturVaRU2Cx0n751Vt8wkj1bozK3CBV1UokxV09GWf+hdVImLGjXGYLLhnI1J2TWEe7iWHyb553EEnRb5oxr9n3lUbNAJuRmFM7hrr0Al0F0wrDD4S8lo2mGaXe0MJCOM166F8oYRQqpFeEHfiLnxA1O8ZLh7vMdv4g9jI5phpRBTsJ5IjiJrWeP0zdIGHEssUeprDZ9OUJ14m0v61eYJMKsf59Bn+mAT2a7YfB+Don9O", "updatesEnabled": true } diff --git a/ts/RemoteConfig.ts b/ts/RemoteConfig.ts index ed9a062113..8a7751e3be 100644 --- a/ts/RemoteConfig.ts +++ b/ts/RemoteConfig.ts @@ -17,6 +17,7 @@ import { getCountryCode } from './types/PhoneNumber'; export type ConfigKeyType = | 'desktop.calling.adhoc' | 'desktop.clientExpiration' + | 'desktop.backup.credentialFetch' | 'desktop.groupMultiTypingIndicators' | 'desktop.internalUser' | 'desktop.mediaQuality.levels' diff --git a/ts/background.ts b/ts/background.ts index d6c13bde09..de64b9a468 100644 --- a/ts/background.ts +++ b/ts/background.ts @@ -39,6 +39,7 @@ import { isWindowDragElement } from './util/isWindowDragElement'; import { assertDev, strictAssert } from './util/assert'; import { filter } from './util/iterables'; import { isNotNil } from './util/isNotNil'; +import { isBackupEnabled } from './util/isBackupEnabled'; import { setAppLoadingScreenMessage } from './setAppLoadingScreenMessage'; import { IdleDetector } from './IdleDetector'; import { expiringMessagesDeletionService } from './services/expiringMessagesDeletion'; @@ -700,8 +701,6 @@ export async function startApp(): Promise { storage: window.storage, }); - backupsService.start(); - areWeASubscriberService.update(window.storage, server); void cleanupSessionResets(); @@ -1670,6 +1669,10 @@ export async function startApp(): Promise { await me.setProfileKey(Bytes.toBase64(profileKey)); } + if (isBackupEnabled()) { + backupsService.start(); + } + if (connectCount === 0) { try { // Force a re-fetch before we process our queue. We may want to turn on diff --git a/ts/services/backups/credentials.ts b/ts/services/backups/credentials.ts index 8b4a913fb5..923927976e 100644 --- a/ts/services/backups/credentials.ts +++ b/ts/services/backups/credentials.ts @@ -76,7 +76,7 @@ export class BackupCredentials { ); const serverPublicParams = new GenericServerPublicParams( - Buffer.from(window.getGenericServerPublicParams(), 'base64') + Buffer.from(window.getBackupServerPublicParams(), 'base64') ); const presentation = cred.present(serverPublicParams).serialize(); @@ -145,7 +145,7 @@ export class BackupCredentials { this.fetchBackoff.reset(); this.scheduleFetch(); } catch (error) { - const delay = this.fetchBackoff.get(); + const delay = this.fetchBackoff.getAndIncrement(); log.error( 'BackupCredentials: periodic fetch failed with ' + `error: ${toLogFormat(error)}, retrying in ${delay}ms` @@ -174,7 +174,7 @@ export class BackupCredentials { const now = Date.now(); const startDayInMs = toDayMillis(now); - const endDayInMs = now + 6 * DAY; + const endDayInMs = toDayMillis(now + 6 * DAY); // And fetch missing credentials const ctx = getAuthContext(); @@ -214,7 +214,7 @@ export class BackupCredentials { log.info(`BackupCredentials: got ${response.credentials.length}`); const serverPublicParams = new GenericServerPublicParams( - Buffer.from(window.getGenericServerPublicParams(), 'base64') + Buffer.from(window.getBackupServerPublicParams(), 'base64') ); const result = new Array(); diff --git a/ts/services/backups/index.ts b/ts/services/backups/index.ts index 911616291b..87b131d824 100644 --- a/ts/services/backups/index.ts +++ b/ts/services/backups/index.ts @@ -40,8 +40,13 @@ export class BackupsService { public readonly api = new BackupAPI(this.credentials); public start(): void { - strictAssert(!this.isStarted, 'Already started'); + if (this.isStarted) { + log.warn('BackupsService: already started'); + return; + } + this.isStarted = true; + log.info('BackupsService: starting...'); setInterval(() => { drop(this.runPeriodicRefresh()); diff --git a/ts/types/RendererConfig.ts b/ts/types/RendererConfig.ts index 5807229185..c4390bd30a 100644 --- a/ts/types/RendererConfig.ts +++ b/ts/types/RendererConfig.ts @@ -65,6 +65,7 @@ export const rendererConfigSchema = z.object({ serverPublicParams: configRequiredStringSchema, serverTrustRoot: configRequiredStringSchema, genericServerPublicParams: configRequiredStringSchema, + backupServerPublicParams: configRequiredStringSchema, serverUrl: configRequiredStringSchema, sfuUrl: configRequiredStringSchema, storageUrl: configRequiredStringSchema, diff --git a/ts/util/isBackupEnabled.ts b/ts/util/isBackupEnabled.ts new file mode 100644 index 0000000000..3a4ddce1df --- /dev/null +++ b/ts/util/isBackupEnabled.ts @@ -0,0 +1,8 @@ +// Copyright 2024 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import * as RemoteConfig from '../RemoteConfig'; + +export function isBackupEnabled(): boolean { + return Boolean(RemoteConfig.isEnabled('desktop.backup.credentialFetch')); +} diff --git a/ts/window.d.ts b/ts/window.d.ts index 01c1975698..bcaed33da0 100644 --- a/ts/window.d.ts +++ b/ts/window.d.ts @@ -194,6 +194,7 @@ declare global { getInteractionMode: () => 'mouse' | 'keyboard'; getServerPublicParams: () => string; getGenericServerPublicParams: () => string; + getBackupServerPublicParams: () => string; getSfuUrl: () => string; getIceServerOverride: () => string; getSocketStatus: () => SocketStatus; diff --git a/ts/windows/main/phase1-ipc.ts b/ts/windows/main/phase1-ipc.ts index d0b4f4fc14..08b74abc0d 100644 --- a/ts/windows/main/phase1-ipc.ts +++ b/ts/windows/main/phase1-ipc.ts @@ -56,6 +56,7 @@ window.getHostName = () => config.hostname; window.getServerTrustRoot = () => config.serverTrustRoot; window.getServerPublicParams = () => config.serverPublicParams; window.getGenericServerPublicParams = () => config.genericServerPublicParams; +window.getBackupServerPublicParams = () => config.backupServerPublicParams; window.getSfuUrl = () => config.sfuUrl; window.isBehindProxy = () => Boolean(config.proxyUrl);