diff --git a/.env.production b/.env.production index 228cf57..2f31371 100644 --- a/.env.production +++ b/.env.production @@ -1,4 +1,7 @@ EJABBERD_API_URL='https://xmpp.kosmos.org:5443/api' + BTCPAY_API_URL='http://10.1.1.163:23001/api/v1' -LNDHUB_API_URL='http://10.1.1.163:3023' + +LNDHUB_LEGACY_API_URL='http://10.1.1.163:3023' +LNDHUB_API_URL='http://10.1.1.163:3026' LNDHUB_PUBLIC_URL='https://lndhub.kosmos.org' diff --git a/app/services/lndhub.rb b/app/services/lndhub.rb index bd3670a..68f10be 100644 --- a/app/services/lndhub.rb +++ b/app/services/lndhub.rb @@ -2,7 +2,7 @@ class Lndhub attr_accessor :auth_token def initialize - @base_url = ENV["LNDHUB_API_URL"] + @base_url = ENV["LNDHUB_LEGACY_API_URL"] end def post(endpoint, payload) @@ -42,15 +42,15 @@ class Lndhub self.auth_token end - def balance(user_token) + def balance(user_token=nil) get "balance", user_token || auth_token end - def gettxs(user_token) + def gettxs(user_token=nil) get "gettxs", user_token || auth_token end - def getuserinvoices(user_token) + def getuserinvoices(user_token=nil) get "getuserinvoices", user_token || auth_token end diff --git a/app/services/lndhub_v2.rb b/app/services/lndhub_v2.rb new file mode 100644 index 0000000..af5f3a9 --- /dev/null +++ b/app/services/lndhub_v2.rb @@ -0,0 +1,81 @@ +class LndhubV2 + attr_accessor :auth_token + + def initialize + @base_url = ENV["LNDHUB_API_URL"] + end + + def post(endpoint, payload, options={}) + headers = { "Content-Type" => "application/json" } + if auth_token + headers.merge!({ "Authorization" => "Bearer #{auth_token}" }) + elsif options[:admin_token] + headers.merge!({ "Authorization" => "Bearer #{options[:admin_token]}" }) + end + + res = Faraday.post "#{@base_url}/#{endpoint}", payload.to_json, headers + + if res.status != 200 + Rails.logger.error "[lndhub] API request failed:" + Rails.logger.error res.body + #TODO add some kind of exception tracking/notifications + end + + JSON.parse(res.body) + end + + def get(endpoint, auth_token) + res = Faraday.get("#{@base_url}/#{endpoint}", {}, { + "Content-Type" => "application/json", + "Accept" => "application/json", + "Authorization" => "Bearer #{auth_token}" + }) + + JSON.parse(res.body) + end + + def create(payload) + post "create", payload + end + + def authenticate(user) + credentials = post "auth?type=auth", { login: user.ln_login, password: user.ln_password } + self.auth_token = credentials["access_token"] + self.auth_token + end + + def balance(user_token=nil) + get "balance", user_token || auth_token + end + + def gettxs(user_token) + get "gettxs", user_token || auth_token + end + + def getuserinvoices(user_token) + get "getuserinvoices", user_token || auth_token + end + + def addinvoice(payload) + invoice = post "addinvoice", { + amt: payload[:amount], + memo: payload[:memo], + description_hash: payload[:description_hash] + } + + invoice["payment_request"] + end + + # + # V2 + # + + def create_account(payload) + post "v2/users", payload, admin_token: Rails.application.credentials.lndhub[:admin_token] + end + + def create_invoice(payload) + # Payload: { amount: 1000, description: "", description_hash: "" } + post "v2/invoices", payload + end +end diff --git a/config/credentials.yml.enc b/config/credentials.yml.enc index c3dc2e3..978af61 100644 --- a/config/credentials.yml.enc +++ b/config/credentials.yml.enc @@ -1 +1 @@ -oDf4FcihlyfHQuf9SUwfr+UVA0kXoECtHV3vEwtBp2TktCWkWz7SPbSZ2cLT0+EknOKhuI9xutrs311YDU2EzqZba4fZ0+a6/ohVH4jUbk1XfiHZWBp4zh+9TZ5m5Tp2RxcXpdcWPY38mP4zHWFzobTOR/brLjuemozvh8MiBSPY4NN5NR6rbFo87auK6fvYO8ik/1Qwf6pQMoVDjcTh2983po1RU/gSevUmaYsmTTHcQ5T9O9wMIBc101iZyKhkAZG46a6eNYok8yqRm18AHWr+De2j7LlBaqYSz/BZA385RWhhqoeONArwyo3Az30Bv74VttUSJAPurkRg2wDF9t8A+cvf8CeYkZ6u398JLSJbZZ6YdQS5T4IcrnONRXtp3d/m+yw+XEzpluK3MvFbV02AhZk/xzkGK6xonhaTSh1ek9hXoYrUTBzu8HBzXwKjJMnvrAodldu++/rMwLsgVmFHqXC3dydVogatLev8z6ziuGkmeMAR1d9kzGBHM3FWgsWLD7j0Ug7MTMyNWioI3r6J2QTnxkyJGh3pKBlq8Fb/Q0ypERxOfSZVQQh2gB79RMEDIemdCmN5mCU3ojsxqAAip4v9C1BZMWPtom1sHLYQSd9Bh6i0nncrNEtZXcxe5Z8JCWQolHvvfoIF2rfJh2oXYLxNx5n/1fzaoSqBdLBgvsAMA0ZWfV1wa/5V/DCa9vaJjumzHYKcfCCYbVz9PjN9OUSfwrE3nWZu8Y0awsNgmeRQwI10j2+oYYSBp040I05Vj5FM7nCgHLpdupctwaH2/VlIq83OVI6VlbzxYEay7+R5ANmpiJ+vC466DzLv8LAeFOqh/XeNeOITUm9EzhGSgf98yuDc7vsi3gmc2g7atgQ3gpSje6vEfhigm3ukydaGfA==--IYQBMD+Tar1g+srm--01E5mujYFWvcpT8Qd9HxiA== \ No newline at end of file +yEs5CyuAbqphlDWgtw/YQvkPn+EN4ecen2dAjs7zvYErkRRWp99FinGlQIMe6NRkMLLLSIj2BwR/wlscn1kLpIfwGpxfSZ89srK3do6Mb5QogpxdUsnQB8qv5PTGRQFBcjM47s1Q5m0t+OKxGvOnLyKnQp+cVS2KFJMbSzQarW8wIZSz2gKArn9Ttk0kqUHMlJWNY7Yh6xIrrxlEalaTOVzPdtnF7u8Tobminu15eeWHMormMRz4dYSaDc6hUtfpdy1NzOHaeXIU9A9RY/iytxuIQNgcMAlcWbPe//rVk/unH2F8xqSOfed4h/nC08F/qq4z8va3kEXBSdW/G91aIDMu1mo0kX3YNibq8s25C/CfGpzw39ozJ9erTBH7hy6nfmxU6qZuWcTGDj3NOfKe/XIfDcpOjsqkT2IOFARrYodb67q23IuOufraK1/FD4LXu8l0S8/Oi0cqMjtPPs7tS0M1C3DrbmlEzGKETrHpmoKHqjA0rgOmK4ZZM9LeI+l8Z+fDpYcCak9fLGGxnjf+nKiYMSUtm9+1dwycG2lpBV6fbmIKHJWngO2jVGcycODkc525oUaAO4hdPMqrz1AdU3AzYmLJTxW3aZ4uL5NyEJ7TbUBC0HT7h2gEi/tUry4cfD2EsM9bCrCUNuMBrnPqd4r8AvORoqqYIw1IEsP0RgWa2+hfeG1QCjBRPFHQOcqo+W25CelivMe79qI08w0iC8S4hfOQO4QrmMgtd1BhcR+wVpVE3X9EJZi3Hl7z14hXcSic+gkswJMtVZcnJL4rmZ0iEW1mpqUuegsX5vB/4qPxiQyeB80pg8Q33shvUbixzSBkl6znmLSiIffsiDsGOsnuzfl/MUT+JBs3UswNt4tSp7nEwhUjKFHrZHrAJiGCdtIS6yDPGe3HfQv1JkQ+9A8zv88hRmzeIx2JyT/shtIqGo+4ZTJd5cma--Lij/n0+cpstyZD28--FOUhwW3y+0jdaYkKvG2xrg== \ No newline at end of file diff --git a/lib/tasks/lndhub.rake b/lib/tasks/lndhub.rake index 54d8a05..04e7aac 100644 --- a/lib/tasks/lndhub.rake +++ b/lib/tasks/lndhub.rake @@ -21,4 +21,31 @@ namespace :lndhub do end puts "--\nSum of user balances: #{sum} sats" end + + desc "Migrate existing accounts to lndhub.go" + task :migrate => :environment do |t, args| + # user = User.find_by cn: "jimmy" + User.all.each do |user| + puts "Migrating #{user.cn}" + puts "Creating account..." + lndhub_v2 = LndhubV2.new + res = lndhub_v2.create_account login: user.ln_login, password: user.ln_password + puts res.inspect + + lndhub = Lndhub.new + lndhub.authenticate(user) + data = lndhub.balance + balance = data["BTC"]["AvailableBalance"] rescue 0 + + if balance > 0 + lndhub_v2.authenticate(user) + desc = "Balance migration from old Kosmos Lightning back-end" + res = lndhub_v2.create_invoice amount: balance, description: desc + puts "Payment request for #{user.cn} (#{balance} sats):" + puts res["payment_request"] + end + + puts "---" + end + end end