diff --git a/.env.test b/.env.test index adb1f617..dd2ff544 100644 --- a/.env.test +++ b/.env.test @@ -28,7 +28,8 @@ DISABLE_FACE_VERIFICATION=false KEEP_FACE_VERIFICATION_RECORDS=24 NEW_RELIC_LICENSE_KEY=ab380edbf4e6210529f4aa2513445e7f75672594 JWT_PASS=G00DDAPP -WEB3_SITE_URL=https://inivtation.herokuapp.com +#WEB3_SITE_URL=https://inivtation.herokuapp.com +WEB3_SITE_URL=https://w3.gooddollar.org FUSE_API=https://explorer.fuse.io TWILIO_AUTH_ID= TWILIO_AUTH_TOKEN= diff --git a/src/imports/__tests__/torusVerifier.test.js b/src/imports/__tests__/torusVerifier.test.js index a99fefe8..dc976318 100644 --- a/src/imports/__tests__/torusVerifier.test.js +++ b/src/imports/__tests__/torusVerifier.test.js @@ -6,20 +6,12 @@ import { assign } from 'lodash' import conf from '../../server/server.config' import { recoverPublickey } from '../../server/utils/eth' import torusVerifier from '../torusVerifier' -import { DefaultVerificationStrategy } from '../../server/storage/verifier' +import createUserVerifier from '../../server/storage/verifier' jest.setTimeout(20000) describe('Test torus email/mobile to address', () => { - let mainnetVerifier - const strategies = ['google', 'google-old', 'auth0-pwdless-sms', 'auth0-pwdless-email'] - - beforeAll(() => { - const { torusNetwork, torusProxyContract } = conf - - assign(conf, { torusNetwork: 'mainnet', torusProxyContract: '0x638646503746d5456209e33a2ff5e3226d698bea' }) - mainnetVerifier = torusVerifier.constructor.factory() - assign(conf, { torusNetwork, torusProxyContract }) - }) + //const strategies = ['google', 'google-old', 'auth0-pwdless-sms', 'auth0-pwdless-email'] + const strategies = ['auth0-pwdless-email'] it('should get torus nodes', async () => { const nodes = await torusVerifier.fetchNodeDetails.getNodeDetails() @@ -30,15 +22,6 @@ describe('Test torus email/mobile to address', () => { }) }) - it('should get torus nodes from mainnet', async () => { - const nodes = await mainnetVerifier.fetchNodeDetails.getNodeDetails() - - expect(nodes).toMatchObject({ - nodeListAddress: '0x638646503746d5456209e33a2ff5e3226d698bea', - torusNodeEndpoints: expect.any(Array) - }) - }) - it('should get strategy options', async () => { strategies.forEach(torusType => { const z = torusVerifier.getVerificationOptions(torusType, { email: 'x@x.com', mobile: '+972505050' }) @@ -52,11 +35,13 @@ describe('Test torus email/mobile to address', () => { }) }) - xit('should return public key for email/mobile', async () => { + it('should return public key for email/mobile', async () => { const { torusNodeEndpoints, torusNodePub } = await torusVerifier.fetchNodeDetails.getNodeDetails() + await Promise.all( strategies.map(async torusType => { const opts = torusVerifier.getVerificationOptions(torusType, { email: 'x@gmail.com', mobile: '+972507319093' }) + const response = await torusVerifier.torus.getPublicAddress( torusNodeEndpoints, torusNodePub, @@ -87,30 +72,7 @@ describe('Test torus email/mobile to address', () => { expect(signedPublicKey).toEqual('0xD97b62EC3266EbA1F8F90Ba264174c138b5d4C38'.toLowerCase()) }) - xit('should return public key for mainnet email/mobile', async () => { - const { torusNodeEndpoints, torusNodePub } = await mainnetVerifier.fetchNodeDetails.getNodeDetails() - - const opts = mainnetVerifier.getVerificationOptions('google', { - email: 'x@gmail.com', - mobile: '+9720507319000' - }) - - const response = await mainnetVerifier.torus.getPublicAddress( - torusNodeEndpoints, - torusNodePub, - { verifier: opts.verifier, verifierId: opts.identifier }, - false - ) - - expect([ - '0x59fFCACC9969441eB1514e984CF9430b720EF626', - '0x2916342DA5cF53ac9CfcBCdc7c6AB0405Ea5F439', - '0xB5AD204135Ad58856a49CdA7351026c7e4906181' - ]).toContain(response) - }) - it('should modify userrecord if verified', async () => { - const userVerifier = new DefaultVerificationStrategy() const { verifyProof } = torusVerifier const userRecord = { @@ -118,9 +80,21 @@ describe('Test torus email/mobile to address', () => { isEmailConfirmed: true } + const requestPayload = { + torusProof: '0x0', + torusProvider: 'google', + torusProofNonce: 1 + } + + const userVerifier = createUserVerifier(userRecord, requestPayload, console) + + torusVerifier.verifyProof = jest.fn(() => ({ + mobileVerified: true, + emailVerified: false + })) + try { - torusVerifier.verifyProof = jest.fn(() => ({ mobileVerified: true, emailVerified: false })) - await userVerifier.verify({ torusProof: '0x0', torusProvider: 'google', torusProofNonce: 1 }, userRecord, console) + await userVerifier.verifySignInIdentifiers() } finally { assign(torusVerifier, { verifyProof }) } @@ -130,4 +104,48 @@ describe('Test torus email/mobile to address', () => { isEmailConfirmed: true }) }) + + /* + describe('mainnet tests', () => { + let mainnetVerifier + + beforeAll(() => { + const { torusNetwork, torusProxyContract } = conf + + assign(conf, { torusNetwork: 'mainnet', torusProxyContract: '0x638646503746d5456209e33a2ff5e3226d698bea' }) + mainnetVerifier = torusVerifier.constructor.factory() + assign(conf, { torusNetwork, torusProxyContract }) + }) + + it('should get torus nodes from mainnet', async () => { + const nodes = await mainnetVerifier.fetchNodeDetails.getNodeDetails() + + expect(nodes).toMatchObject({ + nodeListAddress: '0x638646503746d5456209e33a2ff5e3226d698bea', + torusNodeEndpoints: expect.any(Array) + }) + }) + + xit('should return public key for mainnet email/mobile', async () => { + const { torusNodeEndpoints, torusNodePub } = await mainnetVerifier.fetchNodeDetails.getNodeDetails() + + const opts = mainnetVerifier.getVerificationOptions('google', { + email: 'x@gmail.com', + mobile: '+9720507319000' + }) + + const response = await mainnetVerifier.torus.getPublicAddress( + torusNodeEndpoints, + torusNodePub, + { verifier: opts.verifier, verifierId: opts.identifier }, + false + ) + + expect([ + '0x59fFCACC9969441eB1514e984CF9430b720EF626', + '0x2916342DA5cF53ac9CfcBCdc7c6AB0405Ea5F439', + '0xB5AD204135Ad58856a49CdA7351026c7e4906181' + ]).toContain(response) + }) + })*/ }) diff --git a/src/imports/torusVerifier.js b/src/imports/torusVerifier.js index 5eb33408..0d8c738f 100644 --- a/src/imports/torusVerifier.js +++ b/src/imports/torusVerifier.js @@ -66,6 +66,8 @@ class TorusVerifier { constructor(Config, logger) { const { torusNetwork, torusProxyContract } = Config + console.log({ torusNetwork, torusProxyContract }) + this.torus = new TorusUtils() this.logger = logger diff --git a/src/server/server.config.js b/src/server/server.config.js index a2c4672c..180612b7 100644 --- a/src/server/server.config.js +++ b/src/server/server.config.js @@ -1,8 +1,9 @@ import convict from 'convict' import dotenv from 'dotenv' -import ContractsAddress from '@gooddollar/goodcontracts/releases/deployment.json' import networks from './networks' +import ContractsAddress from '@gooddollar/goodcontracts/releases/deployment.json' + import { version } from '../../package.json' dotenv.config({ path: process.env.NODE_ENV === 'test' ? `.env.test` : '.env' }) @@ -443,20 +444,19 @@ conf.set('ethereum', networks[networkId]) //parse S3 details for gundb in format of key,secret,bucket if (privateS3) { - let s3Vals = privateS3.split(',') - let s3Conf = { key: s3Vals[0], secret: s3Vals[1], bucket: s3Vals[2] } + const [key, secret, bucket] = privateS3.split(',') - conf.set('gunPrivateS3', s3Conf) + conf.set('gunPrivateS3', { key, secret, bucket }) } if (publicS3) { - let s3Vals = publicS3.split(',') - let s3Conf = { key: s3Vals[0], secret: s3Vals[1], bucket: s3Vals[2] } + const [key, secret, bucket] = publicS3.split(',') - conf.set('gunPublicS3', s3Conf) + conf.set('gunPublicS3', { key, secret, bucket }) } // Perform validation conf.validate({ allowed: 'strict' }) + // eslint-disable-next-line export default conf.getProperties() diff --git a/src/server/storage/verifier.js b/src/server/storage/verifier.js index 22a66d7a..3e613d61 100644 --- a/src/server/storage/verifier.js +++ b/src/server/storage/verifier.js @@ -3,7 +3,7 @@ import { assign } from 'lodash' import TorusVerifier from '../../imports/torusVerifier' import FacebookVerifier from '../../imports/facebookVerifier' -export class DefaultVerificationStrategy { +class DefaultVerificationStrategy { async verify(requestPayload, userRecord, logger) { const { torusProof, torusProvider, torusProofNonce } = requestPayload let verificationResult = { emailVerified: false, mobileVerified: false }