@@ -273,22 +273,33 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
273
273
},
274
274
AccountKey : accountKey ,
275
275
}
276
+ } else {
277
+ domainAcme .Sans = append (domainAcme .Sans , domain )
278
+ domainAcme .IssuerData .URL = acct .URI
279
+ domainAcme .IssuerData .Ca = client .DirectoryURL
280
+ domainAcme .AccountKey = accountKey
276
281
}
277
282
278
283
// save domainAcme struct to domainAcme.json file
279
284
jsonData , err := json .Marshal (domainAcme )
280
285
if err != nil {
281
286
log .Println ("Failed to marshal domain acme data: " , err )
287
+ issuings [domain ] = false
288
+ return
282
289
}
283
290
284
291
if err := os .WriteFile (domainAcmeFile , jsonData , 0644 ); err != nil {
285
292
log .Println ("Failed to write domain acme data: " , err )
293
+ issuings [domain ] = false
294
+ return
286
295
}
287
296
288
297
// Create a new order for the domain
289
298
order , err := client .AuthorizeOrder (context .TODO (), acme .DomainIDs (domain ))
290
299
if err != nil {
291
300
log .Println ("Order authorization failed: " , err )
301
+ issuings [domain ] = false
302
+ return
292
303
}
293
304
294
305
// HTTP-01 challenge for domain verification
@@ -297,6 +308,8 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
297
308
authz , err := client .GetAuthorization (context .TODO (), authzURL )
298
309
if err != nil {
299
310
log .Println ("Failed to get authorization: " , err )
311
+ issuings [domain ] = false
312
+ return
300
313
}
301
314
for _ , c := range authz .Challenges {
302
315
if c .Type == "http-01" {
@@ -311,29 +324,33 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
311
324
312
325
if chal == nil {
313
326
log .Println ("No HTTP-01 challenge found" )
327
+ issuings [domain ] = false
328
+ return
314
329
}
315
330
316
- if chal != nil {
317
- domainAcme .IssuerData .ChallengeToken = chal .Token
318
- log .Println ("Challenge token: " + chal .Token )
319
- } else {
320
- log .Println ("Challenge token is nil." )
321
- }
331
+ domainAcme .IssuerData .ChallengeToken = chal .Token
332
+ log .Println ("Challenge token: " + chal .Token )
322
333
323
334
// save domainAcme struct to domainAcme.json file
324
335
jsonData , err = json .Marshal (domainAcme )
325
336
if err != nil {
326
337
log .Println ("Failed to marshal domain acme data: " , err )
338
+ issuings [domain ] = false
339
+ return
327
340
}
328
341
329
342
if err := os .WriteFile (domainAcmeFile , jsonData , 0644 ); err != nil {
330
343
log .Println ("Failed to write domain acme data: " , err )
344
+ issuings [domain ] = false
345
+ return
331
346
}
332
347
333
348
// Accept the challenge
334
349
_ , err = client .Accept (context .TODO (), chal )
335
350
if err != nil {
336
351
log .Println ("Challenge acceptance failed: " , err )
352
+ issuings [domain ] = false
353
+ return
337
354
}
338
355
339
356
// Wait for challenge to be valid
@@ -342,12 +359,16 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
342
359
authz , err := client .GetAuthorization (context .TODO (), chal .URI )
343
360
if err != nil {
344
361
log .Printf ("Failed to get authorization: %v \n " , err )
362
+ issuings [domain ] = false
363
+ return
345
364
}
346
365
if authz .Status == acme .StatusValid {
347
366
break
348
367
}
349
368
if authz .Status == acme .StatusInvalid {
350
369
log .Printf ("Challenge failed: %v \n " , authz )
370
+ issuings [domain ] = false
371
+ return
351
372
}
352
373
// Wait before checking again
353
374
time .Sleep (10 * time .Second )
@@ -356,6 +377,8 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
356
377
ecdsaPrivateKey , err := ecdsa .GenerateKey (elliptic .P256 (), rand .Reader )
357
378
if err != nil {
358
379
log .Println ("ECDSA private key generation failed: " , err )
380
+ issuings [domain ] = false
381
+ return
359
382
}
360
383
361
384
// Create a CSR
@@ -364,12 +387,16 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
364
387
}, ecdsaPrivateKey )
365
388
if err != nil {
366
389
log .Println ("Certificate request creation failed: " , err )
390
+ issuings [domain ] = false
391
+ return
367
392
}
368
393
369
394
// Finalize the order and get the certificate
370
395
der , _ , err := client .CreateOrderCert (context .TODO (), order .FinalizeURL , csr , true )
371
396
if err != nil {
372
397
log .Println ("Certificate issuance failed: " , err )
398
+ issuings [domain ] = false
399
+ return
373
400
}
374
401
375
402
// der contains the certificate chain
@@ -380,6 +407,8 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
380
407
381
408
if _ , err := os .Create (certFile ); err != nil {
382
409
log .Println ("Failed to create certificate file: " , err )
410
+ issuings [domain ] = false
411
+ return
383
412
}
384
413
385
414
file , err := os .OpenFile (certFile , os .O_APPEND | os .O_CREATE | os .O_WRONLY , 0644 )
@@ -392,28 +421,38 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
392
421
// Write to file
393
422
if err := pem .Encode (file , block ); err != nil {
394
423
log .Println ("Failed to write certificate: " , err )
424
+ issuings [domain ] = false
425
+ return
395
426
}
396
427
397
428
}
398
429
399
430
ecdsaPrivateKeyBytes , err := x509 .MarshalECPrivateKey (ecdsaPrivateKey )
400
431
if err != nil {
401
432
log .Println ("Failed to marshal ECDSA private key: " , err )
433
+ issuings [domain ] = false
434
+ return
402
435
}
403
436
404
437
keyPEM := pem .EncodeToMemory (& pem.Block {Type : "EC PRIVATE KEY" , Bytes : ecdsaPrivateKeyBytes })
405
438
if err := os .WriteFile (keyFile , keyPEM , 0644 ); err != nil {
406
439
log .Println ("Failed to write key: " , err )
440
+ issuings [domain ] = false
441
+ return
407
442
}
408
443
409
444
crtFileData , err := os .ReadFile (certFile )
410
445
if err != nil {
411
446
log .Println ("Failed to read certificate file: " , err )
447
+ issuings [domain ] = false
448
+ return
412
449
}
413
450
414
451
keyFileData , err := os .ReadFile (keyFile )
415
452
if err != nil {
416
453
log .Println ("Failed to read key file: " , err )
454
+ issuings [domain ] = false
455
+ return
417
456
}
418
457
419
458
domainAcme .CertFile = string (crtFileData )
@@ -428,13 +467,19 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
428
467
jsonData , err = json .Marshal (domainAcme )
429
468
if err != nil {
430
469
log .Println ("Failed to marshal domain acme data: " , err )
470
+ issuings [domain ] = false
471
+ return
431
472
}
432
473
433
474
if err := os .WriteFile (domainAcmeFile , jsonData , 0644 ); err != nil {
434
475
log .Println ("Failed to write domain acme data: " , err )
476
+ issuings [domain ] = false
477
+ return
435
478
}
436
479
437
480
fmt .Println ("Certificate and key saved to " + location )
481
+
482
+ issuings [domain ] = false
438
483
}
439
484
440
485
func (m * Manager ) AddCustomCert (domain , certFileData , keyfileData string ) {
0 commit comments