diff --git a/backend/src/middleware/permissionsMiddleware.js b/backend/src/middleware/permissionsMiddleware.js index b0d07c8ec7..4622c3f242 100644 --- a/backend/src/middleware/permissionsMiddleware.js +++ b/backend/src/middleware/permissionsMiddleware.js @@ -100,7 +100,7 @@ const noEmailFilter = rule({ const publicRegistration = rule()(() => !!CONFIG.PUBLIC_REGISTRATION) // Permissions -const permissions = shield( +export default shield( { Query: { '*': deny, @@ -176,5 +176,3 @@ const permissions = shield( fallbackRule: allow, }, ) - -export default permissions diff --git a/backend/src/schema/resolvers/users.js b/backend/src/schema/resolvers/users.js index 3024bf5a54..02ed8dbac2 100644 --- a/backend/src/schema/resolvers/users.js +++ b/backend/src/schema/resolvers/users.js @@ -49,10 +49,22 @@ export default { User: async (object, args, context, resolveInfo) => { const { email } = args if (email) { - const e = await instance.first('EmailAddress', { email }) - let user = e.get('belongsTo') - user = await user.toJson() - return [user.node] + let session + try { + session = context.driver.session() + const readTxResult = await session.readTransaction(txc => { + const result = txc.run( + ` + MATCH (user:User)-[:PRIMARY_EMAIL]->(e:EmailAddress {email: $args.email}) + RETURN user`, + { args }, + ) + return result + }) + return readTxResult.records.map(r => r.get('user').properties) + } finally { + session.close() + } } return neo4jgraphql(object, args, context, resolveInfo) }, diff --git a/backend/src/schema/resolvers/users.spec.js b/backend/src/schema/resolvers/users.spec.js index 36b77d6114..483c702148 100644 --- a/backend/src/schema/resolvers/users.spec.js +++ b/backend/src/schema/resolvers/users.spec.js @@ -70,6 +70,21 @@ describe('User', () => { data: { User: [{ name: 'Johnny' }] }, }) }) + + it('non-existing email address, issue #2294', async () => { + // see: https://github.com/Human-Connection/Human-Connection/issues/2294 + await expect( + query({ + query: userQuery, + variables: { + email: 'this-email-does-not-exist@example.org', + }, + }), + ).resolves.toMatchObject({ + data: { User: [] }, + errors: undefined, + }) + }) }) }) })