From afa03d728b8f80138990dea0396bd7fbdb143b51 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Wed, 29 Apr 2020 16:17:06 +0200 Subject: [PATCH] client: expose LSAT identity --- server.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/server.go b/server.go index 9d3b889..f5a8190 100644 --- a/server.go +++ b/server.go @@ -1,6 +1,7 @@ package client import ( + "bytes" "context" "crypto/rand" "errors" @@ -30,6 +31,10 @@ type Server struct { // restarted. AuctioneerClient *auctioneer.Client + // GetIdentity returns the current LSAT identification of the trader + // client or an error if none has been established yet. + GetIdentity func() (*lsat.TokenID, error) + cfg *Config lndServices *lndclient.GrpcLndServices traderServer *rpcServer @@ -93,10 +98,32 @@ func NewServer(cfg *Config) (*Server, error) { &lndServices.LndServices, fileStore, defaultRPCTimeout, defaultLsatMaxCost, defaultLsatMaxFee, ) + + // getIdentity can be used to determine the current LSAT identification + // of the trader. + getIdentity := func() (*lsat.TokenID, error) { + token, err := fileStore.CurrentToken() + if err != nil { + return nil, err + } + macID, err := lsat.DecodeIdentifier( + bytes.NewBuffer(token.BaseMacaroon().Id()), + ) + if err != nil { + return nil, err + } + return &macID.TokenID, nil + } + + // For regtest, we create a fixed identity now that is used for the + // whole runtime of the trader. if cfg.Network == "regtest" { var tokenID lsat.TokenID _, _ = rand.Read(tokenID[:]) interceptor = ®testInterceptor{id: tokenID} + getIdentity = func() (*lsat.TokenID, error) { + return &tokenID, nil + } } cfg.AuctioneerDialOpts = append( cfg.AuctioneerDialOpts, @@ -123,6 +150,7 @@ func NewServer(cfg *Config) (*Server, error) { cfg: cfg, lndServices: lndServices, AuctioneerClient: auctioneerClient, + GetIdentity: getIdentity, }, nil }