mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-11 02:15:48 +02:00
fix goroutine and memory leak
This commit is contained in:
parent
61496e3727
commit
40fcebbaae
3 changed files with 23 additions and 19 deletions
|
@ -59,7 +59,8 @@ type serverFileSystemType struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f serverFileSystemType) Exists(prefix string, _path string) bool {
|
func (f serverFileSystemType) Exists(prefix string, _path string) bool {
|
||||||
_, err := f.Open(path.Join(prefix, _path))
|
file, err := f.Open(path.Join(prefix, _path))
|
||||||
|
defer file.Close()
|
||||||
return err == nil
|
return err == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,11 @@ func InitRouter() *gin.Engine {
|
||||||
accept := c.Request.Header.Get("Accept")
|
accept := c.Request.Header.Get("Accept")
|
||||||
if strings.Contains(accept, "text/html") {
|
if strings.Contains(accept, "text/html") {
|
||||||
file, _ := mustFS("").Open("index.html")
|
file, _ := mustFS("").Open("index.html")
|
||||||
|
defer file.Close()
|
||||||
stat, _ := file.Stat()
|
stat, _ := file.Stat()
|
||||||
c.DataFromReader(http.StatusOK, stat.Size(), "text/html",
|
c.DataFromReader(http.StatusOK, stat.Size(), "text/html",
|
||||||
bufio.NewReader(file), nil)
|
bufio.NewReader(file), nil)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ import (
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
"crypto/elliptic"
|
"crypto/elliptic"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"crypto/tls"
|
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"github.com/0xJacky/Nginx-UI/server/model"
|
"github.com/0xJacky/Nginx-UI/server/model"
|
||||||
"github.com/0xJacky/Nginx-UI/server/settings"
|
"github.com/0xJacky/Nginx-UI/server/settings"
|
||||||
|
@ -15,9 +14,11 @@ import (
|
||||||
"github.com/go-acme/lego/v4/challenge/http01"
|
"github.com/go-acme/lego/v4/challenge/http01"
|
||||||
"github.com/go-acme/lego/v4/lego"
|
"github.com/go-acme/lego/v4/lego"
|
||||||
"github.com/go-acme/lego/v4/registration"
|
"github.com/go-acme/lego/v4/registration"
|
||||||
|
"github.com/pkg/errors"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
@ -70,15 +71,20 @@ func GetCertInfo(domain string) (key *x509.Certificate, err error) {
|
||||||
|
|
||||||
var response *http.Response
|
var response *http.Response
|
||||||
|
|
||||||
ts := &http.Transport{
|
client := &http.Client{
|
||||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
Transport: &http.Transport{
|
||||||
|
DialContext: (&net.Dialer{
|
||||||
|
Timeout: 5 * time.Second,
|
||||||
|
}).DialContext,
|
||||||
|
DisableKeepAlives: true,
|
||||||
|
},
|
||||||
|
Timeout: 5 * time.Second,
|
||||||
}
|
}
|
||||||
|
|
||||||
client := &http.Client{Transport: ts}
|
|
||||||
|
|
||||||
response, err = client.Get("https://" + domain)
|
response, err = client.Get("https://" + domain)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
err = errors.Wrap(err, "get cert info error")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,8 +105,7 @@ func IssueCert(domain string) error {
|
||||||
// Create a user. New accounts need an email and private key to start.
|
// Create a user. New accounts need an email and private key to start.
|
||||||
privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
|
privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
return errors.Wrap(err, "issue cert generate key error")
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
myUser := MyUser{
|
myUser := MyUser{
|
||||||
|
@ -118,8 +123,7 @@ func IssueCert(domain string) error {
|
||||||
// A client facilitates communication with the CA server.
|
// A client facilitates communication with the CA server.
|
||||||
client, err := lego.NewClient(config)
|
client, err := lego.NewClient(config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
return errors.Wrap(err, "issue cert new client error")
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = client.Challenge.SetHTTP01Provider(
|
err = client.Challenge.SetHTTP01Provider(
|
||||||
|
@ -128,15 +132,14 @@ func IssueCert(domain string) error {
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
return errors.Wrap(err, "issue cert challenge fail")
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// New users will need to register
|
// New users will need to register
|
||||||
reg, err := client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true})
|
reg, err := client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return err
|
return errors.Wrap(err, "issue cert register fail")
|
||||||
}
|
}
|
||||||
myUser.Registration = reg
|
myUser.Registration = reg
|
||||||
|
|
||||||
|
@ -146,15 +149,13 @@ func IssueCert(domain string) error {
|
||||||
}
|
}
|
||||||
certificates, err := client.Certificate.Obtain(request)
|
certificates, err := client.Certificate.Obtain(request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
return errors.Wrap(err, "issue cert fail to obtain")
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
saveDir := nginx.GetNginxConfPath("ssl/" + domain)
|
saveDir := nginx.GetNginxConfPath("ssl/" + domain)
|
||||||
if _, err := os.Stat(saveDir); os.IsNotExist(err) {
|
if _, err := os.Stat(saveDir); os.IsNotExist(err) {
|
||||||
err = os.Mkdir(saveDir, 0755)
|
err = os.Mkdir(saveDir, 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("fail to create", saveDir)
|
return errors.Wrap(err, "issue cert fail to create")
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,13 +165,13 @@ func IssueCert(domain string) error {
|
||||||
certificates.Certificate, 0644)
|
certificates.Certificate, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return err
|
return errors.Wrap(err, "issue cert write fullchain.cer fail")
|
||||||
}
|
}
|
||||||
err = ioutil.WriteFile(filepath.Join(saveDir, domain+".key"),
|
err = ioutil.WriteFile(filepath.Join(saveDir, domain+".key"),
|
||||||
certificates.PrivateKey, 0644)
|
certificates.PrivateKey, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return err
|
return errors.Wrap(err, "issue cert write key fail")
|
||||||
}
|
}
|
||||||
|
|
||||||
nginx.ReloadNginx()
|
nginx.ReloadNginx()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue