From 079ee8833c2e1adcdce6de707f37336339ae9eb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Wed, 14 Feb 2024 11:09:03 +0100 Subject: [PATCH] Implement bitcoin donations via BTCPay --- .env.example | 1 + .env.test | 1 + app/assets/stylesheets/components/buttons.css | 5 + .../main_with_tabnav_component.html.erb | 2 +- app/components/modal_component.html.erb | 2 +- app/components/notification_component.rb | 2 + app/controllers/admin/donations_controller.rb | 70 +++--- .../contributions/donations_controller.rb | 126 +++++++++- app/helpers/application_helper.rb | 4 - app/helpers/btcpay_helper.rb | 7 + app/jobs/btcpay_check_donation_job.rb | 24 ++ app/models/donation.rb | 25 +- app/models/setting.rb | 11 +- app/services/btcpay_manager/create_invoice.rb | 21 ++ .../btcpay_manager/fetch_exchange_rate.rb | 14 ++ app/services/btcpay_manager/fetch_invoice.rb | 14 ++ app/services/btcpay_manager_service.rb | 4 +- .../admin/donations/_donation.json.jbuilder | 2 - app/views/admin/donations/_form.html.erb | 18 +- app/views/admin/donations/index.html.erb | 10 +- app/views/admin/donations/index.json.jbuilder | 1 - app/views/admin/donations/show.html.erb | 14 +- app/views/admin/donations/show.json.jbuilder | 1 - .../contributions/donations/_bitcoin.html.erb | 36 +++ .../contributions/donations/_list.html.erb | 24 +- .../donations/_opencollective.html.erb | 6 + .../contributions/donations/index.html.erb | 48 ++-- .../status_unprocessable_entity.html.erb | 6 + config/routes.rb | 6 +- ...58_change_donation_amounts_and_currency.rb | 9 + .../20240214121049_add_new_donation_fields.rb | 7 + ...6124640_add_payment_status_to_donations.rb | 8 + db/schema.rb | 10 +- spec/features/contributions/donations_spec.rb | 35 +++ spec/fixtures/btcpay/create_invoice.rb | 32 +++ .../btcpay/lightning_eur_settled_invoice.json | 41 +++ .../lightning_eur_settled_payments.json | 46 ++++ .../lightning_sats_settled_invoice.json | 41 +++ .../lightning_sats_settled_payments.json | 46 ++++ .../onchain_eur_processing_invoice.json | 42 ++++ .../onchain_eur_processing_payments.json | 46 ++++ .../btcpay/onchain_eur_settled_invoice.json | 41 +++ .../btcpay/onchain_eur_settled_payments.json | 46 ++++ spec/helpers/application_helper_spec.rb | 5 - spec/jobs/btcpay_check_donation_job_spec.rb | 63 +++++ spec/requests/contributions/donations_spec.rb | 233 ++++++++++++++++++ 46 files changed, 1142 insertions(+), 114 deletions(-) create mode 100644 app/helpers/btcpay_helper.rb create mode 100644 app/jobs/btcpay_check_donation_job.rb create mode 100644 app/services/btcpay_manager/create_invoice.rb create mode 100644 app/services/btcpay_manager/fetch_exchange_rate.rb create mode 100644 app/services/btcpay_manager/fetch_invoice.rb delete mode 100644 app/views/admin/donations/_donation.json.jbuilder delete mode 100644 app/views/admin/donations/index.json.jbuilder delete mode 100644 app/views/admin/donations/show.json.jbuilder create mode 100644 app/views/contributions/donations/_bitcoin.html.erb create mode 100644 app/views/contributions/donations/_opencollective.html.erb create mode 100644 app/views/shared/status_unprocessable_entity.html.erb create mode 100644 db/migrate/20240214115058_change_donation_amounts_and_currency.rb create mode 100644 db/migrate/20240214121049_add_new_donation_fields.rb create mode 100644 db/migrate/20240216124640_add_payment_status_to_donations.rb create mode 100644 spec/features/contributions/donations_spec.rb create mode 100644 spec/fixtures/btcpay/create_invoice.rb create mode 100644 spec/fixtures/btcpay/lightning_eur_settled_invoice.json create mode 100644 spec/fixtures/btcpay/lightning_eur_settled_payments.json create mode 100644 spec/fixtures/btcpay/lightning_sats_settled_invoice.json create mode 100644 spec/fixtures/btcpay/lightning_sats_settled_payments.json create mode 100644 spec/fixtures/btcpay/onchain_eur_processing_invoice.json create mode 100644 spec/fixtures/btcpay/onchain_eur_processing_payments.json create mode 100644 spec/fixtures/btcpay/onchain_eur_settled_invoice.json create mode 100644 spec/fixtures/btcpay/onchain_eur_settled_payments.json create mode 100644 spec/jobs/btcpay_check_donation_job_spec.rb create mode 100644 spec/requests/contributions/donations_spec.rb diff --git a/.env.example b/.env.example index 976aaeb..4245a30 100644 --- a/.env.example +++ b/.env.example @@ -31,6 +31,7 @@ WEBHOOKS_ALLOWED_IPS='10.1.1.163' # Service Integrations # +BTCPAY_PUBLIC_URL='https://btcpay.example.com' BTCPAY_API_URL='http://localhost:23001/api/v1' BTCPAY_STORE_ID='' BTCPAY_AUTH_TOKEN='' diff --git a/.env.test b/.env.test index c032b0e..aadec95 100644 --- a/.env.test +++ b/.env.test @@ -2,6 +2,7 @@ PRIMARY_DOMAIN=kosmos.org REDIS_URL='redis://localhost:6379/0' +BTCPAY_PUBLIC_URL='https://btcpay.example.com' BTCPAY_API_URL='http://btcpay.example.com/api/v1' BTCPAY_STORE_ID='123456' diff --git a/app/assets/stylesheets/components/buttons.css b/app/assets/stylesheets/components/buttons.css index b879634..dde8f3c 100644 --- a/app/assets/stylesheets/components/buttons.css +++ b/app/assets/stylesheets/components/buttons.css @@ -32,6 +32,11 @@ focus:ring-blue-400 focus:ring-opacity-75; } + .btn-emerald { + @apply bg-emerald-500 hover:bg-emerald-600 text-white + focus:ring-emerald-400 focus:ring-opacity-75; + } + .btn-red { @apply bg-red-600 hover:bg-red-700 text-white focus:ring-red-500 focus:ring-opacity-75; diff --git a/app/components/main_with_tabnav_component.html.erb b/app/components/main_with_tabnav_component.html.erb index 6c578a9..60884a5 100644 --- a/app/components/main_with_tabnav_component.html.erb +++ b/app/components/main_with_tabnav_component.html.erb @@ -1,5 +1,5 @@
-
+
<%= render partial: @tabnav_partial %>
diff --git a/app/components/modal_component.html.erb b/app/components/modal_component.html.erb index f8d4baf..43f6d10 100644 --- a/app/components/modal_component.html.erb +++ b/app/components/modal_component.html.erb @@ -12,7 +12,7 @@