From 8b466dc5864fb77942212b4999a87c36ca16e9b3 Mon Sep 17 00:00:00 2001 From: Fornax Date: Tue, 30 Nov 2021 16:33:57 +0100 Subject: [PATCH] Add BTCPay integration --- res/static/img/btcpay.svg | 9 ++ svelte/src/file_viewer/AdLeaderboard.svelte | 12 +- svelte/src/file_viewer/AdSkyscraper.svelte | 5 +- svelte/src/user_home/Router.svelte | 2 +- svelte/src/user_home/Transactions.svelte | 128 ++++++++++++++++++-- 5 files changed, 134 insertions(+), 22 deletions(-) create mode 100644 res/static/img/btcpay.svg diff --git a/res/static/img/btcpay.svg b/res/static/img/btcpay.svg new file mode 100644 index 0000000..91e9734 --- /dev/null +++ b/res/static/img/btcpay.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/svelte/src/file_viewer/AdLeaderboard.svelte b/svelte/src/file_viewer/AdLeaderboard.svelte index 1bcd5e1..62c7795 100644 --- a/svelte/src/file_viewer/AdLeaderboard.svelte +++ b/svelte/src/file_viewer/AdLeaderboard.svelte @@ -27,23 +27,21 @@ onMount(() => { } let now = new Date().getTime() - switch (now % 8) { + switch (now % 6) { case 0: case 1: - case 2: - case 3: set_ad_type("aads") break - case 4: + case 2: set_ad_type("brave") break - case 5: + case 3: set_ad_type("ads.plus") break - case 6: + case 4: set_ad_type("adaround") break - case 7: + case 5: set_ad_type("flyingsquare") break } diff --git a/svelte/src/file_viewer/AdSkyscraper.svelte b/svelte/src/file_viewer/AdSkyscraper.svelte index 9c4a91a..9634376 100644 --- a/svelte/src/file_viewer/AdSkyscraper.svelte +++ b/svelte/src/file_viewer/AdSkyscraper.svelte @@ -31,7 +31,7 @@ onMount(async () => { return } - switch (now % 3) { + switch (now % 4) { case 0: set_ad_type("ads.plus") break @@ -41,6 +41,9 @@ onMount(async () => { case 2: set_ad_type("flyingsquare") break + case 3: + set_ad_type("aads") + break } }) diff --git a/svelte/src/user_home/Router.svelte b/svelte/src/user_home/Router.svelte index 58eb111..2edd53e 100644 --- a/svelte/src/user_home/Router.svelte +++ b/svelte/src/user_home/Router.svelte @@ -62,7 +62,7 @@ onMount(() => { shopping_cart Subscription - {#if window.user.balance_micro_eur !== 0} + {#if window.user.subscription.type !== "patreon"} { } }; -let result = "" -let result_success = false +let credit_amount = 10 -const update_subscription = async name => { +const checkout = async () => { loading = true - const form = new FormData() - form.append("subscription", name) + form.set("amount", credit_amount*1e6) + try { const resp = await fetch( - window.api_endpoint+"/user/subscription", - { method: "PUT", body: form }, + window.api_endpoint+"/btcpay/deposit", + { method: "POST", body: form }, ) if(resp.status >= 400) { let json = await resp.json() throw json.message } - result_success = true - result = "Subscription updated" - - setTimeout(() => {location.reload()}, 2000) + window.location = (await resp.json()).checkout_url } catch (err) { - result_success = false - result = "Failed to update subscription: "+err + alert(err) + } finally { loading = false } } +let show_expired = false +let invoices = [] +const load_invoices = async () => { + loading = true + try { + const resp = await fetch(window.api_endpoint+"/btcpay/invoice") + if(resp.status >= 400) { + throw new Error((await resp.json()).message) + } + + let invoices_tmp = await resp.json() + invoices_tmp.forEach(row => { + row.time = new Date(row.time) + }) + invoices_tmp.sort((a, b) => { + return b.time - a.time + }) + invoices = invoices_tmp + } catch (err) { + alert(err) + } finally { + loading = false + } +}; + onMount(() => { load_transactions() + load_invoices() }) @@ -103,6 +125,80 @@ onMount(() => { {/if}
+

Deposit Bitcoin

+

+ You can deposit credit on your pixeldrain account with Bitcoin. We + support regular Bitcoin transactions and Lightning transactions. You + must pay the full amount as stated on the invoice, else your payment + will fail. +

+
+ BTCPay server logo +
+
+
+ + +
+
+ +

Open invoices

+
+ + + + + + + + + + + {#each invoices as row (row.id)} + {#if row.status === "New" || row.status === "InvoiceCreated" || show_expired} + + + + + + + {/if} + {/each} + +
CreatedAmountStatus
{formatDate(row.time, true, true, false)} + {#if row.status === "New" || row.status === "InvoiceCreated"} + New (waiting for payment) + {:else if row.status === "InvoiceProcessing"} + Payment received, waiting for confirmations + {:else if row.status === "InvoiceSettled"} + Paid + {:else if row.status === "InvoiceExpired"} + Expired + {:else} + {row.status} + {/if} + + {#if row.status === "New" || row.status === "InvoiceCreated"} + + paid Pay + + {/if} +
+
+ +
+
+ +

Transaction log

Here is a log of all transactions on your account balance. @@ -169,4 +265,10 @@ onMount(() => { width: 100px; z-index: 1000; } +.checkout_form { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; +}