@ -20,9 +20,12 @@ package main
import (
"context"
"flag"
"fmt"
"os"
"strings"
"github.com/sirupsen/logrus"
"gopkg.in/yaml.v3"
"git.cacert.org/cacert-gosigner/pkg/protocol"
"git.cacert.org/cacert-gosignerclient/internal/client"
@ -42,9 +45,9 @@ const (
func main ( ) {
var (
showVersion , verbose bool
configFile , logLevel string
logger * logrus . Logger
showVersion , verbose , generateConfig bool
configFile , logLevel string
logger * logrus . Logger
)
logger = logrus . New ( )
@ -56,6 +59,12 @@ func main() {
flag . StringVar ( & configFile , "config" , defaultConfigFile , "signer client configuration file" )
flag . BoolVar ( & showVersion , "version" , false , "show version" )
flag . BoolVar ( & verbose , "verbose" , false , "verbose output" )
flag . BoolVar (
& generateConfig ,
"generate-config" ,
false ,
"generate a configuration file with default values instead of running the client" ,
)
flag . StringVar ( & logLevel , "loglevel" , "INFO" , "log level" )
flag . Parse ( )
@ -71,9 +80,45 @@ func main() {
logger . SetLevel ( parsedLevel )
if generateConfig {
if err = generateDefaultConfig ( ) ; err != nil {
logger . WithError ( err ) . Fatal ( "could not generate default configuration" )
}
return
}
if err := startClient ( configFile , logger ) ; err != nil {
logger . WithError ( err ) . Fatal ( "client failure" )
}
}
func generateDefaultConfig ( ) error {
const defaultBaseConfiguration = ` -- -
serial :
device : / dev / ttyUSB0
baud : 112500
`
cfg , err := config . LoadConfiguration ( strings . NewReader (
defaultBaseConfiguration ) )
if err != nil {
return fmt . Errorf ( "could not load empty configuration: %w" , err )
}
enc := yaml . NewEncoder ( os . Stdout )
if err = enc . Encode ( cfg ) ; err != nil {
return fmt . Errorf ( "could not encode: %w" , err )
}
return nil
}
func startClient ( configFile string , logger * logrus . Logger ) error {
clientConfig , err := config . New ( configFile )
if err != nil {
logger . WithError ( err ) . Fatal ( "could not configure client" )
return fmt . Errorf ( "could not configure client: %w" , err )
}
commands := make ( chan * protocol . Command )
@ -81,12 +126,12 @@ func main() {
clientHandler , err := handler . New ( clientConfig , logger , commands , callbacks )
if err != nil {
logger . WithError ( err ) . Fatal ( "could not setup client handler ")
return fmt . Errorf ( "could not setup client handler : %w ", err )
}
signerClient , err := client . New ( clientConfig , logger , clientHandler , commands , callbacks )
if err != nil {
logger . WithError ( err ) . Fatal ( "could not setup client" )
return fmt . Errorf ( "could not setup client: %w" , err )
}
defer func ( ) { _ = signerClient . Close ( ) } ( )
@ -94,6 +139,8 @@ func main() {
logger . Info ( "setup complete, starting client operation" )
if err = signerClient . Run ( context . Background ( ) ) ; err != nil {
logger . WithError ( err ) . Fatal ( "error in client" )
return fmt . Errorf ( "error in client: %w" , err )
}
return nil
}