@@ -7,17 +7,20 @@ import (
7
7
"crypto/rand"
8
8
"crypto/tls"
9
9
"github.com/0xJacky/Nginx-UI/logger"
10
- dns2 "github.com/0xJacky/Nginx-UI/server/internal/cert/dns"
10
+ "github.com/0xJacky/Nginx-UI/server/internal/cert/dns"
11
11
"github.com/0xJacky/Nginx-UI/server/internal/nginx"
12
12
"github.com/0xJacky/Nginx-UI/server/query"
13
13
"github.com/0xJacky/Nginx-UI/server/settings"
14
14
"github.com/go-acme/lego/v4/certcrypto"
15
15
"github.com/go-acme/lego/v4/certificate"
16
16
"github.com/go-acme/lego/v4/challenge/http01"
17
17
"github.com/go-acme/lego/v4/lego"
18
- "github.com/go-acme/lego/v4/providers/dns"
18
+ lego_log "github.com/go-acme/lego/v4/log"
19
+ dns_providers "github.com/go-acme/lego/v4/providers/dns"
19
20
"github.com/go-acme/lego/v4/registration"
20
21
"github.com/pkg/errors"
22
+ "io"
23
+ "log"
21
24
"net/http"
22
25
"os"
23
26
"path/filepath"
@@ -52,13 +55,29 @@ type ConfigPayload struct {
52
55
DNSCredentialID int `json:"dns_credential_id"`
53
56
}
54
57
58
+ type channelWriter struct {
59
+ ch chan []byte
60
+ }
61
+
62
+ func (cw * channelWriter ) Write (p []byte ) (n int , err error ) {
63
+ n = len (p )
64
+ temp := make ([]byte , n )
65
+ copy (temp , p )
66
+ cw .ch <- temp
67
+ return n , nil
68
+ }
69
+
55
70
func IssueCert (payload * ConfigPayload , logChan chan string , errChan chan error ) {
56
71
defer func () {
57
72
if err := recover (); err != nil {
58
73
logger .Error (err )
59
74
}
60
75
}()
61
76
77
+ // Use a channel to receive lego log
78
+ logChannel := make (chan []byte , 1024 )
79
+ defer close (logChannel )
80
+
62
81
domain := payload .ServerName
63
82
64
83
// Create a user. New accounts need an email and private key to start.
@@ -75,6 +94,20 @@ func IssueCert(payload *ConfigPayload, logChan chan string, errChan chan error)
75
94
Key : privateKey ,
76
95
}
77
96
97
+ // Hijack lego's log
98
+ cw := & channelWriter {ch : logChannel }
99
+ multiWriter := io .MultiWriter (os .Stderr , cw )
100
+ l := log .New (os .Stderr , "" , log .LstdFlags )
101
+ l .SetOutput (multiWriter )
102
+ lego_log .Logger = l
103
+
104
+ // Start a goroutine to fetch and process logs from channel
105
+ go func () {
106
+ for msg := range logChannel {
107
+ logChan <- string (msg )
108
+ }
109
+ }()
110
+
78
111
config := lego .NewConfig (& myUser )
79
112
80
113
if settings .ServerSettings .Demo {
@@ -120,7 +153,7 @@ func IssueCert(payload *ConfigPayload, logChan chan string, errChan chan error)
120
153
121
154
logChan <- "Using DNS01 challenge provider"
122
155
code := dnsCredential .Config .Code
123
- pConfig , ok := dns2 .GetProvider (code )
156
+ pConfig , ok := dns .GetProvider (code )
124
157
125
158
if ! ok {
126
159
errChan <- errors .Wrap (err , "provider not found" )
@@ -135,7 +168,7 @@ func IssueCert(payload *ConfigPayload, logChan chan string, errChan chan error)
135
168
logChan <- "Cleaning environment variables"
136
169
pConfig .CleanEnv ()
137
170
}()
138
- provider , err := dns .NewDNSChallengeProviderByName (code )
171
+ provider , err := dns_providers .NewDNSChallengeProviderByName (code )
139
172
if err != nil {
140
173
break
141
174
}
0 commit comments