diff options
| author | Adam Soltys <[email protected]> | 2018-03-19 20:45:26 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2018-03-19 20:45:26 -0700 |
| commit | 84485d68ce6b881eb251d3714addb6da65324a7a (patch) | |
| tree | 4e51fc9fd9877894397582d7e487f892bab7ecdb | |
| parent | 112e9ec9b71c1930ca51d52db58acc58ee36088c (diff) | |
| download | coinos-server-84485d68ce6b881eb251d3714addb6da65324a7a.tar.gz coinos-server-84485d68ce6b881eb251d3714addb6da65324a7a.zip | |
move register function out of graphql, fix socket cookies
| -rw-r--r-- | db.js | 1 | ||||
| -rw-r--r-- | index.js | 48 | ||||
| -rw-r--r-- | mutations.js | 61 | ||||
| -rw-r--r-- | passport.js | 2 |
4 files changed, 33 insertions, 79 deletions
@@ -114,7 +114,6 @@ const p = (lnrpc) => { name: 'RootQueryType', fields: gqlfields }), - mutation: require('./mutations')(db, gqltypes, lnrpc) }) resolve(db) @@ -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' }) } }) ) |
