From 39f97e69caa58c99075f44c544206de6306a3fea Mon Sep 17 00:00:00 2001 From: Michael Bumann Date: Tue, 12 Feb 2019 17:15:16 +0100 Subject: [PATCH] Use proper grpc requres_response interceptor for macaroon metadata ...so much to learn :) --- lib/lnrpc.rb | 1 + lib/lnrpc/client.rb | 12 ++++++++---- lib/lnrpc/macaroon_interceptor.rb | 14 ++++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 lib/lnrpc/macaroon_interceptor.rb diff --git a/lib/lnrpc.rb b/lib/lnrpc.rb index 46ac961..301e49a 100644 --- a/lib/lnrpc.rb +++ b/lib/lnrpc.rb @@ -4,6 +4,7 @@ require "lnrpc/rpc_services_pb" module Lnrpc class Error < StandardError; end autoload :Client, 'lnrpc/client' + autoload :MacaroonInterceptor, 'lnrpc/macaroon_interceptor' end diff --git a/lib/lnrpc/client.rb b/lib/lnrpc/client.rb index 5a32e1e..fc6835f 100644 --- a/lib/lnrpc/client.rb +++ b/lib/lnrpc/client.rb @@ -1,3 +1,5 @@ +require "grpc" +require "lnrpc/macaroon_interceptor" module Lnrpc class Client attr_accessor :address, :credentials, :macaroon, :grpc_client @@ -38,7 +40,10 @@ module Lnrpc end self.macaroon = options[:macaroon] - self.grpc_client = Lnrpc::Lightning::Stub.new(self.address, GRPC::Core::ChannelCredentials.new(self.credentials)) + self.grpc_client = Lnrpc::Lightning::Stub.new(self.address, + GRPC::Core::ChannelCredentials.new(self.credentials), + interceptors: [Lnrpc::MacaroonInterceptor.new(self.macaroon)] + ) end def pay(payreq) @@ -48,10 +53,9 @@ module Lnrpc def method_missing(m, *args, &block) if self.grpc_client.respond_to?(m) params = args[0] - options = args[1] || { metadata: { macaroon: self.macaroon } } - request = params.nil? ? request_class_for(m).new : request_class_for(m).new(params) - self.grpc_client.send(m, request, options) + args[0] = params.nil? ? request_class_for(m).new : request_class_for(m).new(params) + self.grpc_client.send(m, *args) else super end diff --git a/lib/lnrpc/macaroon_interceptor.rb b/lib/lnrpc/macaroon_interceptor.rb new file mode 100644 index 0000000..c329bf2 --- /dev/null +++ b/lib/lnrpc/macaroon_interceptor.rb @@ -0,0 +1,14 @@ +require "grpc" + +module Lnrpc + class MacaroonInterceptor < GRPC::ClientInterceptor + def initialize(macaroon_hex) + @macaroon = macaroon_hex + end + + def request_response(request:, call:, method:, metadata:) + metadata['macaroon'] = @macaroon + yield + end + end +end