chore: fix linter issues

This commit is contained in:
Siyuan Miao 2025-04-15 17:08:40 +02:00
parent db2ce258ae
commit e504276447
26 changed files with 107 additions and 89 deletions

View File

@ -33,16 +33,17 @@ func (r remoteImageBackend) ReadAt(p []byte, off int64) (n int, err error) {
readLen = mountedImageSize - off readLen = mountedImageSize - off
} }
var data []byte var data []byte
if source == WebRTC { switch source {
case WebRTC:
data, err = webRTCDiskReader.Read(ctx, off, readLen) data, err = webRTCDiskReader.Read(ctx, off, readLen)
if err != nil { if err != nil {
return 0, err return 0, err
} }
n = copy(p, data) n = copy(p, data)
return n, nil return n, nil
} else if source == HTTP { case HTTP:
return httpRangeReader.ReadAt(p, off) return httpRangeReader.ReadAt(p, off)
} else { default:
return 0, errors.New("unknown image source") return 0, errors.New("unknown image source")
} }
} }

View File

@ -341,7 +341,7 @@ func startBacklightTickers() {
defer dimTicker.Stop() defer dimTicker.Stop()
go func() { go func() {
for { //nolint:gosimple for { //nolint:staticcheck
select { select {
case <-dimTicker.C: case <-dimTicker.C:
tick_displayDim() tick_displayDim()
@ -356,7 +356,7 @@ func startBacklightTickers() {
defer offTicker.Stop() defer offTicker.Stop()
go func() { go func() {
for { //nolint:gosimple for { //nolint:staticcheck
select { select {
case <-offTicker.C: case <-offTicker.C:
tick_displayOff() tick_displayOff()

View File

@ -2,7 +2,6 @@ package confparser
import ( import (
"fmt" "fmt"
"log"
"net" "net"
"reflect" "reflect"
"slices" "slices"
@ -247,7 +246,6 @@ func (f *FieldConfig) checkIfFieldNeedsUpdate() error {
} }
f.shouldUpdateValue = true f.shouldUpdateValue = true
log.Printf("field `%s` updated to default value: %v", f.Name, f.CurrentValue)
} }
return nil return nil

View File

@ -8,7 +8,7 @@ import (
"github.com/guregu/null/v6" "github.com/guregu/null/v6"
) )
type testIPv6Address struct { type testIPv6Address struct { //nolint:unused
Address net.IP `json:"address"` Address net.IP `json:"address"`
Prefix net.IPNet `json:"prefix"` Prefix net.IPNet `json:"prefix"`
ValidLifetime *time.Time `json:"valid_lifetime"` ValidLifetime *time.Time `json:"valid_lifetime"`

View File

@ -17,11 +17,11 @@ func splitString(s string) []string {
} }
func toString(v interface{}) (string, error) { func toString(v interface{}) (string, error) {
switch v.(type) { switch v := v.(type) {
case string: case string:
return v.(string), nil return v, nil
case null.String: case null.String:
return v.(null.String).String, nil return v.String, nil
} }
return "", fmt.Errorf("unsupported type: %s", reflect.TypeOf(v)) return "", fmt.Errorf("unsupported type: %s", reflect.TypeOf(v))

View File

@ -116,7 +116,6 @@ func sseHeadersMiddleware() gin.HandlerFunc {
} }
func AttachSSEHandler(router *gin.RouterGroup) { func AttachSSEHandler(router *gin.RouterGroup) {
router.StaticFS("/log-stream", http.FS(sseHTML)) router.StaticFS("/log-stream", http.FS(sseHTML))
router.GET("/log-stream", sseHeadersMiddleware(), sseServer.serveHTTP(), func(c *gin.Context) { router.GET("/log-stream", sseHeadersMiddleware(), sseServer.serveHTTP(), func(c *gin.Context) {
v, ok := c.Get("clientChan") v, ok := c.Get("clientChan")

View File

@ -171,7 +171,7 @@ func (m *MDNS) SetLocalNames(localNames []string, always bool) error {
} }
m.localNames = localNames m.localNames = localNames
m.Restart() _ = m.Restart()
return nil return nil
} }
@ -184,7 +184,7 @@ func (m *MDNS) SetListenOptions(listenOptions *MDNSListenOptions) error {
} }
m.listenOptions = listenOptions m.listenOptions = listenOptions
m.Restart() _ = m.Restart()
return nil return nil
} }

View File

@ -57,11 +57,12 @@ func (c *NetworkConfig) GetMDNSMode() *mdns.MDNSListenOptions {
IPv6: true, IPv6: true,
} }
if mode == "ipv4_only" { switch mode {
case "ipv4_only":
listenOptions.IPv6 = false listenOptions.IPv6 = false
} else if mode == "ipv6_only" { case "ipv6_only":
listenOptions.IPv4 = false listenOptions.IPv4 = false
} else if mode == "disabled" { case "disabled":
listenOptions.IPv4 = false listenOptions.IPv4 = false
listenOptions.IPv6 = false listenOptions.IPv6 = false
} }

View File

@ -29,7 +29,10 @@ func updateEtcHosts(hostname string, fqdn string) error {
defer hostsFile.Close() defer hostsFile.Close()
// read all lines // read all lines
hostsFile.Seek(0, io.SeekStart) if _, err := hostsFile.Seek(0, io.SeekStart); err != nil {
return fmt.Errorf("failed to seek %s: %w", hostsPath, err)
}
lines, err := io.ReadAll(hostsFile) lines, err := io.ReadAll(hostsFile)
if err != nil { if err != nil {
return fmt.Errorf("failed to read %s: %w", hostsPath, err) return fmt.Errorf("failed to read %s: %w", hostsPath, err)
@ -51,9 +54,17 @@ func updateEtcHosts(hostname string, fqdn string) error {
newLines = append(newLines, hostLine) newLines = append(newLines, hostLine)
} }
hostsFile.Truncate(0) if err := hostsFile.Truncate(0); err != nil {
hostsFile.Seek(0, io.SeekStart) return fmt.Errorf("failed to truncate %s: %w", hostsPath, err)
hostsFile.Write([]byte(strings.Join(newLines, "\n"))) }
if _, err := hostsFile.Seek(0, io.SeekStart); err != nil {
return fmt.Errorf("failed to seek %s: %w", hostsPath, err)
}
if _, err := hostsFile.Write([]byte(strings.Join(newLines, "\n"))); err != nil {
return fmt.Errorf("failed to write %s: %w", hostsPath, err)
}
return nil return nil
} }
@ -82,7 +93,9 @@ func SetHostname(hostname string, fqdn string) error {
} }
// update /etc/hostname // update /etc/hostname
os.WriteFile(hostnamePath, []byte(hostname), 0644) if err := os.WriteFile(hostnamePath, []byte(hostname), 0644); err != nil {
return fmt.Errorf("failed to write %s: %w", hostnamePath, err)
}
// update /etc/hosts // update /etc/hosts
if err := updateEtcHosts(hostname, fqdn); err != nil { if err := updateEtcHosts(hostname, fqdn); err != nil {

View File

@ -90,7 +90,7 @@ func NewNetworkInterfaceState(opts *NetworkInterfaceOptions) (*NetworkInterfaceS
return return
} }
s.setHostnameIfNotSame() _ = s.setHostnameIfNotSame()
opts.OnDhcpLeaseChange(lease) opts.OnDhcpLeaseChange(lease)
}, },
@ -195,8 +195,8 @@ func (s *NetworkInterfaceState) update() (DhcpTargetState, error) {
ipv4Addresses = make([]net.IP, 0) ipv4Addresses = make([]net.IP, 0)
ipv4AddressesString = make([]string, 0) ipv4AddressesString = make([]string, 0)
ipv6Addresses = make([]IPv6Address, 0) ipv6Addresses = make([]IPv6Address, 0)
ipv6AddressesString = make([]string, 0) // ipv6AddressesString = make([]string, 0)
ipv6LinkLocal *net.IP ipv6LinkLocal *net.IP
) )
for _, addr := range addrs { for _, addr := range addrs {
@ -243,7 +243,7 @@ func (s *NetworkInterfaceState) update() (DhcpTargetState, error) {
PreferredLifetime: lifetimeToTime(addr.PreferedLft), PreferredLifetime: lifetimeToTime(addr.PreferedLft),
Scope: addr.Scope, Scope: addr.Scope,
}) })
ipv6AddressesString = append(ipv6AddressesString, addr.IPNet.String()) // ipv6AddressesString = append(ipv6AddressesString, addr.IPNet.String())
} }
} }
@ -341,6 +341,6 @@ func (s *NetworkInterfaceState) CheckAndUpdateDhcp() error {
} }
func (s *NetworkInterfaceState) onConfigChange(config *NetworkConfig) { func (s *NetworkInterfaceState) onConfigChange(config *NetworkConfig) {
s.setHostnameIfNotSame() _ = s.setHostnameIfNotSame()
s.cbConfigChange(config) s.cbConfigChange(config)
} }

View File

@ -19,5 +19,8 @@ func IsSame(a, b interface{}) bool {
return false return false
} }
bJSON, err := json.Marshal(b) bJSON, err := json.Marshal(b)
if err != nil {
return false
}
return string(aJSON) == string(bJSON) return string(aJSON) == string(bJSON)
} }

