cacert-gosigner/cmd/signer/main.go

77 lines
1.3 KiB
Go

package main
import (
"flag"
"os"
"os/signal"
log "github.com/sirupsen/logrus"
"go.bug.st/serial"
"git.cacert.org/cacert-gosigner/signer"
)
func main() {
var (
address string
baudRate, dataBits int
)
flag.StringVar(&address, "a", "/dev/ttyUSB0", "address")
flag.IntVar(&baudRate, "b", 115200, "baud rate")
flag.IntVar(&dataBits, "d", 8, "data bits")
flag.Parse()
log.SetFormatter(&log.TextFormatter{
DisableColors: true,
FullTimestamp: true,
})
log.SetLevel(log.TraceLevel)
serialMode := &serial.Mode{
BaudRate: baudRate,
DataBits: dataBits,
StopBits: serial.OneStopBit,
Parity: serial.NoParity,
}
log.Infof("connecting to %s using %+v", address, serialMode)
port, err := serial.Open(address, serialMode)
if err != nil {
log.Fatalf("could not open serial port: %v", err)
}
log.Info("connected")
defer func() {
err := port.Close()
if err != nil {
log.Fatalf("could not close port: %v", err)
}
log.Info("serial port closed")
}()
done := make(chan bool)
quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt)
go func() {
<-quit
log.Info("server is shutting down...")
close(done)
}()
go func() {
signerProcess := signer.NewSignerProcess(port)
signerProcess.MainLoop()
close(quit)
}()
<-done
log.Infoln("server stopped")
}