You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.5 KiB
CoffeeScript
48 lines
1.5 KiB
CoffeeScript
9 years ago
|
Promise = require "bluebird"
|
||
|
router = require("express-promise-router")()
|
||
|
moment = require "moment"
|
||
|
bip21 = require "bip21"
|
||
|
qrImage = require "qr-image"
|
||
|
|
||
|
rfr = require "rfr"
|
||
|
getRates = rfr "lib/get-rates"
|
||
|
parseAmount = rfr "lib/parse-amount"
|
||
|
|
||
|
getBip21 = (address, amount) ->
|
||
|
bip21.encode(address, amount: amount, label: "PDFy donation")
|
||
|
|
||
|
router.get "/", (req, res) ->
|
||
|
Promise.try ->
|
||
|
getRates()
|
||
|
.then (rates) ->
|
||
|
res.render "donate",
|
||
|
rates: rates
|
||
|
currentMonth: moment().format "MMMM YYYY"
|
||
|
|
||
|
router.get "/convert/:currency", (req, res) ->
|
||
|
Promise.try ->
|
||
|
getRates()
|
||
|
.then (rates) ->
|
||
|
# Floats for money are evil and all that, but we only need approximate numbers here, so it's all fine here. Don't do this where precision is required, though!
|
||
|
if req.query.amount? and req.params.currency.toUpperCase() of rates
|
||
|
res.send (rates[req.params.currency.toUpperCase()] * parseFloat(req.query.amount)).toString()
|
||
|
else
|
||
|
req.reportError(new Error("Unknown currency specified: #{req.params.currency}"), "warning")
|
||
|
Promise.reject new Http422Error "No such currency exists."
|
||
|
|
||
|
router.get "/bip21", (req, res) ->
|
||
|
Promise.try ->
|
||
|
res.send getBip21(req.appConfig.donations.bitcoinAddress, parseAmount(req.query.amount))
|
||
|
|
||
|
router.get "/bip21/qr", (req, res) ->
|
||
|
qrImage.image(getBip21(req.appConfig.donations.bitcoinAddress, parseAmount(req.query.amount)), type: "png", size: 3, margin: 1)
|
||
|
.pipe res
|
||
|
|
||
|
router.get "/faq", (req, res) ->
|
||
|
res.render "donation-faq"
|
||
|
|
||
|
router.get "/thanks", (req, res) ->
|
||
|
res.render "donate-thanks"
|
||
|
|
||
|
module.exports = router
|