@@ -27,24 +27,24 @@ class NginxExtension extends cli.Extension {
27
27
setupNginx ( argv , ctx , task ) {
28
28
if ( ! this . isSupported ( ) ) {
29
29
this . ui . log ( 'Nginx is not installed. Skipping Nginx setup.' , 'yellow' ) ;
30
- return task && task . skip ( ) ;
30
+ return task . skip ( ) ;
31
31
}
32
32
33
33
let parsedUrl = url . parse ( ctx . instance . config . get ( 'url' ) ) ;
34
34
35
35
if ( parsedUrl . port ) {
36
36
this . ui . log ( 'Your url contains a port. Skipping Nginx setup.' , 'yellow' ) ;
37
- return task && task . skip ( ) ;
37
+ return task . skip ( ) ;
38
38
}
39
39
40
40
if ( parsedUrl . pathname !== '/' ) {
41
41
this . ui . log ( 'The Nginx service does not support subdirectory configurations yet. Skipping Nginx setup.' , 'yellow' ) ;
42
- return task && task . skip ( ) ;
42
+ return task . skip ( ) ;
43
43
}
44
44
45
45
if ( fs . existsSync ( `/etc/nginx/sites-available/${ parsedUrl . hostname } .conf` ) ) {
46
46
this . ui . log ( 'Nginx configuration already found for this url. Skipping Nginx setup.' , 'yellow' ) ;
47
- return task && task . skip ( ) ;
47
+ return task . skip ( ) ;
48
48
}
49
49
50
50
return Promise . fromNode ( ( cb ) => NginxConfFile . createFromSource ( '' , cb ) ) . then ( ( conf ) => {
@@ -87,9 +87,14 @@ class NginxExtension extends cli.Extension {
87
87
}
88
88
89
89
setupSSL ( argv , ctx , task ) {
90
+ if ( ctx . instance . cliConfig . get ( 'extension.ssl' , false ) ) {
91
+ this . ui . log ( 'SSL has already been set up, skipping' , 'yellow' ) ;
92
+ return task . skip ( ) ;
93
+ }
94
+
90
95
if ( ! argv . prompt && ! argv . sslemail ) {
91
96
this . ui . log ( 'SSL email must be provided via the --sslemail option, skipping SSL setup' , 'yellow' ) ;
92
- return task && task . skip ( ) ;
97
+ return task . skip ( ) ;
93
98
}
94
99
95
100
let parsedUrl = url . parse ( ctx . instance . config . get ( 'url' ) ) ;
@@ -102,7 +107,7 @@ class NginxExtension extends cli.Extension {
102
107
this . ui . log ( 'Nginx config file does not exist, skipping SSL setup' , 'yellow' ) ;
103
108
}
104
109
105
- return task && task . skip ( ) ;
110
+ return task . skip ( ) ;
106
111
}
107
112
108
113
let rootPath = path . resolve ( ctx . instance . dir , 'system' , 'nginx-root' ) ;
@@ -151,8 +156,12 @@ class NginxExtension extends cli.Extension {
151
156
152
157
ctx . ssl . conf = conf ;
153
158
ctx . ssl . http = conf . nginx . server ;
154
- ctx . ssl . http . _add ( 'location' , '~ /.well-known' ) ;
155
- ctx . ssl . http . location [ 1 ] . _add ( 'allow' , 'all' ) ;
159
+
160
+ // Don't add well-known block if it already exists
161
+ if ( ctx . ssl . http . location . length === 1 ) {
162
+ ctx . ssl . http . _add ( 'location' , '~ /.well-known' ) ;
163
+ ctx . ssl . http . location [ 1 ] . _add ( 'allow' , 'all' ) ;
164
+ }
156
165
} ) ;
157
166
} ) ;
158
167
}
@@ -161,7 +170,17 @@ class NginxExtension extends cli.Extension {
161
170
task : ( ) => this . restartNginx ( )
162
171
} , {
163
172
title : 'Getting SSL Certificate' ,
164
- task : ( ) => letsencrypt ( ctx . instance , argv . sslemail , argv . sslstaging )
173
+ task : ( ) => {
174
+ return letsencrypt ( ctx . instance , argv . sslemail , argv . sslstaging ) . catch ( ( error ) => {
175
+ if ( ! ( error instanceof cli . errors . ProcessError ) ) {
176
+ return Promise . reject ( error ) ;
177
+ }
178
+
179
+ // Ensure ~/.well-known location gets cleaned up
180
+ ctx . ssl . http . _remove ( 'location' , 1 ) ;
181
+ return Promise . reject ( error ) ;
182
+ } ) ;
183
+ }
165
184
} , {
166
185
title : 'Generating Encryption Key (may take a few minutes)' ,
167
186
task : ( ctx ) => {
0 commit comments