Skip to content

Commit af2f559

Browse files
committed
fix(electron-updater): MacUpdater — set Content-Length for responses, write 200 only if request to origin server is ok
Close #1719
1 parent 945a517 commit af2f559

File tree

4 files changed

+18
-12
lines changed

4 files changed

+18
-12
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"ajv": "^5.2.0",
3131
"ajv-keywords": "^2.1.0",
3232
"archiver": "^1.3.0",
33-
"aws-sdk": "^2.76.0",
33+
"aws-sdk": "^2.77.0",
3434
"bluebird-lst": "^1.0.2",
3535
"chalk": "^1.1.3",
3636
"chromium-pickle-js": "^0.2.0",

packages/electron-publisher-s3/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
],
1313
"dependencies": {
1414
"fs-extra-p": "^4.3.0",
15-
"aws-sdk": "^2.75.0",
15+
"aws-sdk": "^2.77.0",
1616
"mime": "^1.3.6",
1717
"electron-publish": "~0.0.0-semantic-release",
1818
"electron-builder-util": "~0.0.0-semantic-release"

packages/electron-updater/src/MacUpdater.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { parse as parseUrl } from "url"
77
import { AppUpdater } from "./AppUpdater"
88
import { DOWNLOAD_PROGRESS, FileInfo, UPDATE_DOWNLOADED } from "./main"
99
import AutoUpdater = Electron.AutoUpdater
10+
import { RequestHeaders } from "../../electron-builder-http/src/httpExecutor"
1011

1112
export class MacUpdater extends AppUpdater {
1213
private readonly nativeUpdater: AutoUpdater = require("electron").autoUpdater
@@ -38,11 +39,13 @@ export class MacUpdater extends AppUpdater {
3839
return new BluebirdPromise<void>((resolve, reject) => {
3940
server.on("request", (request: IncomingMessage, response: ServerResponse) => {
4041
const requestUrl = request.url!
42+
this._logger.info(`${requestUrl} requested`)
4143
if (requestUrl === "/") {
42-
response.writeHead(200, {"Content-Type": "application/json"})
43-
response.end(`{ "url": "${getServerUrl()}/app.zip" }`)
44+
const data = Buffer.from(`{ "url": "${getServerUrl()}/app.zip" }`)
45+
response.writeHead(200, {"Content-Type": "application/json", "Content-Length": data.length})
46+
response.end(data)
4447
}
45-
else if (requestUrl === "/app.zip") {
48+
else if (requestUrl.startsWith("/app.zip")) {
4649
let errorOccurred = false
4750
response.on("finish", () => {
4851
try {
@@ -66,6 +69,7 @@ export class MacUpdater extends AppUpdater {
6669
})
6770
}
6871
else {
72+
this._logger.warn(`${requestUrl} requested, but not supported`)
6973
response.writeHead(404)
7074
response.end()
7175
}
@@ -78,8 +82,6 @@ export class MacUpdater extends AppUpdater {
7882
}
7983

8084
private proxyUpdateFile(nativeResponse: ServerResponse, fileInfo: FileInfo, errorHandler: (error: Error) => void) {
81-
nativeResponse.writeHead(200, {"Content-Type": "application/zip"})
82-
8385
const parsedUrl = parseUrl(fileInfo.url)
8486
const downloadRequest = this.httpExecutor.doRequest(configureRequestOptions({
8587
protocol: parsedUrl.protocol,
@@ -99,14 +101,18 @@ export class MacUpdater extends AppUpdater {
99101
return
100102
}
101103

104+
const headers: RequestHeaders = {"Content-Type": "application/zip"}
102105
const streams: Array<any> = []
103106
if (this.listenerCount(DOWNLOAD_PROGRESS) > 0) {
104107
const contentLength = safeGetHeader(downloadResponse, "content-length")
105108
if (contentLength != null) {
109+
headers["Content-Length"] = contentLength
106110
streams.push(new ProgressCallbackTransform(parseInt(contentLength, 10), new CancellationToken(), it => this.emit(DOWNLOAD_PROGRESS, it)))
107111
}
108112
}
109113

114+
nativeResponse.writeHead(200, headers)
115+
110116
// for mac only sha512 is produced (sha256 is published for windows only to preserve backward compatibility)
111117
const sha512 = fileInfo.sha512
112118
if (sha512 != null) {

yarn.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -265,9 +265,9 @@ asynckit@^0.4.0:
265265
version "0.4.0"
266266
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
267267

268-
aws-sdk@^2.76.0:
269-
version "2.76.0"
270-
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.76.0.tgz#2c37bf04e37ab4a26b5ff7c7583d596034c76309"
268+
aws-sdk@^2.77.0:
269+
version "2.77.0"
270+
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.77.0.tgz#809090bb874d8f4fffcac5316629587638e7865c"
271271
dependencies:
272272
buffer "5.0.6"
273273
crypto-browserify "1.0.9"
@@ -2084,8 +2084,8 @@ jsesc@^1.3.0:
20842084
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
20852085

20862086
json-schema-traverse@^0.3.0:
2087-
version "0.3.0"
2088-
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.0.tgz#0016c0b1ca1efe46d44d37541bcdfc19dcfae0db"
2087+
version "0.3.1"
2088+
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
20892089

20902090
json-schema@0.2.3:
20912091
version "0.2.3"

0 commit comments

Comments
 (0)