Skip to content

Commit

Permalink
Merge branch 'master' into 416-User_bonuses_should_be_redeemed_once_h…
Browse files Browse the repository at this point in the history
…e_opens_wallet
  • Loading branch information
yaroslav-fedyshyn-nordwhale committed Sep 13, 2019
2 parents 1b1d0bf + 6fe1c69 commit 5b98b6b
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 12 deletions.
46 changes: 46 additions & 0 deletions src/server/loadtest/__tests__/loadtest-middleware.js
@@ -0,0 +1,46 @@
import request from 'supertest'
import makeServer from '../../server-test'
import { getToken, getCreds } from '../../__util__/'

const userCredentials = {
signature:
'0x7acee1dc0d8a07d3e4f2cd1cbbebed9098afea5600bbb1f8a99bd7154e2de4a35e42b868dd373a831e78f0bbf2a8d0340cc63fa8345e433fd3fe64b01bcae0781c',
gdSignature:
'0xd2e95cd11e2b3148674f2207d4f054dbf25e4d2a6e763418ba9bd62c5a99be621f738a0419c4754cc95395c93ac76688f781d7cb00dda0b79693c05de0bee4971b',
nonce: 'a29344af372abf77dd68',
profileSignature:
'SEA{"m":"Login to GoodDAPPa29344af372abf77dd68","s":"nxiNDIdE714q1qTHGzXDy/uJqnXD4uE/QBQDym2ZTTN8cxQyBlODP7x/7+LQggC0K4uO6Y+tTddGLHdSyJGblQ=="}',
profilePublickey: 'kxudRZes6qS44fus50kd0knUVftOeyDTQnmsnMmiaWA.uzJ1fJM0evhtave7yZ5OWBa2O91MBU7DNAHau8xUXYw'
}

describe.skip('loadtest-middleware', () => {
let server

beforeAll(done => {
server = makeServer(done)
})

afterAll(done => {
server.close(err => {
console.log({ err })
done()
})
})

test('/test/add/whitelistUser', async () => {
const token = await getToken(server)

let res = await request(server)
.post('/test/add/whitelistUser')
.send(userCredentials)
.set('Authorization', `Bearer ${token}`)

expect(res.status).toBe(200)
})

test('/storage/login/token witout auth creds', async () => {
let res = await request(server).post('/test/add/whitelistUser')

expect(res.status).toBe(401)
})
})
33 changes: 33 additions & 0 deletions src/server/loadtest/loadtest-middleware.js
@@ -0,0 +1,33 @@
// @flow
import { Router } from 'express'
import passport from 'passport'
import { wrapAsync, onlyInEnv } from '../utils/helpers'
import { recoverPublickey } from "../utils/eth";
import AdminWallet from "../blockchain/AdminWallet";


const setup = (app: Router) => {
/**
* Only for loadtets
*/
app.post(
'/test/add/whitelistUser',
passport.authenticate('jwt', { session: false }),
onlyInEnv('test'),
wrapAsync(async (req, res, next) => {
const { body }= req
const gdSignature = body.gdSignature
const nonce = body.nonce
const msg = 'Login to GoodDAPP'
const gdPublicAddress = recoverPublickey(gdSignature, msg, nonce)
console.log('#############################################')
console.log(gdPublicAddress)
console.log('#############################################')
await AdminWallet.whitelistUser(gdPublicAddress, body.profilePublickey)
res.json({ ok: 1 })
})
)

}

export default setup
12 changes: 1 addition & 11 deletions src/server/login/login-middleware.js
Expand Up @@ -10,6 +10,7 @@ import { wrapAsync, lightLogs } from '../utils/helpers'
import UserDBPrivate from '../db/mongo/user-privat-provider'
import SEA from 'gun/sea'
import Config from '../server.config.js'
import { recoverPublickey } from "../utils/eth";
// const ExtractJwt = passportJWT.ExtractJwt
// const JwtStrategy = passportJWT.Strategy

Expand All @@ -32,17 +33,6 @@ export const strategy = new Strategy(jwtOptions, async (jwtPayload, next) => {
}
})

const recoverPublickey = (signature, msg, nonce) => {
const sig = ethUtil.fromRpcSig(signature)

const messageHash = ethUtil.keccak(
`\u0019Ethereum Signed Message:\n${(msg.length + nonce.length).toString()}${msg}${nonce}`
)

const publicKey = ethUtil.ecrecover(messageHash, sig.v, sig.r, sig.s)
const recovered = ethUtil.bufferToHex(ethUtil.pubToAddress(publicKey))
return recovered
}
const setup = (app: Router) => {
passport.use(strategy)

Expand Down
4 changes: 3 additions & 1 deletion src/server/server-middlewares.js
Expand Up @@ -11,6 +11,7 @@ import UserDBPrivate from './db/mongo/user-privat-provider'
import addStorageMiddlewares from './storage/storageAPI'
import addVerificationMiddlewares from './verification/verificationAPI'
import addSendMiddlewares from './send/sendAPI'
import addLoadTestMiddlewares from './loadtest/loadtest-middleware'
import logger, { rollbar } from '../imports/pino-logger'
import VerificationAPI from './verification/verification'

Expand All @@ -36,7 +37,8 @@ export default (app: Router, env: any) => {
addStorageMiddlewares(app, UserDBPrivate)
addVerificationMiddlewares(app, VerificationAPI, UserDBPrivate)
addSendMiddlewares(app)

addLoadTestMiddlewares(app)

if (rollbar) app.use(rollbar.errorHandler())

app.use((error, req, res, next: NextFunction) => {
Expand Down
14 changes: 14 additions & 0 deletions src/server/utils/eth.js
@@ -0,0 +1,14 @@
import * as ethUtil from 'ethereumjs-util'

export const recoverPublickey = (signature, msg, nonce) => {
const sig = ethUtil.fromRpcSig(signature)

const messageHash = ethUtil.keccak(
`\u0019Ethereum Signed Message:\n${(msg.length + nonce.length).toString()}${msg}${nonce}`
)

const publicKey = ethUtil.ecrecover(messageHash, sig.v, sig.r, sig.s)
const recovered = ethUtil.bufferToHex(ethUtil.pubToAddress(publicKey))

return recovered
}

0 comments on commit 5b98b6b

Please sign in to comment.