UNPKG

16 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/NsisUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { AllPublishOptions, newError, PackageFileInfo, BlockMap, CURRENT_APP_PACKAGE_FILE_NAME, CURRENT_APP_INSTALLER_FILE_NAME } from \"builder-util-runtime\"\nimport { spawn } from \"child_process\"\nimport * as path from \"path\"\nimport { AppAdapter } from \"./AppAdapter\"\nimport { DownloadUpdateOptions } from \"./AppUpdater\"\nimport { BaseUpdater, InstallOptions } from \"./BaseUpdater\"\nimport { FileWithEmbeddedBlockMapDifferentialDownloader } from \"./differentialDownloader/FileWithEmbeddedBlockMapDifferentialDownloader\"\nimport { GenericDifferentialDownloader } from \"./differentialDownloader/GenericDifferentialDownloader\"\nimport { newUrlFromBase, ResolvedUpdateFileInfo } from \"./main\"\nimport { findFile, Provider } from \"./providers/Provider\"\nimport { unlink } from \"fs-extra\"\nimport { verifySignature } from \"./windowsExecutableCodeSignatureVerifier\"\nimport { URL } from \"url\"\nimport { gunzipSync } from \"zlib\"\n\nexport class NsisUpdater extends BaseUpdater {\n constructor(options?: AllPublishOptions | null, app?: AppAdapter) {\n super(options, app)\n }\n\n /*** @private */\n protected doDownloadUpdate(downloadUpdateOptions: DownloadUpdateOptions): Promise<Array<string>> {\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider\n const fileInfo = findFile(provider.resolveFiles(downloadUpdateOptions.updateInfoAndProvider.info), \"exe\")!!\n return this.executeDownload({\n fileExtension: \"exe\",\n downloadUpdateOptions,\n fileInfo,\n task: async (destinationFile, downloadOptions, packageFile, removeTempDirIfAny) => {\n const packageInfo = fileInfo.packageInfo\n const isWebInstaller = packageInfo != null && packageFile != null\n if (isWebInstaller || await this.differentialDownloadInstaller(fileInfo, downloadUpdateOptions, destinationFile, provider)) {\n await this.httpExecutor.download(fileInfo.url, destinationFile, downloadOptions)\n }\n\n const signatureVerificationStatus = await this.verifySignature(destinationFile)\n if (signatureVerificationStatus != null) {\n await removeTempDirIfAny()\n // noinspection ThrowInsideFinallyBlockJS\n throw newError(`New version ${downloadUpdateOptions.updateInfoAndProvider.info.version} is not signed by the application owner: ${signatureVerificationStatus}`, \"ERR_UPDATER_INVALID_SIGNATURE\")\n }\n\n if (isWebInstaller) {\n if (await this.differentialDownloadWebPackage(packageInfo!!, packageFile!!, provider)) {\n try {\n await this.httpExecutor.download(new URL(packageInfo!!.path), packageFile!!, {\n headers: downloadUpdateOptions.requestHeaders,\n cancellationToken: downloadUpdateOptions.cancellationToken,\n sha512: packageInfo!!.sha512,\n })\n }\n catch (e) {\n try {\n await unlink(packageFile!!)\n }\n catch (ignored) {\n // ignore\n }\n\n throw e\n }\n }\n }\n },\n })\n }\n\n // $certificateInfo = (Get-AuthenticodeSignature 'xxx\\yyy.exe'\n // | where {$_.Status.Equals([System.Management.Automation.SignatureStatus]::Valid) -and $_.SignerCertificate.Subject.Contains(\"CN=siemens.com\")})\n // | Out-String ; if ($certificateInfo) { exit 0 } else { exit 1 }\n private async verifySignature(tempUpdateFile: string): Promise<string | null> {\n let publisherName: Array<string> | string | null\n try {\n publisherName = (await this.configOnDisk.value).publisherName\n if (publisherName == null) {\n return null\n }\n }\n catch (e) {\n if (e.code === \"ENOENT\") {\n // no app-update.yml\n return null\n }\n throw e\n }\n return await verifySignature(Array.isArray(publisherName) ? publisherName : [publisherName], tempUpdateFile, this._logger)\n }\n\n protected doInstall(options: InstallOptions): boolean {\n const args = [\"--updated\"]\n if (options.isSilent) {\n args.push(\"/S\")\n }\n\n if (options.isForceRunAfter) {\n args.push(\"--force-run\")\n }\n\n const packagePath = this.downloadedUpdateHelper == null ? null : this.downloadedUpdateHelper.packageFile\n if (packagePath != null) {\n // only = form is supported\n args.push(`--package-file=${packagePath}`)\n }\n\n const callUsingElevation = (): void => {\n _spawn(path.join(process.resourcesPath!!, \"elevate.exe\"), [options.installerPath].concat(args))\n .catch(e => this.dispatchError(e))\n }\n\n if (options.isAdminRightsRequired) {\n this._logger.info(\"isAdminRightsRequired is set to true, run installer using elevate.exe\")\n callUsingElevation()\n return true\n }\n\n _spawn(options.installerPath, args)\n .catch((e: Error) => {\n // https://github.com/electron-userland/electron-builder/issues/1129\n // Node 8 sends errors: https://nodejs.org/dist/latest-v8.x/docs/api/errors.html#errors_common_system_errors\n const errorCode = (e as NodeJS.ErrnoException).code\n this._logger.info(`Cannot run installer: error code: ${errorCode}, error message: \"${e.message}\", will be executed again using elevate if EACCES\"`)\n if (errorCode === \"UNKNOWN\" || errorCode === \"EACCES\") {\n callUsingElevation()\n }\n else {\n this.dispatchError(e)\n }\n })\n return true\n }\n\n private async differentialDownloadInstaller(fileInfo: ResolvedUpdateFileInfo, downloadUpdateOptions: DownloadUpdateOptions, installerPath: string, provider: Provider<any>): Promise<boolean> {\n try {\n if (this._testOnlyOptions != null && !this._testOnlyOptions.isUseDifferentialDownload) {\n return true\n }\n\n const newBlockMapUrl = newUrlFromBase(`${fileInfo.url.pathname}.blockmap`, fileInfo.url)\n const oldBlockMapUrl = newUrlFromBase(`${fileInfo.url.pathname.replace(new RegExp(downloadUpdateOptions.updateInfoAndProvider.info.version, \"g\"), this.app.version)}.blockmap`, fileInfo.url)\n this._logger.info(`Download block maps (old: \"${oldBlockMapUrl.href}\", new: ${newBlockMapUrl.href})`)\n\n const downloadBlockMap = async (url: URL): Promise<BlockMap> => {\n const data = await this.httpExecutor.downloadToBuffer(url, {\n headers: downloadUpdateOptions.requestHeaders,\n cancellationToken: downloadUpdateOptions.cancellationToken,\n })\n\n if (data == null || data.length === 0) {\n throw new Error(`Blockmap \"${url.href}\" is empty`)\n }\n\n try {\n return JSON.parse(gunzipSync(data).toString())\n }\n catch (e) {\n throw new Error(`Cannot parse blockmap \"${url.href}\", error: ${e}, raw data: ${data}`)\n }\n }\n\n const blockMapDataList = await Promise.all([downloadBlockMap(oldBlockMapUrl), downloadBlockMap(newBlockMapUrl)])\n await new GenericDifferentialDownloader(fileInfo.info, this.httpExecutor, {\n newUrl: fileInfo.url,\n oldFile: path.join(this.downloadedUpdateHelper!!.cacheDir, CURRENT_APP_INSTALLER_FILE_NAME),\n logger: this._logger,\n newFile: installerPath,\n isUseMultipleRangeRequest: provider.isUseMultipleRangeRequest,\n requestHeaders: downloadUpdateOptions.requestHeaders,\n })\n .download(blockMapDataList[0], blockMapDataList[1])\n return false\n }\n catch (e) {\n this._logger.error(`Cannot download differentially, fallback to full download: ${e.stack || e}`)\n if (this._testOnlyOptions != null) {\n // test mode\n throw e\n }\n return true\n }\n }\n\n private async differentialDownloadWebPackage(packageInfo: PackageFileInfo, packagePath: string, provider: Provider<any>): Promise<boolean> {\n if (packageInfo.blockMapSize == null) {\n return true\n }\n\n try {\n await new FileWithEmbeddedBlockMapDifferentialDownloader(packageInfo, this.httpExecutor, {\n newUrl: new URL(packageInfo.path),\n oldFile: path.join(this.downloadedUpdateHelper!!.cacheDir, CURRENT_APP_PACKAGE_FILE_NAME),\n logger: this._logger,\n newFile: packagePath,\n requestHeaders: this.requestHeaders,\n isUseMultipleRangeRequest: provider.isUseMultipleRangeRequest,\n })\n .download()\n }\n catch (e) {\n this._logger.error(`Cannot download differentially, fallback to full download: ${e.stack || e}`)\n // during test (developer machine mac or linux) we must throw error\n return process.platform === \"win32\"\n }\n return false\n }\n}\n\n/**\n * This handles both node 8 and node 10 way of emitting error when spawning a process\n * - node 8: Throws the error\n * - node 10: Emit the error(Need to listen with on)\n */\nasync function _spawn(exe: string, args: Array<string>): Promise<any> {\n return new Promise((resolve, reject) => {\n try {\n const process = spawn(exe, args, {\n detached: true,\n stdio: \"ignore\",\n })\n process.on(\"error\", error => {\n reject(error)\n })\n process.unref()\n\n if (process.pid !== undefined) {\n resolve(true)\n }\n }\n catch (error) {\n reject(error)\n }\n })\n}\n"],"sourceRoot":""}