diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | lib/persist.js | 18 | ||||
| -rw-r--r-- | monster.json | 1 | ||||
| -rw-r--r-- | nodemon.json | 3 | ||||
| -rw-r--r-- | routes/lnurl.js | 36 | ||||
| -rw-r--r-- | routes/send.js | 2 |
6 files changed, 54 insertions, 7 deletions
@@ -13,3 +13,4 @@ swaps exceptions fx uploads +data diff --git a/lib/persist.js b/lib/persist.js new file mode 100644 index 00000000..24d00693 --- /dev/null +++ b/lib/persist.js @@ -0,0 +1,18 @@ +fs = require("fs"); + +module.exports = (path, initial = {}) => { + try { + return require("../" + path); + } catch { + return new Proxy(initial, { + set(obj, prop, value) { + fs.writeFileSync( + path, + JSON.stringify({ ...obj, [prop]: value }, null, 2), + "utf-8" + ); + return Reflect.set(...arguments); + } + }); + } +}; diff --git a/monster.json b/monster.json new file mode 100644 index 00000000..013a76cb --- /dev/null +++ b/monster.json @@ -0,0 +1 @@ +{"eyeCount":2,"googledumb":6}
\ No newline at end of file diff --git a/nodemon.json b/nodemon.json new file mode 100644 index 00000000..44ce3e3b --- /dev/null +++ b/nodemon.json @@ -0,0 +1,3 @@ +{ + "ignore": ["data/*"] +} diff --git a/routes/lnurl.js b/routes/lnurl.js index 04cadc13..f47cf6f4 100644 --- a/routes/lnurl.js +++ b/routes/lnurl.js @@ -2,11 +2,12 @@ const axios = require("axios"); const lnurl = require("lnurl"); const jwt = require("jsonwebtoken"); const qs = require("query-string"); +const persist = require("../lib/persist"); -logins = {}; -recipients = {}; -payments = {}; -withdrawals = {}; +logins = persist('data/logins.json'); +recipients = persist('data/recipients.json'); +payments = persist('data/payments.json'); +withdrawals = persist('data/withdrawals.json'); lnurlServer = lnurl.createServer(config.lnurl); @@ -166,15 +167,36 @@ app.post( params: { callback, k1 } } = req.body; - const url = `${callback}${callback.includes('?') ? '&' : '?'}amount=${amount * 1000}${comment ? '&comment=' + comment : ''}`; + let url = `${callback}${callback.includes("?") ? "&" : "?"}amount=${amount * + 1000}${comment ? "&comment=" + comment : ""}`; + console.log(url); try { const parts = callback.split("/"); const secret = parts[parts.length - 1]; payments[secret] = user; - const result = (await axios.get(url)).data; - res.send(await send(amount, "", result.pr, user)); + if (recipients[secret]) { + url = `${req.protocol}://${req.get("host")}/api/send`; + const { data } = await axios.post( + url, + { + amount, + memo: comment, + username: recipients[secret].username + }, + { + headers: { + Authorization: req.get("Authorization") + } + } + ); + + res.send(data); + } else { + const { data } = await axios.get(url); + res.send(await send(amount, "", data.pr, user)); + } } catch (e) { l.error("failed to send payment", e.message); res.status(500).send(e.message); diff --git a/routes/send.js b/routes/send.js index ab67bfaa..78c6d9b7 100644 --- a/routes/send.js +++ b/routes/send.js @@ -5,6 +5,8 @@ module.exports = ah(async (req, res, next) => { let { amount, asset, memo, username } = req.body; let { user } = req; + if (!asset) asset = config.liquid.btcasset; + if (!amount || amount < 0) return res.status(500).send("Amount must be greater than zero"); |
