@@ -97,14 +97,12 @@ class UpgradeManager {
97
97
this . logger = this . setupLogger ( ) ;
98
98
this . gid = args . gid ;
99
99
this . uid = args . uid ;
100
-
101
- this . applyUser ( ) ;
102
100
}
103
101
104
102
/**
105
103
* To prevent commands (including npm) running as root, we apply the passed in gid and uid
106
104
*/
107
- private applyUser ( ) : void {
105
+ applyUser ( ) : void {
108
106
if ( ! process . setuid || ! process . setgid ) {
109
107
const errMessage = 'Cannot ensure user and group ids on this system, because no POSIX platform' ;
110
108
this . log ( errMessage , true ) ;
@@ -236,12 +234,12 @@ class UpgradeManager {
236
234
*
237
235
* @param params Web server configuration
238
236
*/
239
- startWebServer ( params : WebServerParameters ) : void {
237
+ async startWebServer ( params : WebServerParameters ) : Promise < void > {
240
238
const { useHttps } = params ;
241
239
if ( useHttps ) {
242
- this . startSecureWebServer ( params ) ;
240
+ await this . startSecureWebServer ( params ) ;
243
241
} else {
244
- this . startInsecureWebServer ( params ) ;
242
+ await this . startInsecureWebServer ( params ) ;
245
243
}
246
244
}
247
245
@@ -300,7 +298,7 @@ class UpgradeManager {
300
298
*
301
299
* @param params Web server configuration
302
300
*/
303
- startInsecureWebServer ( params : InsecureWebServerParameters ) : void {
301
+ async startInsecureWebServer ( params : InsecureWebServerParameters ) : Promise < void > {
304
302
const { port } = params ;
305
303
306
304
this . server = http . createServer ( ( _req , res ) => {
@@ -309,17 +307,21 @@ class UpgradeManager {
309
307
310
308
this . monitorSockets ( this . server ) ;
311
309
312
- this . server . listen ( port , ( ) => {
313
- this . log ( `Server is running on http://localhost:${ port } ` ) ;
310
+ await new Promise < void > ( resolve => {
311
+ this . server ! . listen ( port , ( ) => {
312
+ resolve ( ) ;
313
+ } ) ;
314
314
} ) ;
315
+
316
+ this . log ( `Server is running on http://localhost:${ port } ` ) ;
315
317
}
316
318
317
319
/**
318
320
* Start a secure web server for admin communication
319
321
*
320
322
* @param params Web server configuration
321
323
*/
322
- startSecureWebServer ( params : SecureWebServerParameters ) : void {
324
+ async startSecureWebServer ( params : SecureWebServerParameters ) : Promise < void > {
323
325
const { port, certPublic, certPrivate } = params ;
324
326
325
327
this . server = https . createServer ( { key : certPrivate , cert : certPublic } , ( _req , res ) => {
@@ -328,9 +330,13 @@ class UpgradeManager {
328
330
329
331
this . monitorSockets ( this . server ) ;
330
332
331
- this . server . listen ( port , ( ) => {
332
- this . log ( `Server is running on https://localhost:${ port } ` ) ;
333
+ await new Promise < void > ( resolve => {
334
+ this . server ! . listen ( port , ( ) => {
335
+ resolve ( ) ;
336
+ } ) ;
333
337
} ) ;
338
+
339
+ this . log ( `Server is running on https://localhost:${ port } ` ) ;
334
340
}
335
341
336
342
/**
@@ -443,7 +449,9 @@ async function main(): Promise<void> {
443
449
await upgradeManager . stopController ( ) ;
444
450
upgradeManager . log ( 'Successfully stopped js-controller' ) ;
445
451
446
- upgradeManager . startWebServer ( webServerParameters ) ;
452
+ await upgradeManager . startWebServer ( webServerParameters ) ;
453
+ // do this after web server is started, else we cannot bind on privileged ports after using setgid
454
+ upgradeManager . applyUser ( ) ;
447
455
448
456
try {
449
457
await upgradeManager . npmInstall ( ) ;
0 commit comments