diff options
| author | Adam Soltys <[email protected]> | 2016-11-11 23:20:40 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2016-12-26 14:22:39 -0800 |
| commit | e92783c613fa4266b69f5d56257cf919c86182b7 (patch) | |
| tree | a4454197f19142d2774e7c478c403de16e1a5dbb /src | |
| parent | a3cc882cee6afcfa4b278e653b3927b0cf79df9a (diff) | |
| download | coinos-server-e92783c613fa4266b69f5d56257cf919c86182b7.tar.gz coinos-server-e92783c613fa4266b69f5d56257cf919c86182b7.zip | |
Use bcoin to watch all m/0/1 addresses and send email/sms notifications (fixes #49 #59)
Diffstat (limited to 'src')
| -rw-r--r-- | src/app.coffee | 6 | ||||
| -rw-r--r-- | src/bcoin.coffee | 81 |
2 files changed, 71 insertions, 16 deletions
diff --git a/src/app.coffee b/src/app.coffee index d51eaa99..75b182ec 100644 --- a/src/app.coffee +++ b/src/app.coffee @@ -9,6 +9,7 @@ fs = require('fs') proxyMiddleware = require('http-proxy-middleware') sessions = require("./routes/sessions")(passport) transactions = require("./routes/transactions") +twilio = require('twilio') users = require("./routes/users")(sessions) session = require('express-session') @@ -45,7 +46,7 @@ app.use(session( secret: config.secret store: sessionStore cookie: maxAge: 1209600000 - key: 'vanbtc.sid' + key: 'coinos.sid' )) app.use(passport.initialize()) app.use(passport.session()) @@ -75,8 +76,7 @@ do fetchRates = -> ) setTimeout(fetchRates, 120000) -do startBcoin = -> - require('./bcoin').init() +require('./bcoin').init(app) app.get('/', cache, sessions.new) diff --git a/src/bcoin.coffee b/src/bcoin.coffee index 31bd7ca1..5cc303d0 100644 --- a/src/bcoin.coffee +++ b/src/bcoin.coffee @@ -1,38 +1,93 @@ bcoin = require('bcoin') +config = require('./config') db = require('./redis') +twilio = require('twilio') module.exports = - init: -> - addresses = {} + init: (app) -> + users = {} chain = new bcoin.chain( db: 'leveldb' - location: __dirname + 'mainchain/mainchain.db' + name: 'spvchain' + location: __dirname + '/db/spvchain' spv: true ) pool = new bcoin.pool( chain: chain spv: true + size: 1 + maxPeers: 1 + seeds: ['dctrl.ca'] ) - pool.open((err) -> - db.keys("user:*", (err, users) -> - users.map((key) -> - db.hgetall(key, (err, user) -> - addresses[user.address] = user.username - pool.watchAddress(user.address) - console.log(user.address) + pool.logger.level = 4 + + pool.open().then(-> + db.keysAsync("user:*").then((keys) -> + Promise.all(keys.map((key) -> + db.hgetallAsync(key).then((user) -> + console.log(key) + console.log(user) + if user.address + pool.watchAddress(user.address) + users[user.address] = + email: user.email + currency: user.currency + symbol: user.symbol + phone: user.phone ) - ) + )) ) pool.connect() pool.startSync() pool.on('error', (err) -> - debugger console.log(err) ) - pool.on('tx', (tx) -> console.log(tx)) + + pool.on('tx', (tx) -> + console.log(tx) + + for output in tx.outputs + value = (output.value / 100000000).toFixed(8) + address = output.getAddress().toBase58() + if Object.keys(users).includes(address) + app.render('payment', { value: value, address: address }, (err, html) -> + debugger + console.log(users[address]) + helper = require('sendgrid').mail + from_email = new helper.Email('[email protected]') + to_email = new helper.Email(users[address].email) + subject = 'Received Payment' + content = new helper.Content('text/html', html) + mail = new helper.Mail(from_email, subject, to_email, content) + + sg = require('sendgrid')(config.sendgrid_token) + request = sg.emptyRequest( + method: 'POST' + path: '/v3/mail/send' + body: mail.toJSON() + ) + + sg.API(request, (error, response) -> + console.log(response.statusCode) + console.log(response.body) + console.log(response.headers) + ) + ) + + if users[address].phone + client = new twilio.RestClient(config.twilio_sid, config.twilio_token) + + client.messages.create( + to: user.phone + from: config.twilio_number + body: "You received a payment of #{value} BTC" + , (err, message) -> + console.log(message.sid) + ) + ) ) |
