From 5e381c556d12ce185bb7ea720380509c1ddc5cf7 Mon Sep 17 00:00:00 2001 From: Devin Binnie <52460000+devinbinnie@users.noreply.github.com> Date: Tue, 25 Jan 2022 15:30:19 -0500 Subject: [PATCH] fix: Allow disabling of webinstaller files to avoid confusion with actual installers (#6575) Co-authored-by: Guillermo Vaya --- .changeset/seven-elephants-sing.md | 5 +++++ packages/electron-updater/src/AppUpdater.ts | 13 +++++++++++++ packages/electron-updater/src/NsisUpdater.ts | 11 +++++++++++ 3 files changed, 29 insertions(+) create mode 100644 .changeset/seven-elephants-sing.md diff --git a/.changeset/seven-elephants-sing.md b/.changeset/seven-elephants-sing.md new file mode 100644 index 0000000000..0440dd3dbd --- /dev/null +++ b/.changeset/seven-elephants-sing.md @@ -0,0 +1,5 @@ +--- +"electron-updater": major +--- + +fix: Allow disabling of webinstaller files to avoid confusion with actual installers diff --git a/packages/electron-updater/src/AppUpdater.ts b/packages/electron-updater/src/AppUpdater.ts index 48b90793c4..b1a1d14e05 100644 --- a/packages/electron-updater/src/AppUpdater.ts +++ b/packages/electron-updater/src/AppUpdater.ts @@ -51,6 +51,17 @@ export abstract class AppUpdater extends EventEmitter { */ allowDowngrade = false + /** + * Web installer files might not have signature verification, this switch prevents to load them unless it is needed. + * + * Currently false to prevent breaking the current API, but it should be changed to default true at some point that + * breaking changes are allowed. + * + * @default false + */ + + disableWebInstaller = false + /** * The current application version. */ @@ -443,6 +454,7 @@ export abstract class AppUpdater extends EventEmitter { updateInfoAndProvider, requestHeaders: this.computeRequestHeaders(updateInfoAndProvider.provider), cancellationToken, + disableWebInstaller: this.disableWebInstaller, }).catch(e => { throw errorHandler(e) }) @@ -644,6 +656,7 @@ export interface DownloadUpdateOptions { readonly updateInfoAndProvider: UpdateInfoAndProvider readonly requestHeaders: OutgoingHttpHeaders readonly cancellationToken: CancellationToken + readonly disableWebInstaller?: boolean } function hasPrereleaseComponents(version: SemVer) { diff --git a/packages/electron-updater/src/NsisUpdater.ts b/packages/electron-updater/src/NsisUpdater.ts index e237acc51d..5cf8c2e82d 100644 --- a/packages/electron-updater/src/NsisUpdater.ts +++ b/packages/electron-updater/src/NsisUpdater.ts @@ -31,6 +31,17 @@ export class NsisUpdater extends BaseUpdater { task: async (destinationFile, downloadOptions, packageFile, removeTempDirIfAny) => { const packageInfo = fileInfo.packageInfo const isWebInstaller = packageInfo != null && packageFile != null + if (isWebInstaller && downloadUpdateOptions.disableWebInstaller) { + throw newError( + `Unable to download new version ${downloadUpdateOptions.updateInfoAndProvider.info.version}. Web Installers are disabled`, + "ERR_UPDATER_WEB_INSTALLER_DISABLED" + ) + } + if (!isWebInstaller && !downloadUpdateOptions.disableWebInstaller) { + this._logger.warn( + "disableWebInstaller is set to false, you should set it to true if you do not plan on using a web installer. This will default to true in a future version." + ) + } if (isWebInstaller || (await this.differentialDownloadInstaller(fileInfo, downloadUpdateOptions, destinationFile, provider))) { await this.httpExecutor.download(fileInfo.url, destinationFile, downloadOptions) }