diff --git a/__tests__/verifyUserIdentity.spec.js b/__tests__/verifyUserIdentity.spec.js index 74950d0eb1d3b3a8145a97c050f1630ce9716579..d691e3f88a02aa44aa3ebbb3dfce49da62c76416 100644 --- a/__tests__/verifyUserIdentity.spec.js +++ b/__tests__/verifyUserIdentity.spec.js @@ -1,32 +1,55 @@ const { errors } = require('cozy-konnector-libs') -const { verifyUserIdentity } = require('../src/index') +const { verifyUserIdentity } = require('../src/verifyUserIdentity') jest.mock('../src/requests/insee', () => ({ - getInseeCode: jest.fn().mockResolvedValueOnce(69), + getInseeCode: jest.fn().mockResolvedValue(69), +})) + +// This mock doenst work somehow +jest.mock('../src/findUserPdl', () => ({ + findUserPdl: jest.fn().mockResolvedValue('12345'), })) -describe('verifyUserIdentity', () => { - // mock insee code - // mock find User Pdl - // const mockGetInseeCode = jest.fn() - // const mockFindUserPdl = jest.fn() - it('should throw LOGIN_FAILED when pdl give and recieved are not matching', async () => { - const result = await verifyUserIdentity( - { - name: 'John', - address: '1 street', - pointId: 987654321, - postalCode: '69069', - }, - 'baseUrl', - 'apiKey', - 'login@user.com' - ) - // jest - // .mock(verifyUserIdentity(), 'getInseeCode') - // .mockResolvedValueOnce(696969) - // jest.spyOn(verifyUserIdentity, 'findUserPdl').mockResolvedValueOnce(696969) +jest.mock('../src/index', () => ({ + start: jest.fn(), +})) + +describe('verifyUserIdentity', () => { + it('should throw LOGIN_FAILED when pdl give and recieved are NOT matching 🚫', async () => { + try { + await verifyUserIdentity( + { + name: 'John', + address: '1 street', + pointId: 987654321, + postalCode: '69069', + }, + 'azertyuiop', + 'apiKey', + 'login@user.com' + ) + expect(true).toBe(false) + } catch (error) { + expect(error).toBe(errors.LOGIN_FAILED) + } + }) - expect(result).toBe(errors.LOGIN_FAILED) + it('should return true when pdl give and recieved are matching ✅', async () => { + try { + const response = await verifyUserIdentity( + { + name: 'John', + address: '1 street', + pointId: '12345', + postalCode: '69069', + }, + 'azertyuiop', + 'apiKey', + 'login@user.com' + ) + expect(response).toBe(true) + } catch (error) { + expect(true).toBe(false) + } }) }) diff --git a/src/findUserPdl.js b/src/findUserPdl.js new file mode 100644 index 0000000000000000000000000000000000000000..3fbeabf7ecde94c6294d48bbee6c11a60fed4c30 --- /dev/null +++ b/src/findUserPdl.js @@ -0,0 +1,45 @@ +// @ts-check +const { log, errors } = require('cozy-konnector-libs') +const soapRequest = require('easy-soap-request') +const { parseUserPdl, parseTags, parseValue } = require('./parsing') +const { rechercherPoint } = require('./requests/sge') +const xml2js = require('xml2js') + +/** + * @return {Promise<string>} User Pdl + */ +async function findUserPdl( + url, + apiAuthKey, + appLogin, + name, + address, + postalCode, + inseeCode +) { + log('info', 'Fetching user data') + const sgeHeaders = { + 'Content-Type': 'text/xml;charset=UTF-8', + apikey: apiAuthKey, + } + const { response } = await soapRequest({ + url: url, + headers: sgeHeaders, + xml: rechercherPoint(appLogin, name, postalCode, inseeCode, address), + }).catch(err => { + log('error', 'rechercherPointResponse') + log('error', err) + throw errors.LOGIN_FAILED + }) + + const parsedReply = await xml2js.parseStringPromise(response.body, { + tagNameProcessors: [parseTags], + valueProcessors: [parseValue], + explicitArray: false, + }) + + //TODO: handle errors + return parseUserPdl(parsedReply) +} + +module.exports = { findUserPdl } diff --git a/src/index.js b/src/index.js index d3fb8fbeaaa5e14e97afcecdae60a16ab08234e4..0eda9deebcf9fe013913aaa79e561c71cb186fe0 100644 --- a/src/index.js +++ b/src/index.js @@ -17,13 +17,12 @@ const { formateDataForDoctype, parseTags, parseValue, - parseUserPdl, } = require('./parsing') const { consulterDonneesTechniquesContractuelles, consultationMesuresDetailleesMaxPower, consultationMesuresDetaillees, - rechercherPoint, + commanderCollectePublicationMesures, commanderArretServiceSouscritMesures, } = require('./requests/sge') @@ -33,7 +32,8 @@ const { getBoConsent, deleteBoConsent, } = require('./requests/bo') -const { getInseeCode } = require('./requests/insee') + +const verifyUserIdentity = require('./verifyUserIdentity') moment.locale('fr') // set the language moment.tz.setDefault('Europe/Paris') // set the timezone @@ -110,38 +110,6 @@ async function start(fields, cozyParameters) { await gatherData(baseUrl, apiAuthKey, loginUtilisateur, fields.pointId) } -/** - * Verify user identity - * @param {object} fields - * @param {string} baseUrl - * @param {string} apiAuthKey - * @param {string} loginUtilisateur - */ -async function verifyUserIdentity( - fields, - baseUrl, - apiAuthKey, - loginUtilisateur -) { - const inseeCode = await getInseeCode(fields.postalCode) - - const pdl = await findUserPdl( - `${baseUrl}/enedis_SDE_recherche-point/1.0`, - apiAuthKey, - loginUtilisateur, - fields.name, - fields.address, - fields.postalCode, - inseeCode - ) - - if (fields.pointId != pdl) { - log('error', 'PointId does not match') - throw errors.LOGIN_FAILED - } - return true -} - /** * Main method for gathering data * @param {string} baseUrl @@ -476,45 +444,3 @@ function isFirstStart() { //TODO: Implement return true } - -/** - * @return {Promise<string>} User Pdl - */ -async function findUserPdl( - url, - apiAuthKey, - appLogin, - name, - address, - postalCode, - inseeCode -) { - log('info', 'Fetching user data') - const sgeHeaders = { - 'Content-Type': 'text/xml;charset=UTF-8', - apikey: apiAuthKey, - } - const { response } = await soapRequest({ - url: url, - headers: sgeHeaders, - xml: rechercherPoint(appLogin, name, postalCode, inseeCode, address), - }).catch(err => { - log('error', 'rechercherPointResponse') - log('error', err) - throw errors.LOGIN_FAILED - }) - - const parsedReply = await xml2js.parseStringPromise(response.body, { - tagNameProcessors: [parseTags], - valueProcessors: [parseValue], - explicitArray: false, - }) - - //TODO: handle errors - return parseUserPdl(parsedReply) -} - -module.exports = { - verifyUserIdentity, - findUserPdl, -} diff --git a/src/verifyUserIdentity.js b/src/verifyUserIdentity.js new file mode 100644 index 0000000000000000000000000000000000000000..d0ef44a79e83029411cc1ecb4c0e901ce44c3990 --- /dev/null +++ b/src/verifyUserIdentity.js @@ -0,0 +1,40 @@ +// @ts-check +const { log, errors } = require('cozy-konnector-libs') +const { findUserPdl } = require('./findUserPdl') +const { getInseeCode } = require('./requests/insee') + +/** + * Verify user identity + * @param {object} fields + * @param {string} baseUrl + * @param {string} apiAuthKey + * @param {string} loginUtilisateur + */ +async function verifyUserIdentity( + fields, + baseUrl, + apiAuthKey, + loginUtilisateur +) { + const inseeCode = await getInseeCode(fields.postalCode) + + const pdl = await findUserPdl( + `${baseUrl}/enedis_SDE_recherche-point/1.0`, + apiAuthKey, + loginUtilisateur, + fields.name, + fields.address, + fields.postalCode, + inseeCode + ) + console.log(pdl) + console.log(fields.pointId) + + if (fields.pointId != pdl) { + log('error', 'PointId does not match') + throw errors.LOGIN_FAILED + } + return true +} + +module.exports = { verifyUserIdentity }