aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2018-03-19 20:45:26 -0700
committerAdam Soltys <[email protected]>2018-03-19 20:45:26 -0700
commit84485d68ce6b881eb251d3714addb6da65324a7a (patch)
tree4e51fc9fd9877894397582d7e487f892bab7ecdb
parent112e9ec9b71c1930ca51d52db58acc58ee36088c (diff)
downloadcoinos-server-84485d68ce6b881eb251d3714addb6da65324a7a.tar.gz
coinos-server-84485d68ce6b881eb251d3714addb6da65324a7a.zip
move register function out of graphql, fix socket cookies
-rw-r--r--db.js1
-rw-r--r--index.js48
-rw-r--r--mutations.js61
-rw-r--r--passport.js2
4 files changed, 33 insertions, 79 deletions
diff --git a/db.js b/db.js
index 4c108d3a..d8f1c45b 100644
--- a/db.js
+++ b/db.js
@@ -114,7 +114,6 @@ const p = (lnrpc) => {
name: 'RootQueryType',
fields: gqlfields
}),
- mutation: require('./mutations')(db, gqltypes, lnrpc)
})
resolve(db)
diff --git a/index.js b/index.js
index 122fa774..9f5a1e1c 100644
--- a/index.js
+++ b/index.js
@@ -58,6 +58,7 @@ const l = console.log
const passport = require('./passport')(db)
const auth = passport.authenticate('jwt', { session: false })
const sids = {}
+ const seen = []
app.use(passport.initialize())
@@ -67,12 +68,13 @@ const l = console.log
}))
socket.use((socket, next) => {
+ console.log(sids)
try {
- let token = socket.request.headers.cookie.match(`;\\s*token=([^;]+)`)[1]
+ let token = socket.request.headers.cookie.match(`token=([^;]+)`)[1]
let user = jwt.decode(token).username
socket.request.user = user
sids[user] = socket.id
- } catch (e) { /**/ }
+ } catch (e) { return }
next()
})
@@ -84,8 +86,8 @@ const l = console.log
})
const handlePayment = async msg => {
- let payment = await db['Payment'].findOne({
- include: { model: db['User'], as: 'user' },
+ let payment = await db.Payment.findOne({
+ include: { model: db.User, as: 'user' },
where: {
hash: msg.payment_request
}
@@ -94,7 +96,6 @@ const l = console.log
if (!payment) return
payment.user.channelbalance += parseInt(msg.value)
- l(payment.user.username, msg.value)
await payment.user.save()
socket.to(sids[payment.user.username]).emit('invoice', msg)
@@ -112,15 +113,14 @@ const l = console.log
zmqSock.subscribe('rawtx')
const channelpeers = [
- '039cc950286a8fa99218283d1adc2456e0d5e81be558da77dd6e85ba9a1fff5ad3',
- '022ea315e5052b152579e70a90bacfd6aa7420f2ce94674d4ca8da29d709bc70fd',
'02ece82b43452154392772d63c0a244f1592f0d29037c88020118889b76851173f',
- '02fa77e0f4ca666f7d158c4bb6675d1436e339903a9feeeaacbd6e55021b98e7ee',
+ '039cc950286a8fa99218283d1adc2456e0d5e81be558da77dd6e85ba9a1fff5ad3',
+ '02cac5ed1028d161cd01a9b39eddab672f047e965ea2a0fe031ca220be09c1bd31',
]
zmqSock.on('message', async (topic, message, sequence) => {
const addresses = {}
- await db['User'].findAll({
+ await db.User.findAll({
attributes: ['username', 'address'],
}).map(u => { addresses[u.address] = u.username })
@@ -137,7 +137,7 @@ const l = console.log
try {
let address = bitcoin.address.fromOutputScript(o.script, bitcoin.networks.testnet)
if (Object.keys(addresses).includes(address)) {
- let user = await db['User'].findOne({
+ let user = await db.User.findOne({
where: {
username: addresses[address],
}
@@ -170,11 +170,27 @@ const l = console.log
}
})
+ app.post('/register', async (req, res) => {
+ let err = m => res.status(500).send(m)
+ let user = req.body
+ if (!user.username) return err('Username required')
+ if (user.password.length < 2) return err('Password too short')
+
+ let exists = await db.User.count({ where: { username: user.username } })
+ if (exists) return err('Username taken')
+
+ user.address = (await lna.newAddress({ type: 1 }, meta)).address
+ user.password = await bcrypt.hash(user.password, 1)
+ res.send(await db.User.create(user))
+ })
+
+ app.post('/user', async (req, res) => {
+ await db['User'].update(user, { where: { username: user.username } })
+ })
+
app.post('/openchannel', auth, async (req, res) => {
- if (req.user.balance < 200000) {
- res.status(500).send('Need at least 200000 satoshis for channel opening')
- return
- }
+ let err = m => res.status(500).send(m)
+ if (req.user.balance < 200000) return err('Need at least 200000 satoshis for channel opening')
let pending = await lna.pendingChannels({}, meta)
let busypeers = pending.pending_open_channels.map(c => c.channel.remote_node_pub)
@@ -250,7 +266,7 @@ const l = console.log
let total = parseInt(m.payment_route.total_amt) + parseInt(m.payment_route.total_fees)
req.user.channelbalance -= total
- await db['Payment'].create({
+ await db.Payment.create({
amount: -total,
user_id: req.user.id,
hash: req.body.payreq,
@@ -299,7 +315,7 @@ const l = console.log
req.user.balance -= total
await req.user.save()
- await db['Payment'].create({
+ await db.Payment.create({
amount: -total,
user_id: req.user.id,
hash: txid,
diff --git a/mutations.js b/mutations.js
deleted file mode 100644
index e8c26fb5..00000000
--- a/mutations.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import bcrypt from 'bcrypt'
-import { resolver, defaultArgs, defaultListArgs, attributeFields } from 'graphql-sequelize'
-import {
- graphql,
- GraphQLSchema,
- GraphQLObjectType,
- GraphQLInputObjectType,
- GraphQLString,
- GraphQLInt,
- GraphQLNonNull,
- GraphQLList
-} from 'graphql'
-
-const l = console.log
-
-module.exports = (db, gqltypes, lnrpc) => {
- const UserInputType = new GraphQLInputObjectType({
- name: 'UserInput',
- desc: 'UserInput',
- fields: {
- ...attributeFields(db['User'], { exclude: ['id'] }),
- }
- })
-
- return new GraphQLObjectType({
- name: 'mutation',
- fields: {
- createUser: {
- type: gqltypes['users'],
- args: {
- user: {
- type: UserInputType
- }
- },
- resolve: async (root, { user }) => {
- if (!user.username) throw new Error('Username required')
- if (user.password.length < 2) throw new Error('Password too short')
-
- let exists = await db['User'].count({ where: { username: user.username } })
- if (exists) throw new Error('Username taken')
-
- user.address = (await lnrpc.newAddress({ type: 1 }, lnrpc.meta)).address
- user.password = await bcrypt.hash(user.password, 1)
- user.balance = 0
- return db['User'].create(user)
- }
- },
- updateUser: {
- type: gqltypes['users'],
- args: {
- user: {
- type: UserInputType
- }
- },
- resolve: async (root, { user }) => {
- await db['User'].update(user, { where: { username: user.username } })
- }
- },
- }
- })
-}
diff --git a/passport.js b/passport.js
index 7456532a..29d1862f 100644
--- a/passport.js
+++ b/passport.js
@@ -25,7 +25,7 @@ module.exports = (db) => {
next(null, user)
} catch(err) {
l(err)
- next(null, false)
+ next(null, { username: 'guest' })
}
})
)