diff --git a/client/client.go b/client/client.go index 7c27023..ae41f02 100644 --- a/client/client.go +++ b/client/client.go @@ -14,7 +14,7 @@ import ( "time" ) -func StartClient(config *config.ClientConfig) { +func StartClient(config *config.ClientConfig, userAgent string) { log.Infof("Initializing client") // Check if the config is valid @@ -28,7 +28,7 @@ func StartClient(config *config.ClientConfig) { log.Infof("Configuring connection to %s for gRPC operations", config.GetDialAddr()) // Configure connection - conn, err := grpc.Dial(config.GetDialAddr(), grpc.WithInsecure()) // TODO: Not run insecure + conn, err := grpc.Dial(config.GetDialAddr(), grpc.WithInsecure(), grpc.WithUserAgent(userAgent+";")) // TODO: Not run insecure if err != nil { log.Warnf("Could not configure connection to host: %v", err) diff --git a/cmd/client.go b/cmd/client.go index d7123ff..8c2a5fb 100644 --- a/cmd/client.go +++ b/cmd/client.go @@ -38,6 +38,6 @@ var clientCmd = &cobra.Command{ RenewalThreshold: viper.GetDuration("client.renewalThreshold"), } - client.StartClient(&c) + client.StartClient(&c, UserAgent()) }, } diff --git a/cmd/root.go b/cmd/root.go index bfc50bc..3c2935c 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -1,9 +1,11 @@ package cmd import ( + "fmt" "github.com/mitchellh/go-homedir" "github.com/spf13/cobra" "github.com/spf13/viper" + "runtime" ) var ( @@ -55,3 +57,7 @@ func constructDir() string { return home + "/.intercert" } + +func UserAgent() string { + return fmt.Sprintf("intercert v%s (%s); %s-%s", Version, Commit, runtime.GOOS, runtime.GOARCH) +} diff --git a/server/issuer.go b/server/issuer.go index ae9fbd2..8b6ffb8 100644 --- a/server/issuer.go +++ b/server/issuer.go @@ -15,6 +15,8 @@ import ( "github.com/xenolf/lego/certcrypto" "github.com/xenolf/lego/log" "github.com/xenolf/lego/providers/dns" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/peer" "strings" ) @@ -58,6 +60,7 @@ func NewIssuerService(config *config.ServerConfig) *IssuerService { func (s IssuerService) IssueCert(ctx context.Context, req *api.CertificateRequest) (*api.CertificateResponse, error) { // TODO: Validate auth in context + logClient(ctx, "IssueCert("+req.DnsName+")") log.Infof("[%s] Received certificate request from client", req.DnsName) @@ -107,6 +110,7 @@ func (s IssuerService) IssueCert(ctx context.Context, req *api.CertificateReques } func (s IssuerService) Ping(ctx context.Context, req *api.PingRequest) (*api.PingResponse, error) { + logClient(ctx, "Ping") // TODO: Auth for ping? return &api.PingResponse{Msg: "pong"}, nil } @@ -149,3 +153,12 @@ func pemEncodeCerts(cert tls.Certificate) (string, error) { return strings.Join(certificates, ""), nil } + +func logClient(ctx context.Context, operation string) { + md, mdOK := metadata.FromIncomingContext(ctx) + peerInfo, pOK := peer.FromContext(ctx) + + if mdOK && pOK { + log.Infof("Call from %s - %s: %s", peerInfo.Addr, md["user-agent"], operation) + } +}