diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index 7ec9229..4a9d102 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -26,12 +26,12 @@ jobs: - name: Install Go uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 with: - go-version: 1.23.x + go-version: 1.24.x - name: Create empty resource directory run: | mkdir -p static && touch static/.gitkeep - name: Lint - uses: golangci/golangci-lint-action@971e284b6050e8a5849b72094c50ab08da042db8 # v6.1.1 + uses: golangci/golangci-lint-action@1481404843c368bc19ca9406f87d6e0fc97bdcfd # v7.0.0 with: args: --verbose - version: v1.62.0 + version: v2.0.2 diff --git a/.golangci.yml b/.golangci.yml index 95a1cb8..ccd3c1a 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,22 +1,37 @@ ---- +version: "2" linters: enable: - - forbidigo - - goimports - - misspell - # - revive - - whitespace - -issues: - exclude-rules: - - path: _test.go - linters: - - errcheck - -linters-settings: - forbidigo: - forbid: - - p: ^fmt\.Print.*$ - msg: Do not commit print statements. Use logger package. - - p: ^log\.(Fatal|Panic|Print)(f|ln)?.*$ - msg: Do not commit log statements. Use logger package. + - forbidigo + - misspell + - whitespace + settings: + forbidigo: + forbid: + - pattern: ^fmt\.Print.*$ + msg: Do not commit print statements. Use logger package. + - pattern: ^log\.(Fatal|Panic|Print)(f|ln)?.*$ + msg: Do not commit log statements. Use logger package. + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + rules: + - linters: + - errcheck + path: _test.go + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - goimports + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/block_device.go b/block_device.go index d93f474..e4eab80 100644 --- a/block_device.go +++ b/block_device.go @@ -34,16 +34,17 @@ func (r remoteImageBackend) ReadAt(p []byte, off int64) (n int, err error) { readLen = mountedImageSize - off } var data []byte - if source == WebRTC { + switch source { + case WebRTC: data, err = webRTCDiskReader.Read(ctx, off, readLen) if err != nil { return 0, err } n = copy(p, data) return n, nil - } else if source == HTTP { + case HTTP: return httpRangeReader.ReadAt(p, off) - } else { + default: return 0, errors.New("unknown image source") } } diff --git a/display.go b/display.go index 38e12b1..cbe9ddd 100644 --- a/display.go +++ b/display.go @@ -228,7 +228,7 @@ func startBacklightTickers() { defer dimTicker.Stop() go func() { - for { //nolint:gosimple + for { //nolint:staticcheck select { case <-dimTicker.C: tick_displayDim() @@ -243,7 +243,7 @@ func startBacklightTickers() { defer offTicker.Stop() go func() { - for { //nolint:gosimple + for { //nolint:staticcheck select { case <-offTicker.C: tick_displayOff() diff --git a/fuse.go b/fuse.go index ea50bfd..19f144f 100644 --- a/fuse.go +++ b/fuse.go @@ -37,7 +37,7 @@ func (f *WebRTCStreamFile) Getattr(ctx context.Context, fh fs.FileHandle, out *f f.mu.Lock() defer f.mu.Unlock() out.Attr = f.Attr - out.Attr.Size = f.size + out.Size = f.size return fs.OK } diff --git a/internal/websecure/store.go b/internal/websecure/store.go index 7da2dee..69ae3ef 100644 --- a/internal/websecure/store.go +++ b/internal/websecure/store.go @@ -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") err = os.MkdirAll(s.storePath, 0755) 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 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() { @@ -115,7 +115,7 @@ func (s *CertStore) GetCertificate(hostname string) *tls.Certificate { func (s *CertStore) ValidateAndSaveCertificate(hostname string, cert string, key string, ignoreWarning bool) (error, error) { tlsCert, err := tls.X509KeyPair([]byte(cert), []byte(key)) 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 @@ -129,7 +129,7 @@ func (s *CertStore) ValidateAndSaveCertificate(hostname string, cert string, key if err = tlsCert.Leaf.VerifyHostname(hostname); err != nil { 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") } diff --git a/internal/websecure/utils.go b/internal/websecure/utils.go index de29c73..b0038c0 100644 --- a/internal/websecure/utils.go +++ b/internal/websecure/utils.go @@ -35,7 +35,7 @@ func keyToFile(cert *tls.Certificate, filename string) error { case *ecdsa.PrivateKey: b, e := x509.MarshalECPrivateKey(k) 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{ @@ -43,7 +43,7 @@ func keyToFile(cert *tls.Certificate, filename string) error { Bytes: b, } 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 { @@ -51,7 +51,7 @@ func keyToFile(cert *tls.Certificate, filename string) error { }) 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 @@ -67,7 +67,7 @@ func certToFile(cert *tls.Certificate, filename string) error { err := pem.Encode(file, &block) if err != nil { - return fmt.Errorf("Failed to save certificate: %w", err) + return fmt.Errorf("failed to save certificate: %w", err) } } diff --git a/jsonrpc.go b/jsonrpc.go index 0c7d7fd..248390e 100644 --- a/jsonrpc.go +++ b/jsonrpc.go @@ -659,18 +659,20 @@ func rpcSetActiveExtension(extensionId string) error { if config.ActiveExtension == extensionId { return nil } - if config.ActiveExtension == "atx-power" { + switch config.ActiveExtension { + case "atx-power": _ = unmountATXControl() - } else if config.ActiveExtension == "dc-power" { + case "dc-power": _ = unmountDCControl() } config.ActiveExtension = extensionId if err := SaveConfig(); err != nil { return fmt.Errorf("failed to save config: %w", err) } - if extensionId == "atx-power" { + switch extensionId { + case "atx-power": _ = mountATXControl() - } else if extensionId == "dc-power" { + case "dc-power": _ = mountDCControl() } return nil diff --git a/serial.go b/serial.go index 214a465..f4dd5b5 100644 --- a/serial.go +++ b/serial.go @@ -219,9 +219,10 @@ var defaultMode = &serial.Mode{ func initSerialPort() { _ = reopenSerialPort() - if config.ActiveExtension == "atx-power" { + switch config.ActiveExtension { + case "atx-power": _ = mountATXControl() - } else if config.ActiveExtension == "dc-power" { + case "dc-power": _ = mountDCControl() } } diff --git a/usb_mass_storage.go b/usb_mass_storage.go index e70a353..2b03f1f 100644 --- a/usb_mass_storage.go +++ b/usb_mass_storage.go @@ -62,11 +62,11 @@ func onDiskMessage(msg webrtc.DataChannelMessage) { func mountImage(imagePath string) error { err := setMassStorageImage("") 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) 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 } @@ -476,10 +476,8 @@ func handleUploadChannel(d *webrtc.DataChannel) { } totalBytesWritten += int64(bytesWritten) - sendProgress := false - if time.Since(lastProgressTime) >= 200*time.Millisecond { - sendProgress = true - } + sendProgress := time.Since(lastProgressTime) >= 200*time.Millisecond + if totalBytesWritten >= pendingUpload.Size { sendProgress = true close(uploadComplete) diff --git a/web_tls.go b/web_tls.go index 2989957..cbff56b 100644 --- a/web_tls.go +++ b/web_tls.go @@ -52,12 +52,13 @@ func initCertStore() { } func getCertificate(info *tls.ClientHelloInfo) (*tls.Certificate, error) { - if config.TLSMode == "self-signed" { + switch config.TLSMode { + case "self-signed": if isTimeSyncNeeded() || !timeSyncSuccess { return nil, fmt.Errorf("time is not synced") } return certSigner.GetCertificate(info) - } else if config.TLSMode == "custom" { + case "custom": return certStore.GetCertificate(webSecureCustomCertificateName), nil } @@ -110,7 +111,7 @@ func setTLSState(s TLSState) error { err, _ := certStore.ValidateAndSaveCertificate(webSecureCustomCertificateName, s.Certificate, s.PrivateKey, true) // warn doesn't matter as ... we don't know the hostname yet if err != nil { - return fmt.Errorf("Failed to save certificate: %w", err) + return fmt.Errorf("failed to save certificate: %w", err) } config.TLSMode = "custom" case "self-signed": @@ -169,7 +170,7 @@ func runWebSecureServer() { websecureLogger.Info().Str("listen", webSecureListen).Msg("Starting websecure server") go func() { - for _ = range stopTLS { + for range stopTLS { websecureLogger.Info().Msg("Shutting down websecure server") err := server.Shutdown(context.Background()) if err != nil { @@ -201,7 +202,7 @@ func startWebSecureServer() { } func RunWebSecureServer() { - for _ = range startTLS { + for range startTLS { websecureLogger.Info().Msg("Starting websecure server, as we have received a start signal") if certStore == nil { initCertStore()