diff --git a/internal/client/client.go b/internal/client/client.go index 1bc5c48..28ce7bd 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -10,6 +10,7 @@ import ( "io" "log/slog" "net" + "os" "koti.casa/numenor-labs/dsfx/internal/lib/crypto/identity" "koti.casa/numenor-labs/dsfx/internal/lib/disk" @@ -28,6 +29,23 @@ const ( type Conf struct { // Directories ConfigDir string + LogLevel string +} + +// SlogLevel returns the appropriate slog.Level based on the LogLevel string. +func (c Conf) SlogLevel() slog.Level { + switch c.LogLevel { + case "debug": + return slog.LevelDebug + case "info": + return slog.LevelInfo + case "warn": + return slog.LevelWarn + case "error": + return slog.LevelError + default: + return slog.LevelInfo + } } func loadConfigFromSystem(sys system.System) Conf { @@ -38,6 +56,9 @@ func loadConfigFromSystem(sys system.System) Conf { c.ConfigDir = DefaultConfigDir } + // defaults are handled by Conf.SlogLevel. + c.LogLevel = sys.GetEnv("DSFXCTL_LOG_LEVEL") + return c } @@ -75,7 +96,7 @@ func (a *Client) Run(ctx context.Context) error { opts := &slog.HandlerOptions{ AddSource: false, - Level: slog.LevelInfo, + Level: a.conf.SlogLevel(), } logger := slog.New(slog.NewTextHandler(a.system.Stdout(), opts)) @@ -114,13 +135,16 @@ func (a *Client) Run(ctx context.Context) error { return err } testConnection(ctx, id, laddr, raddrRaw) + return nil + case "identity": + pubKey := identity.ToPublicKey(id) + logger.InfoContext(ctx, "identity", slog.String("publicKey", base64.StdEncoding.EncodeToString(pubKey))) + return nil case "": return errors.New("no command provided") default: return errors.New("unknown command: " + a.system.Arg(0)) } - - return nil } func testConnection(ctx context.Context, id ed25519.PrivateKey, laddr *network.Addr, raddrRaw string) { @@ -138,6 +162,8 @@ func testConnection(ctx context.Context, id ed25519.PrivateKey, laddr *network.A return } defer conn.Close() + + logger.InfoContext(ctx, "connected to server", slog.String("remote", raddr.String())) } // loadIdentity ... @@ -159,6 +185,9 @@ func (c *Client) loadIdentity() (ed25519.PrivateKey, error) { // hasKeyFile ... func (c *Client) hasKeyFile() (bool, error) { f, err := c.configScope.Open("ed25519.key") + if errors.Is(err, os.ErrNotExist) { + return false, nil // Key file does not exist + } if err != nil { return false, nil }