diff --git a/docs/Developer API.md b/docs/Developer API.md index 7f49195a454..9e73f89c7d6 100644 --- a/docs/Developer API.md +++ b/docs/Developer API.md @@ -3405,17 +3405,23 @@ Please note — on macOS [you need to register an `open-url` event handler](http ## electron-updater/out/GitHubProvider * [electron-updater/out/GitHubProvider](#module_electron-updater/out/GitHubProvider) - * [.GitHubProvider](#GitHubProvider) ⇐ [Provider](Auto-Update#Provider) + * [.BaseGitHubProvider](#BaseGitHubProvider) ⇐ [Provider](Auto-Update#Provider) + * [.GitHubProvider](#GitHubProvider) ⇐ [BaseGitHubProvider](#BaseGitHubProvider) * [`.getLatestVersion()`](#module_electron-updater/out/GitHubProvider.GitHubProvider+getLatestVersion) ⇒ Promise<[UpdateInfo](Publishing-Artifacts#UpdateInfo)> * [`.getUpdateFile(versionInfo)`](#module_electron-updater/out/GitHubProvider.GitHubProvider+getUpdateFile) ⇒ Promise<[FileInfo](Auto-Update#FileInfo)> - + -### GitHubProvider ⇐ [Provider](Auto-Update#Provider) +### BaseGitHubProvider ⇐ [Provider](Auto-Update#Provider) **Kind**: class of [electron-updater/out/GitHubProvider](#module_electron-updater/out/GitHubProvider) **Extends**: [Provider](Auto-Update#Provider) + -* [.GitHubProvider](#GitHubProvider) ⇐ [Provider](Auto-Update#Provider) +### GitHubProvider ⇐ [BaseGitHubProvider](#BaseGitHubProvider) +**Kind**: class of [electron-updater/out/GitHubProvider](#module_electron-updater/out/GitHubProvider) +**Extends**: [BaseGitHubProvider](#BaseGitHubProvider) + +* [.GitHubProvider](#GitHubProvider) ⇐ [BaseGitHubProvider](#BaseGitHubProvider) * [`.getLatestVersion()`](#module_electron-updater/out/GitHubProvider.GitHubProvider+getLatestVersion) ⇒ Promise<[UpdateInfo](Publishing-Artifacts#UpdateInfo)> * [`.getUpdateFile(versionInfo)`](#module_electron-updater/out/GitHubProvider.GitHubProvider+getUpdateFile) ⇒ Promise<[FileInfo](Auto-Update#FileInfo)> @@ -3523,23 +3529,47 @@ Start downloading update manually. You can use this method if `autoDownload` opt ## electron-updater/out/PrivateGitHubProvider * [electron-updater/out/PrivateGitHubProvider](#module_electron-updater/out/PrivateGitHubProvider) - * [.PrivateGitHubProvider](#PrivateGitHubProvider) ⇐ [Provider](Auto-Update#Provider) - * [`.getLatestVersion()`](#module_electron-updater/out/PrivateGitHubProvider.PrivateGitHubProvider+getLatestVersion) ⇒ Promise<[UpdateInfo](Publishing-Artifacts#UpdateInfo)> + * [`.Asset`](#Asset) + * [`.PrivateGitHubUpdateInfo`](#PrivateGitHubUpdateInfo) ⇐ [UpdateInfo](Publishing-Artifacts#UpdateInfo) + * [.PrivateGitHubProvider](#PrivateGitHubProvider) ⇐ [BaseGitHubProvider](#BaseGitHubProvider) + * [`.getLatestVersion()`](#module_electron-updater/out/PrivateGitHubProvider.PrivateGitHubProvider+getLatestVersion) ⇒ Promise<[PrivateGitHubUpdateInfo](#PrivateGitHubUpdateInfo)> * [`.getUpdateFile(versionInfo)`](#module_electron-updater/out/PrivateGitHubProvider.PrivateGitHubProvider+getUpdateFile) ⇒ Promise<[FileInfo](Auto-Update#FileInfo)> + + +### `Asset` +**Kind**: interface of [electron-updater/out/PrivateGitHubProvider](#module_electron-updater/out/PrivateGitHubProvider) +**Properties** + +| Name | Type | +| --- | --- | +| **name**| string | +| **url**| string | + + + +### `PrivateGitHubUpdateInfo` ⇐ [UpdateInfo](Publishing-Artifacts#UpdateInfo) +**Kind**: interface of [electron-updater/out/PrivateGitHubProvider](#module_electron-updater/out/PrivateGitHubProvider) +**Extends**: [UpdateInfo](Publishing-Artifacts#UpdateInfo) +**Properties** + +| Name | Type | +| --- | --- | +| **assets**| Array<[Asset](#Asset)> | + -### PrivateGitHubProvider ⇐ [Provider](Auto-Update#Provider) +### PrivateGitHubProvider ⇐ [BaseGitHubProvider](#BaseGitHubProvider) **Kind**: class of [electron-updater/out/PrivateGitHubProvider](#module_electron-updater/out/PrivateGitHubProvider) -**Extends**: [Provider](Auto-Update#Provider) +**Extends**: [BaseGitHubProvider](#BaseGitHubProvider) -* [.PrivateGitHubProvider](#PrivateGitHubProvider) ⇐ [Provider](Auto-Update#Provider) - * [`.getLatestVersion()`](#module_electron-updater/out/PrivateGitHubProvider.PrivateGitHubProvider+getLatestVersion) ⇒ Promise<[UpdateInfo](Publishing-Artifacts#UpdateInfo)> +* [.PrivateGitHubProvider](#PrivateGitHubProvider) ⇐ [BaseGitHubProvider](#BaseGitHubProvider) + * [`.getLatestVersion()`](#module_electron-updater/out/PrivateGitHubProvider.PrivateGitHubProvider+getLatestVersion) ⇒ Promise<[PrivateGitHubUpdateInfo](#PrivateGitHubUpdateInfo)> * [`.getUpdateFile(versionInfo)`](#module_electron-updater/out/PrivateGitHubProvider.PrivateGitHubProvider+getUpdateFile) ⇒ Promise<[FileInfo](Auto-Update#FileInfo)> -#### `privateGitHubProvider.getLatestVersion()` ⇒ Promise<[UpdateInfo](Publishing-Artifacts#UpdateInfo)> +#### `privateGitHubProvider.getLatestVersion()` ⇒ Promise<[PrivateGitHubUpdateInfo](#PrivateGitHubUpdateInfo)> **Kind**: instance method of [PrivateGitHubProvider](#PrivateGitHubProvider) @@ -3548,7 +3578,7 @@ Start downloading update manually. You can use this method if `autoDownload` opt | Param | Type | | --- | --- | -| versionInfo | [UpdateInfo](Publishing-Artifacts#UpdateInfo) | +| versionInfo | [PrivateGitHubUpdateInfo](#PrivateGitHubUpdateInfo) | diff --git a/docs/Publishing Artifacts.md b/docs/Publishing Artifacts.md index 3836d16491a..1ae4387abdb 100644 --- a/docs/Publishing Artifacts.md +++ b/docs/Publishing Artifacts.md @@ -137,6 +137,7 @@ GitHub options. | vPrefixedTagName = true| boolean | Whether to use `v`-prefixed tag name. | | host = "github.com"| string \| null | The host (including the port if need). | | protocol = https| "https" \| "http" \| null | The protocol. GitHub Publisher supports only `https`. | +| token| string \| null | The access token to support auto-update from private github repositories. Never specify it in the configuration files. Only for [setFeedURL](module:electron-updater/out/AppUpdater.AppUpdater+setFeedURL). | diff --git a/packages/electron-builder-http/src/httpExecutor.ts b/packages/electron-builder-http/src/httpExecutor.ts index 00f2d4e7d1f..e903869751d 100644 --- a/packages/electron-builder-http/src/httpExecutor.ts +++ b/packages/electron-builder-http/src/httpExecutor.ts @@ -108,7 +108,8 @@ export abstract class HttpExecutor { return } - this.doApiRequest(Object.assign({}, removeAuthHeader(options), parseUrl(redirectUrl)), cancellationToken, requestProcessor, redirectCount) + const newUrl = parseUrl(redirectUrl) + this.doApiRequest(removeAuthHeader(Object.assign({}, options, newUrl)), cancellationToken, requestProcessor, redirectCount) .then(resolve) .catch(reject) return @@ -159,11 +160,11 @@ export abstract class HttpExecutor { if (redirectUrl != null) { if (redirectCount < this.maxRedirects) { const parsedUrl = parseUrl(redirectUrl) - this.doDownload(Object.assign({}, removeAuthHeader(requestOptions), { + this.doDownload(removeAuthHeader(Object.assign({}, requestOptions, { hostname: parsedUrl.hostname, path: parsedUrl.path, port: parsedUrl.port == null ? undefined : parsedUrl.port - }), destination, redirectCount++, options, callback, onCancel) + })), destination, redirectCount++, options, callback, onCancel) } else { callback(new Error(`Too many redirects (> ${this.maxRedirects})`)) @@ -306,13 +307,13 @@ export function dumpRequestOptions(options: RequestOptions): string { return JSON.stringify(safe, null, 2) } +// requestOptions should be cloned already, modified in place function removeAuthHeader(requestOptions: RequestOptions): RequestOptions { - const result = Object.assign({}, requestOptions) // github redirect to amazon s3 - avoid error "Only one auth mechanism allowed" - if (result.headers != null) { - result.headers = Object.assign({}, result.headers) - delete result.headers.Authorization - delete result.headers.authorization + if (requestOptions.headers != null && (requestOptions.hostname || "").includes(".amazonaws.")) { + requestOptions.headers = Object.assign({}, requestOptions.headers) + delete requestOptions.headers.Authorization + delete requestOptions.headers.authorization } - return result + return requestOptions } \ No newline at end of file diff --git a/test/out/__snapshots__/nsisUpdaterTest.js.snap b/test/out/__snapshots__/nsisUpdaterTest.js.snap index df97600b41d..18e47ca90d9 100644 --- a/test/out/__snapshots__/nsisUpdaterTest.js.snap +++ b/test/out/__snapshots__/nsisUpdaterTest.js.snap @@ -71,7 +71,7 @@ exports[`file url github private 1`] = ` Object { "headers": Object { "Accept": "application/octet-stream", - "Authorization": "token fad40e29d04dc522e3ba03a5468339e191acd82d", + "Authorization": "token 30440323d382f1dcbe9313c20f8d718c4305174c", }, "name": "TestApp-Setup-1.1.0.exe", "sha2": "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2", diff --git a/test/src/nsisUpdaterTest.ts b/test/src/nsisUpdaterTest.ts index 794e7c225ba..fa4ec429ddc 100644 --- a/test/src/nsisUpdaterTest.ts +++ b/test/src/nsisUpdaterTest.ts @@ -167,7 +167,7 @@ test("file url github", async () => { expect(actualEvents).toEqual(expectedEvents) }) -test.skip("file url github private", async () => { +test("file url github private", async () => { const updater = new NsisUpdater() updater.updateConfigPath = await writeUpdateConfig({ provider: "github",