✨ Support multiple certificate
All checks were successful
release-nightly / build-docker (push) Successful in 2m4s
All checks were successful
release-nightly / build-docker (push) Successful in 2m4s
This commit is contained in:
@ -1,7 +1,9 @@
|
||||
package hypertext
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
"net"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@ -43,7 +45,33 @@ func InitServer() *fiber.App {
|
||||
return app
|
||||
}
|
||||
|
||||
func RunServer(app *fiber.App, ports []string, securedPorts []string, pem string, key string) {
|
||||
type CertificateConfig struct {
|
||||
Key string `json:"key"`
|
||||
Pem string `json:"pem"`
|
||||
}
|
||||
|
||||
func RunServer(app *fiber.App, ports []string, securedPorts []string) {
|
||||
var certs []CertificateConfig
|
||||
raw, _ := jsoniter.Marshal(viper.Get("hypertext.certificate"))
|
||||
jsoniter.Unmarshal(raw, &certs)
|
||||
|
||||
tlsCfg := &tls.Config{
|
||||
MinVersion: tls.VersionTLS12,
|
||||
Certificates: []tls.Certificate{},
|
||||
}
|
||||
|
||||
for _, info := range certs {
|
||||
cert, err := tls.LoadX509KeyPair(info.Pem, info.Key)
|
||||
if err != nil {
|
||||
log.Error().Err(err).
|
||||
Str("pem", info.Pem).
|
||||
Str("key", info.Key).
|
||||
Msg("An error occurred when loading certificate.")
|
||||
} else {
|
||||
tlsCfg.Certificates = append(tlsCfg.Certificates, cert)
|
||||
}
|
||||
}
|
||||
|
||||
for _, port := range ports {
|
||||
port := port
|
||||
go func() {
|
||||
@ -58,11 +86,11 @@ func RunServer(app *fiber.App, ports []string, securedPorts []string, pem string
|
||||
return c.Redirect(strings.ReplaceAll(string(c.Request().URI().FullURI()), "http", "https"))
|
||||
})
|
||||
if err := redirector.Listen(port); err != nil {
|
||||
log.Panic().Err(err).Msg("An error occurred when listening hypertext common ports.")
|
||||
log.Panic().Err(err).Msg("An error occurred when listening hypertext non-tls ports.")
|
||||
}
|
||||
} else {
|
||||
if err := app.Listen(port); err != nil {
|
||||
log.Panic().Err(err).Msg("An error occurred when listening hypertext common ports.")
|
||||
log.Panic().Err(err).Msg("An error occurred when listening hypertext non-tls ports.")
|
||||
}
|
||||
}
|
||||
}()
|
||||
@ -71,7 +99,11 @@ func RunServer(app *fiber.App, ports []string, securedPorts []string, pem string
|
||||
for _, port := range securedPorts {
|
||||
port := port
|
||||
go func() {
|
||||
if err := app.ListenTLS(port, pem, key); err != nil {
|
||||
listener, err := net.Listen("tcp", port)
|
||||
if err != nil {
|
||||
log.Panic().Err(err).Msg("An error occurred when listening hypertext tls ports.")
|
||||
}
|
||||
if err := app.Listener(tls.NewListener(listener, tlsCfg)); err != nil {
|
||||
log.Panic().Err(err).Msg("An error occurred when listening hypertext tls ports.")
|
||||
}
|
||||
}()
|
||||
|
Reference in New Issue
Block a user