diff options
| author | Adam Soltys <[email protected]> | 2018-02-05 19:25:54 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2018-02-05 19:38:15 -0800 |
| commit | cf5a62c26205fa2e9e36d788d4bfb7ec9f96cc66 (patch) | |
| tree | 2cea9038aa71beded1c0867671499eb3544c59ae /index.js | |
| parent | 709d1f04d073d9b46e42819bd0224da6a4157814 (diff) | |
| download | coinos-server-cf5a62c26205fa2e9e36d788d4bfb7ec9f96cc66.tar.gz coinos-server-cf5a62c26205fa2e9e36d788d4bfb7ec9f96cc66.zip | |
rename app to index
Diffstat (limited to 'index.js')
| -rw-r--r-- | index.js | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/index.js b/index.js new file mode 100644 index 00000000..5b2561a1 --- /dev/null +++ b/index.js @@ -0,0 +1,105 @@ +import ba from 'bitcoinaverage' +import bitcoin from 'bitcoin-core' +import bodyParser from 'body-parser' +import cache from './cache' +import compression from 'compression' +import cookieParser from 'cookie-parser' +import cors from 'cors' +import dotenv from 'dotenv' +import express from 'express' +import fs from 'fs' +import grpc from 'grpc' +import passport from './passport' +import jwt from 'jsonwebtoken' +import bcrypt from 'bcrypt' +import { graphqlExpress, graphiqlExpress } from 'apollo-server-express' + +dotenv.config() +const l = console.log + +;(async () => { + const app = express() + const db = await require('./db.js') + app.enable('trust proxy') + app.use(bodyParser.urlencoded({ extended: true })) + app.use(bodyParser.json()) + app.use(cookieParser()) + app.use(cors()) + app.use(compression()) + app.use(passport.initialize()) + + const restClient = ba.restfulClient(process.env.BITCOINAVERAGE_PUBLIC, process.env.BITCOINAVERAGE_SECRET) + const lnrpc = await require('lnrpc')({ server: 'localhost:10001' }) + const adminMacaroon = fs.readFileSync('/home/adam/.lnd/data/core_test/admin.macaroon'); + const meta = new grpc.Metadata(); + meta.add('macaroon', adminMacaroon.toString('hex')); + + app.get('/balance', async (req, res) => { + res.json(await lnrpc.walletBalance({witness_only: true}, meta)) + }) + + let fetchRates + (fetchRates = () => { + restClient.tickerGlobalPerSymbol('BTCCAD', (data) => { + app.set('rates', JSON.parse(data)) + }) + setTimeout(fetchRates, 120000) + })() + + app.get('/rates', (req, res) => { + res.json(app.get('rates')) + }) + + app.post('/login', (req, res) => { + db.User.findOne({ + where: { + username: req.body.username + } + }).then((user) => { + bcrypt.compare(req.body.password, user.password).then((result) => { + if (result) { + let payload = { username: user.username } + let token = jwt.sign(payload, process.env.SECRET) + res.cookie('token', token, { expires: new Date(Date.now() + 9999999) }) + res.json({ user, token }) + } else { + res.status(401).end() + } + }).catch((err) => { + console.log(err) + res.status(401).end() + }) + }).catch((err) => { + console.log(err) + res.status(401).end() + }) + }) + + app.get('/secret', passport.authenticate('jwt', { session: false }), (req, res) => { + res.json({message: 'Success! You can not see this without a token'}) + }) + + app.get('/api/users/me', + passport.authenticate('basic', { session: false }), + function(req, res) { + res.json({ id: req.user.id, username: req.user.username }); + }); + + app.use('/graphql', bodyParser.json(), graphqlExpress({ + schema: db.gqlschema, + context: {}, + tracing: true, + cacheControl: true, + })) + + app.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql' })) + + app.use(function (err, req, res, next) { + res.status(500) + res.send('An error occurred') + console.error(err.stack) + return res.end() + }) + + app.listen(3000) +})() |