View File

@ -53,7 +53,7 @@ func (t *TimeSync) queryMultipleHttp(urls []string, timeout time.Duration) (now
metricHttpTotalRequestCount.Inc() metricHttpTotalRequestCount.Inc()
startTime := time.Now() startTime := time.Now()
now, err, response := queryHttpTime( now, response, err := queryHttpTime(
ctx, ctx,
url, url,
timeout, timeout,
@ -111,22 +111,22 @@ func queryHttpTime(
ctx context.Context, ctx context.Context,
url string, url string,
timeout time.Duration, timeout time.Duration,
) (now *time.Time, err error, response *http.Response) { ) (now *time.Time, response *http.Response, err error) {
client := http.Client{ client := http.Client{
Timeout: timeout, Timeout: timeout,
} }
req, err := http.NewRequestWithContext(ctx, "GET", url, nil) req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
if err != nil { if err != nil {
return nil, err, nil return nil, nil, err
} }
resp, err := client.Do(req) resp, err := client.Do(req)
if err != nil { if err != nil {
return nil, err, nil return nil, nil, err
} }
dateStr := resp.Header.Get("Date") dateStr := resp.Header.Get("Date")
parsedTime, err := time.Parse(time.RFC1123, dateStr) parsedTime, err := time.Parse(time.RFC1123, dateStr)
if err != nil { if err != nil {
return nil, err, resp return nil, nil, err
} }
return &parsedTime, nil, resp return &parsedTime, resp, nil
} }

View File

@ -24,7 +24,7 @@ var (
Help: "The number of times the timesync has been successful", Help: "The number of times the timesync has been successful",
}, },
) )
metricRTCUpdateCount = promauto.NewCounter( metricRTCUpdateCount = promauto.NewCounter( //nolint:unused
prometheus.CounterOpts{ prometheus.CounterOpts{
Name: "jetkvm_timesync_rtc_update_count", Name: "jetkvm_timesync_rtc_update_count",
Help: "The number of times the RTC has been updated", Help: "The number of times the RTC has been updated",

View File

@ -56,7 +56,7 @@ func (t *TimeSync) queryMultipleNTP(servers []string, timeout time.Duration) (no
metricNtpRequestCount.WithLabelValues(server).Inc() metricNtpRequestCount.WithLabelValues(server).Inc()
// query the server // query the server
now, err, response := queryNtpServer(server, timeout) now, response, err := queryNtpServer(server, timeout)
// set the last RTT // set the last RTT
metricNtpServerLastRTT.WithLabelValues( metricNtpServerLastRTT.WithLabelValues(
@ -104,10 +104,10 @@ func (t *TimeSync) queryMultipleNTP(servers []string, timeout time.Duration) (no
return result.now, result.offset return result.now, result.offset
} }
func queryNtpServer(server string, timeout time.Duration) (now *time.Time, err error, response *ntp.Response) { func queryNtpServer(server string, timeout time.Duration) (now *time.Time, response *ntp.Response, err error) {
resp, err := ntp.QueryWithOptions(server, ntp.QueryOptions{Timeout: timeout}) resp, err := ntp.QueryWithOptions(server, ntp.QueryOptions{Timeout: timeout})
if err != nil { if err != nil {
return nil, err, nil return nil, nil, err
} }
return &resp.Time, nil, resp return &resp.Time, resp, nil
} }

View File

@ -33,7 +33,7 @@ type TimeSync struct {
networkConfig *network.NetworkConfig networkConfig *network.NetworkConfig
rtcDevicePath string rtcDevicePath string
rtcDevice *os.File rtcDevice *os.File //nolint:unused
rtcLock *sync.Mutex rtcLock *sync.Mutex
syncSuccess bool syncSuccess bool

View File

@ -83,7 +83,10 @@ func (c *DHCPClient) Run() error {
for { for {
select { select {
case event, ok := <-watcher.Events: case event, ok := <-watcher.Events:
if !ok || !(event.Has(fsnotify.Write) || event.Has(fsnotify.Create)) { if !ok {
continue
}
if !event.Has(fsnotify.Write) && !event.Has(fsnotify.Create) {
continue continue
} }
@ -165,7 +168,7 @@ func (c *DHCPClient) loadLeaseFile() error {
if err != nil { if err != nil {
c.logger.Error().Err(err).Msg("failed to get dhcp lease expiry") c.logger.Error().Err(err).Msg("failed to get dhcp lease expiry")
} else { } else {
expiresIn := leaseExpiry.Sub(time.Now()) expiresIn := time.Until(leaseExpiry)
c.logger.Info(). c.logger.Info().
Interface("expiry", leaseExpiry). Interface("expiry", leaseExpiry).
Str("expiresIn", expiresIn.String()). Str("expiresIn", expiresIn.String()).

View File

@ -49,12 +49,12 @@ func (s *CertStore) ensureStorePath() error {
s.log.Trace().Str("path", s.storePath).Msg("TLS store directory does not exist, creating directory") s.log.Trace().Str("path", s.storePath).Msg("TLS store directory does not exist, creating directory")
err = os.MkdirAll(s.storePath, 0755) err = os.MkdirAll(s.storePath, 0755)
if err != nil { if err != nil {
return fmt.Errorf("Failed to create TLS store path: %w", err) return fmt.Errorf("failed to create TLS store path: %w", err)
} }
return nil return nil
} }
return fmt.Errorf("Failed to check TLS store path: %w", err) return fmt.Errorf("failed to check TLS store path: %w", err)
} }
func (s *CertStore) LoadCertificates() { func (s *CertStore) LoadCertificates() {
@ -119,7 +119,7 @@ func (s *CertStore) GetCertificate(hostname string) *tls.Certificate {
func (s *CertStore) ValidateAndSaveCertificate(hostname string, cert string, key string, ignoreWarning bool) (error, error) { func (s *CertStore) ValidateAndSaveCertificate(hostname string, cert string, key string, ignoreWarning bool) (error, error) {
tlsCert, err := tls.X509KeyPair([]byte(cert), []byte(key)) tlsCert, err := tls.X509KeyPair([]byte(cert), []byte(key))
if err != nil { if err != nil {
return fmt.Errorf("Failed to parse certificate: %w", err), nil return fmt.Errorf("failed to parse certificate: %w", err), nil
} }
// this can be skipped as current implementation supports one custom certificate only // this can be skipped as current implementation supports one custom certificate only
@ -133,9 +133,9 @@ func (s *CertStore) ValidateAndSaveCertificate(hostname string, cert string, key
if err = tlsCert.Leaf.VerifyHostname(hostname); err != nil { if err = tlsCert.Leaf.VerifyHostname(hostname); err != nil {
if !ignoreWarning { if !ignoreWarning {
return nil, fmt.Errorf("Certificate does not match hostname: %w", err) return nil, fmt.Errorf("certificate does not match hostname: %w", err)
} }
s.log.Warn().Err(err).Msg("Certificate does not match hostname") s.log.Warn().Err(err).Msg("certificate does not match hostname")
} }
} }

View File

@ -35,7 +35,7 @@ func keyToFile(cert *tls.Certificate, filename string) error {
case *ecdsa.PrivateKey: case *ecdsa.PrivateKey:
b, e := x509.MarshalECPrivateKey(k) b, e := x509.MarshalECPrivateKey(k)
if e != nil { if e != nil {
return fmt.Errorf("Failed to marshal EC private key: %v", e) return fmt.Errorf("failed to marshal EC private key: %v", e)
} }
keyBlock = pem.Block{ keyBlock = pem.Block{
@ -43,7 +43,7 @@ func keyToFile(cert *tls.Certificate, filename string) error {
Bytes: b, Bytes: b,
} }
default: default:
return fmt.Errorf("Unknown private key type: %T", k) return fmt.Errorf("unknown private key type: %T", k)
} }
err := withSecretFile(filename, func(file *os.File) error { err := withSecretFile(filename, func(file *os.File) error {
@ -51,7 +51,7 @@ func keyToFile(cert *tls.Certificate, filename string) error {
}) })
if err != nil { if err != nil {
return fmt.Errorf("Failed to save private key: %w", err) return fmt.Errorf("failed to save private key: %w", err)
} }
return nil return nil
@ -67,7 +67,7 @@ func certToFile(cert *tls.Certificate, filename string) error {
err := pem.Encode(file, &block) err := pem.Encode(file, &block)
if err != nil { if err != nil {
return fmt.Errorf("Failed to save certificate: %w", err) return fmt.Errorf("failed to save certificate: %w", err)
} }
} }

View File

@ -659,18 +659,20 @@ func rpcSetActiveExtension(extensionId string) error {
if config.ActiveExtension == extensionId { if config.ActiveExtension == extensionId {
return nil return nil
} }
if config.ActiveExtension == "atx-power" { switch extensionId {
case "atx-power":
_ = unmountATXControl() _ = unmountATXControl()
} else if config.ActiveExtension == "dc-power" { case "dc-power":
_ = unmountDCControl() _ = unmountDCControl()
} }
config.ActiveExtension = extensionId config.ActiveExtension = extensionId
if err := SaveConfig(); err != nil { if err := SaveConfig(); err != nil {
return fmt.Errorf("failed to save config: %w", err) return fmt.Errorf("failed to save config: %w", err)
} }
if extensionId == "atx-power" { switch extensionId {
case "atx-power":
_ = mountATXControl() _ = mountATXControl()
} else if extensionId == "dc-power" { case "dc-power":
_ = mountDCControl() _ = mountDCControl()
} }
return nil return nil

5
log.go
View File

@ -5,16 +5,11 @@ import (
"github.com/rs/zerolog" "github.com/rs/zerolog"
) )
const (
defaultLogLevel = zerolog.ErrorLevel
)
func ErrorfL(l *zerolog.Logger, format string, err error, args ...interface{}) error { func ErrorfL(l *zerolog.Logger, format string, err error, args ...interface{}) error {
return logging.ErrorfL(l, format, err, args...) return logging.ErrorfL(l, format, err, args...)
} }
var ( var (
rootLogger = logging.GetRootLogger()
logger = logging.GetSubsystemLogger("jetkvm") logger = logging.GetSubsystemLogger("jetkvm")
networkLogger = logging.GetSubsystemLogger("network") networkLogger = logging.GetSubsystemLogger("network")
cloudLogger = logging.GetSubsystemLogger("cloud") cloudLogger = logging.GetSubsystemLogger("cloud")

View File

@ -12,7 +12,6 @@ import (
"time" "time"
"github.com/jetkvm/kvm/resource" "github.com/jetkvm/kvm/resource"
"github.com/rs/zerolog"
"github.com/pion/webrtc/v4/pkg/media" "github.com/pion/webrtc/v4/pkg/media"
) )
@ -34,19 +33,6 @@ type CtrlResponse struct {
Data json.RawMessage `json:"data,omitempty"` Data json.RawMessage `json:"data,omitempty"`
} }
type nativeOutput struct {
mu *sync.Mutex
logger *zerolog.Event
}
func (w *nativeOutput) Write(p []byte) (n int, err error) {
w.mu.Lock()
defer w.mu.Unlock()
w.logger.Msg(string(p))
return len(p), nil
}
type EventHandler func(event CtrlResponse) type EventHandler func(event CtrlResponse)
var seq int32 = 1 var seq int32 = 1

View File

@ -7,8 +7,23 @@ import (
"os/exec" "os/exec"
"sync" "sync"
"syscall" "syscall"
"github.com/rs/zerolog"
) )
type nativeOutput struct {
mu *sync.Mutex
logger *zerolog.Event
}
func (w *nativeOutput) Write(p []byte) (n int, err error) {
w.mu.Lock()
defer w.mu.Unlock()
w.logger.Msg(string(p))
return len(p), nil
}
func startNativeBinary(binaryPath string) (*exec.Cmd, error) { func startNativeBinary(binaryPath string) (*exec.Cmd, error) {
// Run the binary in the background // Run the binary in the background
cmd := exec.Command(binaryPath) cmd := exec.Command(binaryPath)

View File

@ -21,7 +21,7 @@ func networkStateChanged() {
// always restart mDNS when the network state changes // always restart mDNS when the network state changes
if mDNS != nil { if mDNS != nil {
mDNS.SetLocalNames([]string{ _ = mDNS.SetLocalNames([]string{
networkState.GetHostname(), networkState.GetHostname(),
networkState.GetFQDN(), networkState.GetFQDN(),
}, true) }, true)
@ -56,8 +56,8 @@ func initNetwork() error {
networkStateChanged() networkStateChanged()
if mDNS != nil { if mDNS != nil {
mDNS.SetListenOptions(networkConfig.GetMDNSMode()) _ = mDNS.SetListenOptions(networkConfig.GetMDNSMode())
mDNS.SetLocalNames([]string{ _ = mDNS.SetLocalNames([]string{
networkState.GetHostname(), networkState.GetHostname(),
networkState.GetFQDN(), networkState.GetFQDN(),
}, true) }, true)

View File

@ -219,9 +219,10 @@ var defaultMode = &serial.Mode{
func initSerialPort() { func initSerialPort() {
_ = reopenSerialPort() _ = reopenSerialPort()
if config.ActiveExtension == "atx-power" { switch config.ActiveExtension {
case "atx-power":
_ = mountATXControl() _ = mountATXControl()
} else if config.ActiveExtension == "dc-power" { case "dc-power":
_ = mountDCControl() _ = mountDCControl()
} }
} }

View File

@ -62,11 +62,11 @@ func onDiskMessage(msg webrtc.DataChannelMessage) {
func mountImage(imagePath string) error { func mountImage(imagePath string) error {
err := setMassStorageImage("") err := setMassStorageImage("")
if err != nil { if err != nil {
return fmt.Errorf("Remove Mass Storage Image Error: %w", err) return fmt.Errorf("remove mass storage image error: %w", err)
} }
err = setMassStorageImage(imagePath) err = setMassStorageImage(imagePath)
if err != nil { if err != nil {
return fmt.Errorf("Set Mass Storage Image Error: %w", err) return fmt.Errorf("set mass storage image error: %w", err)
} }
return nil return nil
} }
@ -476,7 +476,7 @@ func handleUploadChannel(d *webrtc.DataChannel) {
} }
totalBytesWritten += int64(bytesWritten) totalBytesWritten += int64(bytesWritten)
sendProgress := false sendProgress := false //nolint:staticcheck
if time.Since(lastProgressTime) >= 200*time.Millisecond { if time.Since(lastProgressTime) >= 200*time.Millisecond {
sendProgress = true sendProgress = true
} }

View File

@ -52,12 +52,13 @@ func initCertStore() {
} }
func getCertificate(info *tls.ClientHelloInfo) (*tls.Certificate, error) { func getCertificate(info *tls.ClientHelloInfo) (*tls.Certificate, error) {
if config.TLSMode == "self-signed" { switch config.TLSMode {
case "self-signed":
if isTimeSyncNeeded() || !timeSync.IsSyncSuccess() { if isTimeSyncNeeded() || !timeSync.IsSyncSuccess() {
return nil, fmt.Errorf("time is not synced") return nil, fmt.Errorf("time is not synced")
} }
return certSigner.GetCertificate(info) return certSigner.GetCertificate(info)
} else if config.TLSMode == "custom" { case "custom":
return certStore.GetCertificate(webSecureCustomCertificateName), nil return certStore.GetCertificate(webSecureCustomCertificateName), nil
} }
@ -110,7 +111,7 @@ func setTLSState(s TLSState) error {
err, _ := certStore.ValidateAndSaveCertificate(webSecureCustomCertificateName, s.Certificate, s.PrivateKey, true) err, _ := certStore.ValidateAndSaveCertificate(webSecureCustomCertificateName, s.Certificate, s.PrivateKey, true)
// warn doesn't matter as ... we don't know the hostname yet // warn doesn't matter as ... we don't know the hostname yet
if err != nil { if err != nil {
return fmt.Errorf("Failed to save certificate: %w", err) return fmt.Errorf("failed to save certificate: %w", err)
} }
config.TLSMode = "custom" config.TLSMode = "custom"
case "self-signed": case "self-signed":
@ -169,11 +170,11 @@ func runWebSecureServer() {
websecureLogger.Info().Str("listen", webSecureListen).Msg("Starting websecure server") websecureLogger.Info().Str("listen", webSecureListen).Msg("Starting websecure server")
go func() { go func() {
for _ = range stopTLS { for range stopTLS {
websecureLogger.Info().Msg("Shutting down websecure server") websecureLogger.Info().Msg("shutting down websecure server")
err := server.Shutdown(context.Background()) err := server.Shutdown(context.Background())
if err != nil { if err != nil {
websecureLogger.Error().Err(err).Msg("Failed to shutdown websecure server") websecureLogger.Error().Err(err).Msg("failed to shutdown websecure server")
} }
} }
}() }()
@ -201,8 +202,8 @@ func startWebSecureServer() {
} }
func RunWebSecureServer() { func RunWebSecureServer() {
for _ = range startTLS { for range startTLS {
websecureLogger.Info().Msg("Starting websecure server, as we have received a start signal") websecureLogger.Info().Msg("starting websecure server, as we have received a start signal")
if certStore == nil { if certStore == nil {
initCertStore() initCertStore()
} }