Skip to content

Commit 4c39641

Browse files
committed
Fix issue with domainAcme data marshaling and writing
1 parent 4381b66 commit 4c39641

File tree

1 file changed

+51
-6
lines changed

1 file changed

+51
-6
lines changed

certy.go

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -273,22 +273,33 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
273273
},
274274
AccountKey: accountKey,
275275
}
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
276281
}
277282

278283
// save domainAcme struct to domainAcme.json file
279284
jsonData, err := json.Marshal(domainAcme)
280285
if err != nil {
281286
log.Println("Failed to marshal domain acme data: ", err)
287+
issuings[domain] = false
288+
return
282289
}
283290

284291
if err := os.WriteFile(domainAcmeFile, jsonData, 0644); err != nil {
285292
log.Println("Failed to write domain acme data: ", err)
293+
issuings[domain] = false
294+
return
286295
}
287296

288297
// Create a new order for the domain
289298
order, err := client.AuthorizeOrder(context.TODO(), acme.DomainIDs(domain))
290299
if err != nil {
291300
log.Println("Order authorization failed: ", err)
301+
issuings[domain] = false
302+
return
292303
}
293304

294305
// HTTP-01 challenge for domain verification
@@ -297,6 +308,8 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
297308
authz, err := client.GetAuthorization(context.TODO(), authzURL)
298309
if err != nil {
299310
log.Println("Failed to get authorization: ", err)
311+
issuings[domain] = false
312+
return
300313
}
301314
for _, c := range authz.Challenges {
302315
if c.Type == "http-01" {
@@ -311,29 +324,33 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
311324

312325
if chal == nil {
313326
log.Println("No HTTP-01 challenge found")
327+
issuings[domain] = false
328+
return
314329
}
315330

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)
322333

323334
// save domainAcme struct to domainAcme.json file
324335
jsonData, err = json.Marshal(domainAcme)
325336
if err != nil {
326337
log.Println("Failed to marshal domain acme data: ", err)
338+
issuings[domain] = false
339+
return
327340
}
328341

329342
if err := os.WriteFile(domainAcmeFile, jsonData, 0644); err != nil {
330343
log.Println("Failed to write domain acme data: ", err)
344+
issuings[domain] = false
345+
return
331346
}
332347

333348
// Accept the challenge
334349
_, err = client.Accept(context.TODO(), chal)
335350
if err != nil {
336351
log.Println("Challenge acceptance failed: ", err)
352+
issuings[domain] = false
353+
return
337354
}
338355

339356
// Wait for challenge to be valid
@@ -342,12 +359,16 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
342359
authz, err := client.GetAuthorization(context.TODO(), chal.URI)
343360
if err != nil {
344361
log.Printf("Failed to get authorization: %v \n", err)
362+
issuings[domain] = false
363+
return
345364
}
346365
if authz.Status == acme.StatusValid {
347366
break
348367
}
349368
if authz.Status == acme.StatusInvalid {
350369
log.Printf("Challenge failed: %v \n", authz)
370+
issuings[domain] = false
371+
return
351372
}
352373
// Wait before checking again
353374
time.Sleep(10 * time.Second)
@@ -356,6 +377,8 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
356377
ecdsaPrivateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
357378
if err != nil {
358379
log.Println("ECDSA private key generation failed: ", err)
380+
issuings[domain] = false
381+
return
359382
}
360383

361384
// Create a CSR
@@ -364,12 +387,16 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
364387
}, ecdsaPrivateKey)
365388
if err != nil {
366389
log.Println("Certificate request creation failed: ", err)
390+
issuings[domain] = false
391+
return
367392
}
368393

369394
// Finalize the order and get the certificate
370395
der, _, err := client.CreateOrderCert(context.TODO(), order.FinalizeURL, csr, true)
371396
if err != nil {
372397
log.Println("Certificate issuance failed: ", err)
398+
issuings[domain] = false
399+
return
373400
}
374401

375402
// der contains the certificate chain
@@ -380,6 +407,8 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
380407

381408
if _, err := os.Create(certFile); err != nil {
382409
log.Println("Failed to create certificate file: ", err)
410+
issuings[domain] = false
411+
return
383412
}
384413

385414
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) {
392421
// Write to file
393422
if err := pem.Encode(file, block); err != nil {
394423
log.Println("Failed to write certificate: ", err)
424+
issuings[domain] = false
425+
return
395426
}
396427

397428
}
398429

399430
ecdsaPrivateKeyBytes, err := x509.MarshalECPrivateKey(ecdsaPrivateKey)
400431
if err != nil {
401432
log.Println("Failed to marshal ECDSA private key: ", err)
433+
issuings[domain] = false
434+
return
402435
}
403436

404437
keyPEM := pem.EncodeToMemory(&pem.Block{Type: "EC PRIVATE KEY", Bytes: ecdsaPrivateKeyBytes})
405438
if err := os.WriteFile(keyFile, keyPEM, 0644); err != nil {
406439
log.Println("Failed to write key: ", err)
440+
issuings[domain] = false
441+
return
407442
}
408443

409444
crtFileData, err := os.ReadFile(certFile)
410445
if err != nil {
411446
log.Println("Failed to read certificate file: ", err)
447+
issuings[domain] = false
448+
return
412449
}
413450

414451
keyFileData, err := os.ReadFile(keyFile)
415452
if err != nil {
416453
log.Println("Failed to read key file: ", err)
454+
issuings[domain] = false
455+
return
417456
}
418457

419458
domainAcme.CertFile = string(crtFileData)
@@ -428,13 +467,19 @@ func (m *Manager) issueLetsEncryptCert(email, domain, location string) {
428467
jsonData, err = json.Marshal(domainAcme)
429468
if err != nil {
430469
log.Println("Failed to marshal domain acme data: ", err)
470+
issuings[domain] = false
471+
return
431472
}
432473

433474
if err := os.WriteFile(domainAcmeFile, jsonData, 0644); err != nil {
434475
log.Println("Failed to write domain acme data: ", err)
476+
issuings[domain] = false
477+
return
435478
}
436479

437480
fmt.Println("Certificate and key saved to " + location)
481+
482+
issuings[domain] = false
438483
}
439484

440485
func (m *Manager) AddCustomCert(domain, certFileData, keyfileData string) {

0 commit comments

Comments
 (0)