Use x-real-ip header

This commit is contained in:
Aditya Kulkarni 2020-05-19 20:12:54 -07:00
parent e96e088f2d
commit af29c003ad
2 changed files with 18 additions and 8 deletions

View File

@ -16,6 +16,7 @@ import (
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/peer" "google.golang.org/grpc/peer"
"google.golang.org/grpc/reflection" "google.golang.org/grpc/reflection"
@ -85,10 +86,17 @@ func logInterceptor(
} }
func loggerFromContext(ctx context.Context) *logrus.Entry { func loggerFromContext(ctx context.Context) *logrus.Entry {
// TODO: anonymize the addresses. cryptopan? if xRealIP, ok := metadata.FromIncomingContext(ctx); ok {
realIP := xRealIP.Get("x-real-ip")
if len(realIP) > 0 {
return log.WithFields(logrus.Fields{"peer_addr": realIP[0]})
}
}
if peerInfo, ok := peer.FromContext(ctx); ok { if peerInfo, ok := peer.FromContext(ctx); ok {
return log.WithFields(logrus.Fields{"peer_addr": peerInfo.Addr}) return log.WithFields(logrus.Fields{"peer_addr": peerInfo.Addr})
} }
return log.WithFields(logrus.Fields{"peer_addr": "unknown"}) return log.WithFields(logrus.Fields{"peer_addr": "unknown"})
} }

View File

@ -15,6 +15,7 @@ import (
"github.com/btcsuite/btcd/rpcclient" "github.com/btcsuite/btcd/rpcclient"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/peer" "google.golang.org/grpc/peer"
"github.com/adityapk00/lightwalletd/common" "github.com/adityapk00/lightwalletd/common"
@ -144,20 +145,21 @@ func (s *SqlStreamer) GetAddressTxids(addressBlockFilter *walletrpc.TransparentA
} }
func (s *SqlStreamer) peerIPFromContext(ctx context.Context) string { func (s *SqlStreamer) peerIPFromContext(ctx context.Context) string {
var peerip string if xRealIP, ok := metadata.FromIncomingContext(ctx); ok {
realIP := xRealIP.Get("x-real-ip")
if len(realIP) > 0 {
return realIP[0]
}
}
if peerInfo, ok := peer.FromContext(ctx); ok { if peerInfo, ok := peer.FromContext(ctx); ok {
ip, _, err := net.SplitHostPort(peerInfo.Addr.String()) ip, _, err := net.SplitHostPort(peerInfo.Addr.String())
if err == nil { if err == nil {
peerip = ip return ip
} else {
peerip = "unknown"
} }
} else {
peerip = "unknown"
} }
return peerip return "unknown"
} }
func (s *SqlStreamer) dailyActiveBlock(height uint64, peerip string) { func (s *SqlStreamer) dailyActiveBlock(height uint64, peerip string) {