aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2016-11-11 23:20:40 -0800
committerAdam Soltys <[email protected]>2016-12-26 14:22:39 -0800
commite92783c613fa4266b69f5d56257cf919c86182b7 (patch)
treea4454197f19142d2774e7c478c403de16e1a5dbb /src
parenta3cc882cee6afcfa4b278e653b3927b0cf79df9a (diff)
downloadcoinos-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.coffee6
-rw-r--r--src/bcoin.coffee81
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)
+ )
+ )
)