From c328eae95a8df134e3a3fd85770b11966afeb757 Mon Sep 17 00:00:00 2001 From: dehanj Date: Tue, 21 May 2024 13:39:37 +0200 Subject: [PATCH] Use enumeration for Darwin, which requires CGO when building. - Tkeyclient does not support building static binaries for Darwin, it requires CGO to enable enumeration of connected serial devices. In the short term we enable CGO for Darwin before we can find another reliable solution. See issue #13. --- go.mod | 2 +- internal/tkey/tkey.go | 3 +- internal/util/ports_darwin.go | 21 -------- internal/util/ports_linuxwindows.go | 79 ----------------------------- 4 files changed, 2 insertions(+), 103 deletions(-) delete mode 100644 internal/util/ports_darwin.go delete mode 100644 internal/util/ports_linuxwindows.go diff --git a/go.mod b/go.mod index 8ce3ea9..1a24989 100644 --- a/go.mod +++ b/go.mod @@ -6,12 +6,12 @@ require ( github.com/spf13/pflag v1.0.5 github.com/tillitis/tkeyclient v1.0.0 github.com/tillitis/tkeysign v1.0.0 - go.bug.st/serial v1.6.2 gopkg.in/yaml.v2 v2.4.0 ) require ( github.com/creack/goselect v0.1.2 // indirect + go.bug.st/serial v1.6.2 // indirect golang.org/x/crypto v0.22.0 // indirect golang.org/x/sys v0.19.0 // indirect ) diff --git a/internal/tkey/tkey.go b/internal/tkey/tkey.go index 0c52832..1d4209f 100644 --- a/internal/tkey/tkey.go +++ b/internal/tkey/tkey.go @@ -25,7 +25,6 @@ import ( "os" "os/signal" - "github.com/tillitis/tkey-verification/internal/util" "github.com/tillitis/tkeyclient" "github.com/tillitis/tkeysign" ) @@ -66,7 +65,7 @@ func NewTKey(devPath string, verbose bool) (*TKey, error) { } if devPath == "" { - devPath, err = util.DetectSerialPort(true) + devPath, err = tkeyclient.DetectSerialPort(true) if err != nil { return nil, ErrNoDevice } diff --git a/internal/util/ports_darwin.go b/internal/util/ports_darwin.go deleted file mode 100644 index 989604a..0000000 --- a/internal/util/ports_darwin.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2023 - Tillitis AB -// SPDX-License-Identifier: GPL-2.0-only - -//go:build darwin - -package util - -import ( - "fmt" - "os" -) - -func DetectSerialPort(verbose bool) (string, error) { - fmt.Fprintf(os.Stderr, `Serial port detection is not available on MacOS. -Please find the serial port device path using: - ls -l /dev/cu.* -Then run like: - tkey-verification command --port /dev/cu.usbmodemN -`) - return "", fmt.Errorf("not available on MacOS") -} diff --git a/internal/util/ports_linuxwindows.go b/internal/util/ports_linuxwindows.go deleted file mode 100644 index c937297..0000000 --- a/internal/util/ports_linuxwindows.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) 2023 - Tillitis AB -// SPDX-License-Identifier: GPL-2.0-only - -//go:build linux || windows - -package util - -import ( - "fmt" - "os" - - "go.bug.st/serial/enumerator" -) - -const ( - tillitisUSBVID = "1207" - tillitisUSBPID = "8887" -) - -type constError string - -func (err constError) Error() string { - return string(err) -} - -const ( - // Custom errors - ErrNoDevice = constError("no TKey connected") - ErrManyDevices = constError("more than one TKey connected") -) - -type SerialPort struct { - DevPath string - SerialNumber string -} - -func DetectSerialPort(verbose bool) (string, error) { - ports, err := getSerialPorts() - if err != nil { - return "", err - } - if len(ports) == 0 { - if verbose { - fmt.Fprintf(os.Stderr, "No TKey serial ports detected. You may specify a known device path using --port.\n") - } - return "", ErrNoDevice - } - if len(ports) > 1 { - if verbose { - fmt.Fprintf(os.Stderr, "Detected %d TKey serial ports:\n", len(ports)) - for _, p := range ports { - fmt.Fprintf(os.Stderr, "%s with serial number %s\n", p.DevPath, p.SerialNumber) - } - fmt.Fprintf(os.Stderr, "Please choose one of the above by using the --port flag.\n") - } - return "", ErrManyDevices - } - if verbose { - fmt.Fprintf(os.Stderr, "Auto-detected serial port %s\n", ports[0].DevPath) - } - return ports[0].DevPath, nil -} - -func getSerialPorts() ([]SerialPort, error) { - var ports []SerialPort - - portDetails, err := enumerator.GetDetailedPortsList() - if err != nil { - return nil, fmt.Errorf("GetDetailedPortsList: %w", err) - } - - for _, port := range portDetails { - if port.IsUSB && port.VID == tillitisUSBVID && port.PID == tillitisUSBPID { - ports = append(ports, SerialPort{port.Name, port.SerialNumber}) - } - } - - return ports, nil -}