From 4fd136c625177b56c21eafc6d6a4ce9905d36782 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 17 Dec 2020 19:56:41 +0100 Subject: [PATCH 1/4] Default user is created but cannot login sofar --- backend/src/db/migrate/store.js | 49 ++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/backend/src/db/migrate/store.js b/backend/src/db/migrate/store.js index f3f7e563f..36cb13f57 100644 --- a/backend/src/db/migrate/store.js +++ b/backend/src/db/migrate/store.js @@ -1,11 +1,58 @@ import { getDriver, getNeode } from '../../db/neo4j' +import { hashSync } from 'bcryptjs' +import { v4 as uuid } from 'uuid' + +const defaultAdmin = { + email: "admin@example.org", + password: hashSync('1234', 10), + name: "admin", + id: uuid(), + slug: "admin", +} class Store { async init(next) { const neode = getNeode() const { driver } = neode const session = driver.session() - // eslint-disable-next-line no-console + const readTxResultPromise = session.readTransaction(async (txc) => { + const result = await txc.run( + 'MATCH (email:EmailAddress)-[:BELONGS_TO]->(user:User) RETURN count(user) AS userCount' + ) + return result.records.map((r) => r.get('userCount')) + }) + let createAdmin = false + try { + const userCount = parseInt(String(await readTxResultPromise)) + if (userCount === 0) createAdmin = true + } catch (error) { + console.log(error) // eslint-disable-line no-console + } + if (createAdmin) { + const createAdminTxResultPromise = session.writeTransaction(async (txc) => { + txc.run( + `MERGE (e:EmailAddress { + email: "${defaultAdmin.email}", + createdAt: datetime() + })-[:BELONGS_TO]->(u:User { + name: "${defaultAdmin.name}", + encryptedPassword: "${defaultAdmin.password}", + role: "admin", + id: "${defaultAdmin.id}", + slug: "${defaultAdmin.slug}", + createdAt: datetime(), + deleted: false, + disabled: false + })-[:PRIMARY_EMAIL]->(e)` + ) + }) + try { + await createAdminTxResultPromise + console.log('Successfully created default admin user') // eslint-disable-line no-console + } catch (error) { + console.log(error) // eslint-disable-line no-console + } + } const writeTxResultPromise = session.writeTransaction(async (txc) => { await txc.run('CALL apoc.schema.assert({},{},true)') // drop all indices return Promise.all( From cee33179188d9086859975bba004ac4b29ce47e7 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Fri, 18 Dec 2020 09:40:04 +0100 Subject: [PATCH 2/4] default user can login --- backend/src/db/migrate/store.js | 86 +++++++++++++++++---------------- 1 file changed, 45 insertions(+), 41 deletions(-) diff --git a/backend/src/db/migrate/store.js b/backend/src/db/migrate/store.js index 36cb13f57..b803778cd 100644 --- a/backend/src/db/migrate/store.js +++ b/backend/src/db/migrate/store.js @@ -3,11 +3,52 @@ import { hashSync } from 'bcryptjs' import { v4 as uuid } from 'uuid' const defaultAdmin = { - email: "admin@example.org", + email: 'admin@example.org', password: hashSync('1234', 10), - name: "admin", + name: 'admin', id: uuid(), - slug: "admin", + slug: 'admin', +} + +const createDefaultAdminUser = async (session) => { + const readTxResultPromise = session.readTransaction(async (txc) => { + const result = await txc.run( + 'MATCH (email:EmailAddress)-[:BELONGS_TO]->(user:User) RETURN count(user) AS userCount', + ) + return result.records.map((r) => r.get('userCount')) + }) + let createAdmin = false + try { + const userCount = parseInt(String(await readTxResultPromise)) + if (userCount === 0) createAdmin = true + } catch (error) { + console.log(error) // eslint-disable-line no-console + } + if (createAdmin) { + const createAdminTxResultPromise = session.writeTransaction(async (txc) => { + txc.run( + `MERGE (e:EmailAddress { + email: "${defaultAdmin.email}", + createdAt: datetime() + })-[:BELONGS_TO]->(u:User { + name: "${defaultAdmin.name}", + encryptedPassword: "${defaultAdmin.password}", + role: "admin", + id: "${defaultAdmin.id}", + slug: "${defaultAdmin.slug}", + createdAt: toString(datetime()), + deleted: false, + disabled: false + })-[:PRIMARY_EMAIL]->(e)`, + ) + }) + try { + await createAdminTxResultPromise + console.log('Successfully created default admin user') // eslint-disable-line no-console + } catch (error) { + console.log(error) // eslint-disable-line no-console + } + } } class Store { @@ -15,44 +56,7 @@ class Store { const neode = getNeode() const { driver } = neode const session = driver.session() - const readTxResultPromise = session.readTransaction(async (txc) => { - const result = await txc.run( - 'MATCH (email:EmailAddress)-[:BELONGS_TO]->(user:User) RETURN count(user) AS userCount' - ) - return result.records.map((r) => r.get('userCount')) - }) - let createAdmin = false - try { - const userCount = parseInt(String(await readTxResultPromise)) - if (userCount === 0) createAdmin = true - } catch (error) { - console.log(error) // eslint-disable-line no-console - } - if (createAdmin) { - const createAdminTxResultPromise = session.writeTransaction(async (txc) => { - txc.run( - `MERGE (e:EmailAddress { - email: "${defaultAdmin.email}", - createdAt: datetime() - })-[:BELONGS_TO]->(u:User { - name: "${defaultAdmin.name}", - encryptedPassword: "${defaultAdmin.password}", - role: "admin", - id: "${defaultAdmin.id}", - slug: "${defaultAdmin.slug}", - createdAt: datetime(), - deleted: false, - disabled: false - })-[:PRIMARY_EMAIL]->(e)` - ) - }) - try { - await createAdminTxResultPromise - console.log('Successfully created default admin user') // eslint-disable-line no-console - } catch (error) { - console.log(error) // eslint-disable-line no-console - } - } + await createDefaultAdminUser(session) const writeTxResultPromise = session.writeTransaction(async (txc) => { await txc.run('CALL apoc.schema.assert({},{},true)') // drop all indices return Promise.all( From 3f02ade3296a2bdacdf537da4ba03aaf80a045e3 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 21 Dec 2020 09:52:45 +0100 Subject: [PATCH 3/4] createdAt converted toString in Email --- backend/src/db/migrate/store.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/db/migrate/store.js b/backend/src/db/migrate/store.js index b803778cd..63d911a30 100644 --- a/backend/src/db/migrate/store.js +++ b/backend/src/db/migrate/store.js @@ -13,7 +13,7 @@ const defaultAdmin = { const createDefaultAdminUser = async (session) => { const readTxResultPromise = session.readTransaction(async (txc) => { const result = await txc.run( - 'MATCH (email:EmailAddress)-[:BELONGS_TO]->(user:User) RETURN count(user) AS userCount', + 'MATCH (user:User) RETURN count(user) AS userCount', ) return result.records.map((r) => r.get('userCount')) }) @@ -29,7 +29,7 @@ const createDefaultAdminUser = async (session) => { txc.run( `MERGE (e:EmailAddress { email: "${defaultAdmin.email}", - createdAt: datetime() + createdAt: toString(datetime()) })-[:BELONGS_TO]->(u:User { name: "${defaultAdmin.name}", encryptedPassword: "${defaultAdmin.password}", From 75485fe2379a771671fb5adf79fa080aacc759bc Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 21 Dec 2020 10:07:43 +0100 Subject: [PATCH 4/4] linting --- backend/src/db/migrate/store.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/backend/src/db/migrate/store.js b/backend/src/db/migrate/store.js index 63d911a30..5d39fb82c 100644 --- a/backend/src/db/migrate/store.js +++ b/backend/src/db/migrate/store.js @@ -12,9 +12,7 @@ const defaultAdmin = { const createDefaultAdminUser = async (session) => { const readTxResultPromise = session.readTransaction(async (txc) => { - const result = await txc.run( - 'MATCH (user:User) RETURN count(user) AS userCount', - ) + const result = await txc.run('MATCH (user:User) RETURN count(user) AS userCount') return result.records.map((r) => r.get('userCount')) }) let createAdmin = false