1
+ import { session } from "electron"
1
2
import { HttpError , request } from "electron-builder-http"
2
3
import { CancellationToken } from "electron-builder-http/out/CancellationToken"
3
4
import { GithubOptions , UpdateInfo } from "electron-builder-http/out/publishOptions"
4
5
import { RequestOptions } from "http"
5
6
import * as path from "path"
6
7
import { parse as parseUrl } from "url"
8
+ import { safeLoad } from "js-yaml"
7
9
import { FileInfo , formatUrl , getChannelFilename , getCurrentPlatform , getDefaultChannelName } from "./api"
8
10
import { validateUpdateInfo } from "./GenericProvider"
9
11
import { BaseGitHubProvider } from "./GitHubProvider"
@@ -13,8 +15,13 @@ export interface PrivateGitHubUpdateInfo extends UpdateInfo {
13
15
}
14
16
15
17
export class PrivateGitHubProvider extends BaseGitHubProvider < PrivateGitHubUpdateInfo > {
18
+ private sess : any
19
+
16
20
constructor ( options : GithubOptions , private readonly token : string ) {
17
21
super ( options , "api.github.com" )
22
+
23
+ this . sess = session . fromPartition ( 'electron-updater' )
24
+ this . registerHeaderRemovalListener ( ) ;
18
25
}
19
26
20
27
async getLatestVersion ( ) : Promise < PrivateGitHubUpdateInfo > {
@@ -24,11 +31,21 @@ export class PrivateGitHubProvider extends BaseGitHubProvider<PrivateGitHubUpdat
24
31
25
32
const assets = await this . getLatestVersionInfo ( basePath , cancellationToken )
26
33
const requestOptions = Object . assign ( {
27
- headers : this . configureHeaders ( "application/octet-stream" )
34
+ headers : this . configureHeaders ( "application/octet-stream" ) ,
35
+ session : this . sess
28
36
} , parseUrl ( assets . find ( it => it . name == channelFile ) ! . url ) )
29
37
let result : any
30
38
try {
31
39
result = await request < UpdateInfo > ( requestOptions , cancellationToken )
40
+
41
+ if ( typeof result === "string" ) {
42
+ if ( getCurrentPlatform ( ) === "darwin" ) {
43
+ result = JSON . parse ( result )
44
+ }
45
+ else {
46
+ result = safeLoad ( result )
47
+ }
48
+ }
32
49
}
33
50
catch ( e ) {
34
51
if ( e instanceof HttpError && e . response . statusCode === 404 ) {
@@ -45,6 +62,20 @@ export class PrivateGitHubProvider extends BaseGitHubProvider<PrivateGitHubUpdat
45
62
return result
46
63
}
47
64
65
+ private registerHeaderRemovalListener ( ) : void {
66
+ const filter = {
67
+ urls : [ "*://*.amazonaws.com/*" ]
68
+ } ;
69
+
70
+ this . sess . webRequest . onBeforeSendHeaders ( filter , ( details : any , callback : any ) => {
71
+ if ( details . requestHeaders [ 'Authorization' ] ) {
72
+ delete details . requestHeaders [ 'Authorization' ]
73
+ }
74
+
75
+ callback ( { cancel : false , requestHeaders : details . requestHeaders } )
76
+ } ) ;
77
+ } ;
78
+
48
79
private configureHeaders ( accept : string ) {
49
80
return Object . assign ( {
50
81
Accept : accept ,
@@ -91,6 +122,7 @@ export class PrivateGitHubProvider extends BaseGitHubProvider<PrivateGitHubUpdat
91
122
url : versionInfo . assets . find ( it => it . name == name ) ! . url ,
92
123
sha2 : versionInfo . sha2 ,
93
124
headers : headers ,
125
+ session : this . sess
94
126
}
95
127
}
96
128
}
0 commit comments