@@ -21,6 +21,7 @@ import (
21
21
"io/ioutil"
22
22
"net"
23
23
"net/http"
24
+ "os"
24
25
"path/filepath"
25
26
"time"
26
27
@@ -167,14 +168,18 @@ func authz(client *acme.Client, zurl, domain string) error {
167
168
if certManual {
168
169
// manual challenge response
169
170
tok := fmt .Sprintf ("%s.%s" , chal .Token , acme .JWKThumbprint (& client .Key .PublicKey ))
170
- file , err := challengeFile (domain , tok )
171
+ file , err := challengeFile (chal . Token , domain , tok )
171
172
if err != nil {
172
173
return err
173
174
}
174
- fmt .Printf ("Copy %s to ROOT/.well-known/acme-challenge/%s of %s and press enter.\n " ,
175
- file , chal .Token , domain )
176
- var x string
177
- fmt .Scanln (& x )
175
+
176
+ // If ACME_CHALLENGE_DIR is not set, ask user to move challenge file manually
177
+ if os .Getenv ("ACME_CHALLENGE_DIR" ) == "" {
178
+ fmt .Printf ("Copy %s to ROOT/.well-known/acme-challenge/%s of %s and press enter.\n " ,
179
+ file , chal .Token , domain )
180
+ var x string
181
+ fmt .Scanln (& x )
182
+ }
178
183
} else {
179
184
// auto, via local server
180
185
go http .Serve (ln , client .HTTP01Handler (chal .Token ))
@@ -215,11 +220,27 @@ func pollCert(url string) [][]byte {
215
220
}
216
221
}
217
222
218
- func challengeFile (domain , content string ) (string , error ) {
219
- f , err := ioutil .TempFile ("" , domain )
223
+ func challengeFile (challengeFilename , domain , content string ) (string , error ) {
224
+ // If ACME_CHALLENGE_DIR is set, place the challenge into it.
225
+ // Otherwise, create a temporary file
226
+ var f * os.File
227
+ var err error
228
+ if os .Getenv ("ACME_CHALLENGE_DIR" ) != "" {
229
+ // Create .well-known directory
230
+ challengeDir := filepath .Join (os .Getenv ("ACME_CHALLENGE_DIR" ), ".well-known/acme-challenge" )
231
+ err = os .MkdirAll (challengeDir , 0755 )
232
+ if err != nil {
233
+ return "" , err
234
+ }
235
+
236
+ f , err = os .Create (filepath .Join (challengeDir , challengeFilename ))
237
+ } else {
238
+ f , err = ioutil .TempFile ("" , domain )
239
+ }
220
240
if err != nil {
221
241
return "" , err
222
242
}
243
+
223
244
_ , err = fmt .Fprint (f , content )
224
245
if err1 := f .Close (); err1 != nil && err == nil {
225
246
err = err1
0 commit comments