Implement bitcoin donations via BTCPay
This commit is contained in:
32
spec/fixtures/btcpay/create_invoice.rb
vendored
Normal file
32
spec/fixtures/btcpay/create_invoice.rb
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"id" => "Q9GBe143MXHkdpZeH4Ftx5",
|
||||
"storeId" => "AxQQ6oH4YX7n5pH1JPBLu97QD6RTybtj8m2W8YzhYr6T",
|
||||
"amount" => "1",
|
||||
"checkoutLink" => "http://10.1.1.163:23001/i/Q9GBe143MXHkdpZeH4Ftx5",
|
||||
"status" => "New",
|
||||
"additionalStatus" => "None",
|
||||
"monitoringExpiration" => 1707995026,
|
||||
"expirationTime" => 1707908626,
|
||||
"createdTime" => 1707907726,
|
||||
"availableStatusesForManualMarking" =>["Settled", "Invalid"],
|
||||
"archived" => false,
|
||||
"type" => "Standard",
|
||||
"currency" => "EUR",
|
||||
"metadata" => {},
|
||||
"checkout" => {
|
||||
"speedPolicy" => "MediumSpeed",
|
||||
"paymentMethods" => ["BTC", "BTC-LightningNetwork"],
|
||||
"defaultPaymentMethod" => "BTC-LightningNetwork",
|
||||
"expirationMinutes" => 15,
|
||||
"monitoringMinutes" => 1440,
|
||||
"paymentTolerance" => 0.0,
|
||||
"redirectURL" => "http://localhost:3000/contributions/donations",
|
||||
"redirectAutomatically" => false,
|
||||
"requiresRefundEmail" => false,
|
||||
"defaultLanguage" => nil,
|
||||
"checkoutType" => nil,
|
||||
"lazyPaymentMethods" => nil},
|
||||
"receipt" => {
|
||||
"enabled" => nil, "showQR" => nil, "showPayments" => nil
|
||||
}
|
||||
}
|
||||
41
spec/fixtures/btcpay/lightning_eur_settled_invoice.json
vendored
Normal file
41
spec/fixtures/btcpay/lightning_eur_settled_invoice.json
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"id": "MCkDbf2cUgBuuisUCgnRnb",
|
||||
"storeId": "AxQQ6oH4YX7n5pH1JPBLu97QD6RTybtj8m2W8YzhYr6T",
|
||||
"amount": "1",
|
||||
"checkoutLink": "http://10.1.1.163:23001/i/MCkDbf2cUgBuuisUCgnRnb",
|
||||
"status": "Settled",
|
||||
"additionalStatus": "None",
|
||||
"monitoringExpiration": 1708169508,
|
||||
"expirationTime": 1708083108,
|
||||
"createdTime": 1708082208,
|
||||
"availableStatusesForManualMarking": [
|
||||
|
||||
],
|
||||
"archived": false,
|
||||
"type": "Standard",
|
||||
"currency": "EUR",
|
||||
"metadata": {
|
||||
},
|
||||
"checkout": {
|
||||
"speedPolicy": "MediumSpeed",
|
||||
"paymentMethods": [
|
||||
"BTC",
|
||||
"BTC-LightningNetwork"
|
||||
],
|
||||
"defaultPaymentMethod": "BTC-LightningNetwork",
|
||||
"expirationMinutes": 15,
|
||||
"monitoringMinutes": 1440,
|
||||
"paymentTolerance": 0.0,
|
||||
"redirectURL": "http://localhost:3000/contributions/donations/27/confirm_btcpay",
|
||||
"redirectAutomatically": true,
|
||||
"requiresRefundEmail": false,
|
||||
"defaultLanguage": null,
|
||||
"checkoutType": null,
|
||||
"lazyPaymentMethods": null
|
||||
},
|
||||
"receipt": {
|
||||
"enabled": null,
|
||||
"showQR": null,
|
||||
"showPayments": null
|
||||
}
|
||||
}
|
||||
46
spec/fixtures/btcpay/lightning_eur_settled_payments.json
vendored
Normal file
46
spec/fixtures/btcpay/lightning_eur_settled_payments.json
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
[
|
||||
{
|
||||
"activated": true,
|
||||
"destination": "bc1qtvwjguv679lcch9a9zxzxcengq3t3zgd5zm0pd",
|
||||
"paymentLink": "bitcoin:bc1qtvwjguv679lcch9a9zxzxcengq3t3zgd5zm0pd",
|
||||
"rate": "48532.8",
|
||||
"paymentMethodPaid": "0",
|
||||
"totalPaid": "0.00002061",
|
||||
"due": "0",
|
||||
"amount": "0.00002061",
|
||||
"networkFee": "0",
|
||||
"payments": [
|
||||
|
||||
],
|
||||
"paymentMethod": "BTC",
|
||||
"cryptoCode": "BTC",
|
||||
"additionalData": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"activated": true,
|
||||
"destination": "lnbc20610n1pju73pqpp5rrvhc34tzt3vz70r33c2n2qqtm6hxau2hyl9w23kvrx56vhsfh5sdphg3hkuct5d9hkugr5dus8g6r9yp9k7umddaejqcm0dacx2unpw35hvegcqzzsxqyz5vqsp56grmnp2ezj4n323squu2p2e09g5lgncsr7f34084p5dyjgmwcssq9qyyssqfrc9x37qcvvpsx8m4zvu9glvcfcmqzs9ttfsg30g2gjxfkylvp8rdud2yx8gshs2jv0rea0etjrcygrc0hp4vckgsfs4grsnl854ajgpurzzp4",
|
||||
"paymentLink": "lightning:lnbc20610n1pju73pqpp5rrvhc34tzt3vz70r33c2n2qqtm6hxau2hyl9w23kvrx56vhsfh5sdphg3hkuct5d9hkugr5dus8g6r9yp9k7umddaejqcm0dacx2unpw35hvegcqzzsxqyz5vqsp56grmnp2ezj4n323squu2p2e09g5lgncsr7f34084p5dyjgmwcssq9qyyssqfrc9x37qcvvpsx8m4zvu9glvcfcmqzs9ttfsg30g2gjxfkylvp8rdud2yx8gshs2jv0rea0etjrcygrc0hp4vckgsfs4grsnl854ajgpurzzp4",
|
||||
"rate": "48532.8",
|
||||
"paymentMethodPaid": "0.00002061",
|
||||
"totalPaid": "0.00002061",
|
||||
"due": "0",
|
||||
"amount": "0.00002061",
|
||||
"networkFee": "0",
|
||||
"payments": [
|
||||
{
|
||||
"id": "18d97c46ab12e2c179e38c70a9a8005ef573778ab93e572a3660cd4d32f04de9",
|
||||
"receivedDate": 1708082214,
|
||||
"value": "0.00002061",
|
||||
"fee": "0.0",
|
||||
"status": "Settled",
|
||||
"destination": "lnbc20610n1pju73pqpp5rrvhc34tzt3vz70r33c2n2qqtm6hxau2hyl9w23kvrx56vhsfh5sdphg3hkuct5d9hkugr5dus8g6r9yp9k7umddaejqcm0dacx2unpw35hvegcqzzsxqyz5vqsp56grmnp2ezj4n323squu2p2e09g5lgncsr7f34084p5dyjgmwcssq9qyyssqfrc9x37qcvvpsx8m4zvu9glvcfcmqzs9ttfsg30g2gjxfkylvp8rdud2yx8gshs2jv0rea0etjrcygrc0hp4vckgsfs4grsnl854ajgpurzzp4"
|
||||
}
|
||||
],
|
||||
"paymentMethod": "BTC-LightningNetwork",
|
||||
"cryptoCode": "BTC",
|
||||
"additionalData": {
|
||||
"paymentHash": "18d97c46ab12e2c179e38c70a9a8005ef573778ab93e572a3660cd4d32f04de9"
|
||||
}
|
||||
}
|
||||
]
|
||||
41
spec/fixtures/btcpay/lightning_sats_settled_invoice.json
vendored
Normal file
41
spec/fixtures/btcpay/lightning_sats_settled_invoice.json
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"id": "JxjfeJi1TtX8FcWSjEvGxg",
|
||||
"storeId": "AxQQ6oH4YX7n5pH1JPBLu97QD6RTybtj8m2W8YzhYr6T",
|
||||
"amount": "0.0001",
|
||||
"checkoutLink": "http://10.1.1.163:23001/i/JxjfeJi1TtX8FcWSjEvGxg",
|
||||
"status": "Settled",
|
||||
"additionalStatus": "None",
|
||||
"monitoringExpiration": 1708180292,
|
||||
"expirationTime": 1708093892,
|
||||
"createdTime": 1708092992,
|
||||
"availableStatusesForManualMarking": [
|
||||
|
||||
],
|
||||
"archived": false,
|
||||
"type": "Standard",
|
||||
"currency": "BTC",
|
||||
"metadata": {
|
||||
},
|
||||
"checkout": {
|
||||
"speedPolicy": "MediumSpeed",
|
||||
"paymentMethods": [
|
||||
"BTC",
|
||||
"BTC-LightningNetwork"
|
||||
],
|
||||
"defaultPaymentMethod": "BTC-LightningNetwork",
|
||||
"expirationMinutes": 15,
|
||||
"monitoringMinutes": 1440,
|
||||
"paymentTolerance": 0.0,
|
||||
"redirectURL": "http://localhost:3000/contributions/donations/32/confirm_btcpay",
|
||||
"redirectAutomatically": true,
|
||||
"requiresRefundEmail": false,
|
||||
"defaultLanguage": null,
|
||||
"checkoutType": null,
|
||||
"lazyPaymentMethods": null
|
||||
},
|
||||
"receipt": {
|
||||
"enabled": null,
|
||||
"showQR": null,
|
||||
"showPayments": null
|
||||
}
|
||||
}
|
||||
46
spec/fixtures/btcpay/lightning_sats_settled_payments.json
vendored
Normal file
46
spec/fixtures/btcpay/lightning_sats_settled_payments.json
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
[
|
||||
{
|
||||
"activated": true,
|
||||
"destination": "bc1q9fay59qdmtv46d5hpf62vt5eyd7ag98t4h0s3g",
|
||||
"paymentLink": "bitcoin:bc1q9fay59qdmtv46d5hpf62vt5eyd7ag98t4h0s3g",
|
||||
"rate": "1.0",
|
||||
"paymentMethodPaid": "0",
|
||||
"totalPaid": "0.0001",
|
||||
"due": "0",
|
||||
"amount": "0.0001",
|
||||
"networkFee": "0",
|
||||
"payments": [
|
||||
|
||||
],
|
||||
"paymentMethod": "BTC",
|
||||
"cryptoCode": "BTC",
|
||||
"additionalData": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"activated": true,
|
||||
"destination": "lnbc100u1pju7mjqpp54yt6z4g4j294vta90yn35pwch76a4h47txx4m4njfdqmcsa4w50qdphg3hkuct5d9hkugr5dus8g6r9yp9k7umddaejqcm0dacx2unpw35hvegcqzzsxqyz5vqsp5gx3wee4c2gsl7lnmx4qkrha3mkxh926j5qpdqz7wyyya04wks7cq9qyyssq4ft7a69c93kr04hamp5ah958ay222dvdrzr3nl599nx0l3ejpqe4ktarkxdymsxgg6v3evat9e9u0fp2vg2r2z860fn0h04znq9c6psqh8s53q",
|
||||
"paymentLink": "lightning:lnbc100u1pju7mjqpp54yt6z4g4j294vta90yn35pwch76a4h47txx4m4njfdqmcsa4w50qdphg3hkuct5d9hkugr5dus8g6r9yp9k7umddaejqcm0dacx2unpw35hvegcqzzsxqyz5vqsp5gx3wee4c2gsl7lnmx4qkrha3mkxh926j5qpdqz7wyyya04wks7cq9qyyssq4ft7a69c93kr04hamp5ah958ay222dvdrzr3nl599nx0l3ejpqe4ktarkxdymsxgg6v3evat9e9u0fp2vg2r2z860fn0h04znq9c6psqh8s53q",
|
||||
"rate": "1.0",
|
||||
"paymentMethodPaid": "0.0001",
|
||||
"totalPaid": "0.0001",
|
||||
"due": "0",
|
||||
"amount": "0.0001",
|
||||
"networkFee": "0",
|
||||
"payments": [
|
||||
{
|
||||
"id": "a917a15515928b562fa579271a05d8bfb5dadebe598d5dd6724b41bc43b5751e",
|
||||
"receivedDate": 1708093015,
|
||||
"value": "0.0001",
|
||||
"fee": "0.0",
|
||||
"status": "Settled",
|
||||
"destination": "lnbc100u1pju7mjqpp54yt6z4g4j294vta90yn35pwch76a4h47txx4m4njfdqmcsa4w50qdphg3hkuct5d9hkugr5dus8g6r9yp9k7umddaejqcm0dacx2unpw35hvegcqzzsxqyz5vqsp5gx3wee4c2gsl7lnmx4qkrha3mkxh926j5qpdqz7wyyya04wks7cq9qyyssq4ft7a69c93kr04hamp5ah958ay222dvdrzr3nl599nx0l3ejpqe4ktarkxdymsxgg6v3evat9e9u0fp2vg2r2z860fn0h04znq9c6psqh8s53q"
|
||||
}
|
||||
],
|
||||
"paymentMethod": "BTC-LightningNetwork",
|
||||
"cryptoCode": "BTC",
|
||||
"additionalData": {
|
||||
"paymentHash": "a917a15515928b562fa579271a05d8bfb5dadebe598d5dd6724b41bc43b5751e"
|
||||
}
|
||||
}
|
||||
]
|
||||
42
spec/fixtures/btcpay/onchain_eur_processing_invoice.json
vendored
Normal file
42
spec/fixtures/btcpay/onchain_eur_processing_invoice.json
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"id": "K4e31MhbLKmr3D7qoNYRd3",
|
||||
"storeId": "AxQQ6oH4YX7n5pH1JPBLu97QD6RTybtj8m2W8YzhYr6T",
|
||||
"amount": "100",
|
||||
"checkoutLink": "http://10.1.1.163:23001/i/K4e31MhbLKmr3D7qoNYRd3",
|
||||
"status": "Processing",
|
||||
"additionalStatus": "None",
|
||||
"monitoringExpiration": 1708173683,
|
||||
"expirationTime": 1708087283,
|
||||
"createdTime": 1708086383,
|
||||
"availableStatusesForManualMarking": [
|
||||
"Settled",
|
||||
"Invalid"
|
||||
],
|
||||
"archived": false,
|
||||
"type": "Standard",
|
||||
"currency": "USD",
|
||||
"metadata": {
|
||||
},
|
||||
"checkout": {
|
||||
"speedPolicy": "MediumSpeed",
|
||||
"paymentMethods": [
|
||||
"BTC",
|
||||
"BTC-LightningNetwork"
|
||||
],
|
||||
"defaultPaymentMethod": "BTC-LightningNetwork",
|
||||
"expirationMinutes": 15,
|
||||
"monitoringMinutes": 1440,
|
||||
"paymentTolerance": 0.0,
|
||||
"redirectURL": "http://localhost:3000/contributions/donations/28/confirm_btcpay",
|
||||
"redirectAutomatically": true,
|
||||
"requiresRefundEmail": false,
|
||||
"defaultLanguage": null,
|
||||
"checkoutType": null,
|
||||
"lazyPaymentMethods": null
|
||||
},
|
||||
"receipt": {
|
||||
"enabled": null,
|
||||
"showQR": null,
|
||||
"showPayments": null
|
||||
}
|
||||
}
|
||||
46
spec/fixtures/btcpay/onchain_eur_processing_payments.json
vendored
Normal file
46
spec/fixtures/btcpay/onchain_eur_processing_payments.json
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
[
|
||||
{
|
||||
"activated": true,
|
||||
"destination": "bc1qqxm55h6yzych9kg6kquak4c73nyv352070tsmh",
|
||||
"paymentLink": "bitcoin:bc1qqxm55h6yzych9kg6kquak4c73nyv352070tsmh",
|
||||
"rate": "52259.2",
|
||||
"paymentMethodPaid": "0.00191354",
|
||||
"totalPaid": "0.00191354",
|
||||
"due": "0",
|
||||
"amount": "0.00191354",
|
||||
"networkFee": "0",
|
||||
"payments": [
|
||||
{
|
||||
"id": "21da85563274d0c3975273c1a2a8551bddeebb68b8f8a3242f63dd4cc238b480-1",
|
||||
"receivedDate": 1708086448,
|
||||
"value": "0.00191354",
|
||||
"fee": "0.0",
|
||||
"status": "Processing",
|
||||
"destination": "bc1qqxm55h6yzych9kg6kquak4c73nyv352070tsmh"
|
||||
}
|
||||
],
|
||||
"paymentMethod": "BTC",
|
||||
"cryptoCode": "BTC",
|
||||
"additionalData": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"activated": true,
|
||||
"destination": "lnbc1913540n1pju74r0pp5vpnw6l84ytu5u5evehn00xwsrppg7w45cj4mrwjwng474w7x3ugqdphg3hkuct5d9hkugr5dus8g6r9yp9k7umddaejqcm0dacx2unpw35hvegcqzzsxqyz5vqsp5sscc8ufdw29lpv9z09c6edhzc2njg0lmspsk8sdunek7yrkeu3mq9qyyssqnzz9xrhpy7sej5k62vcjju253kxx87jveq7vusl2sgaeuyh48ph9ecuud6f329syuut3z8w544c6ynhtx4ratundzmp7fs6sdll8g0spurjhnx",
|
||||
"paymentLink": "lightning:lnbc1913540n1pju74r0pp5vpnw6l84ytu5u5evehn00xwsrppg7w45cj4mrwjwng474w7x3ugqdphg3hkuct5d9hkugr5dus8g6r9yp9k7umddaejqcm0dacx2unpw35hvegcqzzsxqyz5vqsp5sscc8ufdw29lpv9z09c6edhzc2njg0lmspsk8sdunek7yrkeu3mq9qyyssqnzz9xrhpy7sej5k62vcjju253kxx87jveq7vusl2sgaeuyh48ph9ecuud6f329syuut3z8w544c6ynhtx4ratundzmp7fs6sdll8g0spurjhnx",
|
||||
"rate": "52259.2",
|
||||
"paymentMethodPaid": "0",
|
||||
"totalPaid": "0.00191354",
|
||||
"due": "0",
|
||||
"amount": "0.00191354",
|
||||
"networkFee": "0",
|
||||
"payments": [
|
||||
|
||||
],
|
||||
"paymentMethod": "BTC-LightningNetwork",
|
||||
"cryptoCode": "BTC",
|
||||
"additionalData": {
|
||||
"paymentHash": "6066ed7cf522f94e532ccde6f799d018428f3ab4c4abb1ba4e9a2beabbc68f10"
|
||||
}
|
||||
}
|
||||
]
|
||||
41
spec/fixtures/btcpay/onchain_eur_settled_invoice.json
vendored
Normal file
41
spec/fixtures/btcpay/onchain_eur_settled_invoice.json
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"id": "K4e31MhbLKmr3D7qoNYRd3",
|
||||
"storeId": "AxQQ6oH4YX7n5pH1JPBLu97QD6RTybtj8m2W8YzhYr6T",
|
||||
"amount": "100",
|
||||
"checkoutLink": "http://10.1.1.163:23001/i/K4e31MhbLKmr3D7qoNYRd3",
|
||||
"status": "Settled",
|
||||
"additionalStatus": "None",
|
||||
"monitoringExpiration": 1708173683,
|
||||
"expirationTime": 1708087283,
|
||||
"createdTime": 1708086383,
|
||||
"availableStatusesForManualMarking": [
|
||||
|
||||
],
|
||||
"archived": false,
|
||||
"type": "Standard",
|
||||
"currency": "USD",
|
||||
"metadata": {
|
||||
},
|
||||
"checkout": {
|
||||
"speedPolicy": "MediumSpeed",
|
||||
"paymentMethods": [
|
||||
"BTC",
|
||||
"BTC-LightningNetwork"
|
||||
],
|
||||
"defaultPaymentMethod": "BTC-LightningNetwork",
|
||||
"expirationMinutes": 15,
|
||||
"monitoringMinutes": 1440,
|
||||
"paymentTolerance": 0.0,
|
||||
"redirectURL": "http://localhost:3000/contributions/donations/28/confirm_btcpay",
|
||||
"redirectAutomatically": true,
|
||||
"requiresRefundEmail": false,
|
||||
"defaultLanguage": null,
|
||||
"checkoutType": null,
|
||||
"lazyPaymentMethods": null
|
||||
},
|
||||
"receipt": {
|
||||
"enabled": null,
|
||||
"showQR": null,
|
||||
"showPayments": null
|
||||
}
|
||||
}
|
||||
46
spec/fixtures/btcpay/onchain_eur_settled_payments.json
vendored
Normal file
46
spec/fixtures/btcpay/onchain_eur_settled_payments.json
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
[
|
||||
{
|
||||
"activated": true,
|
||||
"destination": "bc1qqxm55h6yzych9kg6kquak4c73nyv352070tsmh",
|
||||
"paymentLink": "bitcoin:bc1qqxm55h6yzych9kg6kquak4c73nyv352070tsmh",
|
||||
"rate": "52259.2",
|
||||
"paymentMethodPaid": "0.00191354",
|
||||
"totalPaid": "0.00191354",
|
||||
"due": "0",
|
||||
"amount": "0.00191354",
|
||||
"networkFee": "0",
|
||||
"payments": [
|
||||
{
|
||||
"id": "218652f351508c46cfd99de1c6cdc0dcb66bc1bbfaf38578235d080046a96305-1",
|
||||
"receivedDate": 1708106396,
|
||||
"value": "0.00191354",
|
||||
"fee": "0.0",
|
||||
"status": "Settled",
|
||||
"destination": "bc1qqxm55h6yzych9kg6kquak4c73nyv352070tsmh"
|
||||
}
|
||||
],
|
||||
"paymentMethod": "BTC",
|
||||
"cryptoCode": "BTC",
|
||||
"additionalData": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"activated": true,
|
||||
"destination": "lnbc1913540n1pju74r0pp5vpnw6l84ytu5u5evehn00xwsrppg7w45cj4mrwjwng474w7x3ugqdphg3hkuct5d9hkugr5dus8g6r9yp9k7umddaejqcm0dacx2unpw35hvegcqzzsxqyz5vqsp5sscc8ufdw29lpv9z09c6edhzc2njg0lmspsk8sdunek7yrkeu3mq9qyyssqnzz9xrhpy7sej5k62vcjju253kxx87jveq7vusl2sgaeuyh48ph9ecuud6f329syuut3z8w544c6ynhtx4ratundzmp7fs6sdll8g0spurjhnx",
|
||||
"paymentLink": "lightning:lnbc1913540n1pju74r0pp5vpnw6l84ytu5u5evehn00xwsrppg7w45cj4mrwjwng474w7x3ugqdphg3hkuct5d9hkugr5dus8g6r9yp9k7umddaejqcm0dacx2unpw35hvegcqzzsxqyz5vqsp5sscc8ufdw29lpv9z09c6edhzc2njg0lmspsk8sdunek7yrkeu3mq9qyyssqnzz9xrhpy7sej5k62vcjju253kxx87jveq7vusl2sgaeuyh48ph9ecuud6f329syuut3z8w544c6ynhtx4ratundzmp7fs6sdll8g0spurjhnx",
|
||||
"rate": "52259.2",
|
||||
"paymentMethodPaid": "0",
|
||||
"totalPaid": "0.00191354",
|
||||
"due": "0",
|
||||
"amount": "0.00191354",
|
||||
"networkFee": "0",
|
||||
"payments": [
|
||||
|
||||
],
|
||||
"paymentMethod": "BTC-LightningNetwork",
|
||||
"cryptoCode": "BTC",
|
||||
"additionalData": {
|
||||
"paymentHash": "6066ed7cf522f94e532ccde6f799d018428f3ab4c4abb1ba4e9a2beabbc68f10"
|
||||
}
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user