mirror of
https://github.com/lightninglabs/lightning-terminal.git
synced 2026-08-13 12:33:36 +02:00
firewall: obfuscate ConnectPeer
Also adds a privacy flag that controls obfuscation of network addresses.
This commit is contained in:
parent
bca729a5af
commit
66e6d63349
4 changed files with 120 additions and 7 deletions
|
|
@ -312,6 +312,12 @@ func (p *PrivacyMapper) checkers(db firewalldb.PrivacyMapDB,
|
|||
handleChannelOpenResponse(db, flags),
|
||||
mid.PassThroughErrorHandler,
|
||||
),
|
||||
|
||||
"/lnrpc.Lightning/ConnectPeer": mid.NewRequestRewriter(
|
||||
&lnrpc.ConnectPeerRequest{},
|
||||
&lnrpc.ConnectPeerResponse{},
|
||||
handleConnectPeerRequest(db, flags),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1612,6 +1618,63 @@ func handleChannelOpenResponse(db firewalldb.PrivacyMapDB,
|
|||
}
|
||||
}
|
||||
|
||||
func handleConnectPeerRequest(db firewalldb.PrivacyMapDB,
|
||||
flags session.PrivacyFlags) func(ctx context.Context,
|
||||
r *lnrpc.ConnectPeerRequest) (proto.Message, error) {
|
||||
|
||||
return func(_ context.Context, r *lnrpc.ConnectPeerRequest) (
|
||||
proto.Message, error) {
|
||||
|
||||
var addr *lnrpc.LightningAddress
|
||||
|
||||
err := db.View(func(tx firewalldb.PrivacyMapTx) error {
|
||||
var err error
|
||||
|
||||
// Note, this only works if the pubkey alias was
|
||||
// already created via other calls, e.g. via
|
||||
// ListChannels or GetNodeInfo.
|
||||
pubkey := r.Addr.Pubkey
|
||||
if !flags.Contains(session.ClearPubkeys) {
|
||||
pubkey, err = firewalldb.RevealString(
|
||||
tx, r.Addr.Pubkey,
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
host := r.Addr.Host
|
||||
if !flags.Contains(session.ClearNetworkAddresses) {
|
||||
host, err = firewalldb.RevealString(
|
||||
tx, r.Addr.Host,
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
addr = &lnrpc.LightningAddress{
|
||||
Pubkey: pubkey,
|
||||
Host: host,
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &lnrpc.ConnectPeerRequest{
|
||||
// Obfuscated fields.
|
||||
Addr: addr,
|
||||
|
||||
// Non-obfuscated fields.
|
||||
Perm: r.Perm,
|
||||
Timeout: r.Timeout,
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// maybeHideAmount hides an amount if the privacy flag is not set.
|
||||
func maybeHideAmount(flags session.PrivacyFlags, randIntn func(int) (int,
|
||||
error), a int64) (int64, error) {
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@ func TestPrivacyMapper(t *testing.T) {
|
|||
outPoint(clearTxID, 0): outPoint(obfusTxID0, obfusOut0),
|
||||
outPoint(clearTxID, 1): outPoint(obfusTxID1, obfusOut1),
|
||||
"01020304": "c8134495",
|
||||
"secret-host.com": "sksiuekalkdoowurekdf",
|
||||
}
|
||||
|
||||
var (
|
||||
|
|
@ -827,6 +828,45 @@ func TestPrivacyMapper(t *testing.T) {
|
|||
OutputIndex: 0,
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
name: "ConnectPeer Request",
|
||||
uri: "/lnrpc.Lightning/ConnectPeer",
|
||||
msgType: rpcperms.TypeRequest,
|
||||
msg: &lnrpc.ConnectPeerRequest{
|
||||
Addr: &lnrpc.LightningAddress{
|
||||
Pubkey: "c8134495",
|
||||
Host: "sksiuekalkdoowurekdf",
|
||||
},
|
||||
},
|
||||
expectedReplacement: &lnrpc.ConnectPeerRequest{
|
||||
Addr: &lnrpc.LightningAddress{
|
||||
Pubkey: "01020304",
|
||||
Host: "secret-host.com",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "ConnectPeer Request clear",
|
||||
uri: "/lnrpc.Lightning/ConnectPeer",
|
||||
msgType: rpcperms.TypeRequest,
|
||||
msg: &lnrpc.ConnectPeerRequest{
|
||||
Addr: &lnrpc.LightningAddress{
|
||||
Pubkey: "c8134495",
|
||||
Host: "secret-host.com",
|
||||
},
|
||||
},
|
||||
privacyFlags: []session.PrivacyFlag{
|
||||
session.ClearPubkeys,
|
||||
session.ClearNetworkAddresses,
|
||||
},
|
||||
expectedReplacement: &lnrpc.ConnectPeerRequest{
|
||||
Addr: &lnrpc.LightningAddress{
|
||||
Pubkey: "c8134495",
|
||||
Host: "secret-host.com",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
decodedID := &lnrpc.MacaroonId{
|
||||
|
|
|
|||
|
|
@ -45,16 +45,21 @@ const (
|
|||
// ClearClosingTxIds is a privacy flag that indicates that the channel
|
||||
// closing transaction ids in the API should not be obfuscated.
|
||||
ClearClosingTxIds PrivacyFlag = 6
|
||||
|
||||
// ClearNetworkAddresses is a privacy flag that indicates that the
|
||||
// network addresses in the API should not be obfuscated.
|
||||
ClearNetworkAddresses PrivacyFlag = 7
|
||||
)
|
||||
|
||||
var flagMap = map[PrivacyFlag]string{
|
||||
ClearPubkeys: "ClearPubkeys",
|
||||
ClearAmounts: "ClearAmounts",
|
||||
ClearChanIDs: "ClearChanIDs",
|
||||
ClearTimeStamps: "ClearTimeStamps",
|
||||
ClearChanInitiator: "ClearChanInitiator",
|
||||
ClearHTLCs: "ClearHTLCs",
|
||||
ClearClosingTxIds: "ClearClosingTxIds",
|
||||
ClearPubkeys: "ClearPubkeys",
|
||||
ClearAmounts: "ClearAmounts",
|
||||
ClearChanIDs: "ClearChanIDs",
|
||||
ClearTimeStamps: "ClearTimeStamps",
|
||||
ClearChanInitiator: "ClearChanInitiator",
|
||||
ClearHTLCs: "ClearHTLCs",
|
||||
ClearClosingTxIds: "ClearClosingTxIds",
|
||||
ClearNetworkAddresses: "ClearNetworkAddresses",
|
||||
}
|
||||
|
||||
// String returns a string representation of the privacy flag.
|
||||
|
|
|
|||
|
|
@ -56,4 +56,9 @@ func TestPrivacyFlags(t *testing.T) {
|
|||
require.True(t, flags.Contains(ClearPubkeys))
|
||||
require.True(t, flags.Contains(ClearAmounts))
|
||||
require.False(t, flags.Contains(ClearChanIDs))
|
||||
|
||||
autoOpenFlags := PrivacyFlags{ClearPubkeys, ClearNetworkAddresses}
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "ClearPubkeys|ClearNetworkAddresses",
|
||||
autoOpenFlags.String())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue