From f78c54a3e825ee7826f2edcec2ce323b041dd606 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 31 May 2019 19:31:39 +0200 Subject: [PATCH 01/13] refactored backend structure --- backend/.env.template | 2 +- backend/src/config/index.js | 26 ++++++++++ backend/src/graphql-schema.js | 2 - backend/src/schema/index.js | 24 ++++++++++ .../src/{ => schema}/resolvers/badges.spec.js | 0 .../src/{ => schema}/resolvers/comments.js | 0 .../{ => schema}/resolvers/comments.spec.js | 0 .../resolvers/fileUpload/index.js | 0 .../{ => schema}/resolvers/fileUpload/spec.js | 0 backend/src/{ => schema}/resolvers/follow.js | 0 .../src/{ => schema}/resolvers/follow.spec.js | 0 backend/src/{ => schema}/resolvers/index.js | 0 .../src/{ => schema}/resolvers/moderation.js | 0 .../{ => schema}/resolvers/moderation.spec.js | 0 .../{ => schema}/resolvers/notifications.js | 0 .../resolvers/notifications.spec.js | 0 backend/src/{ => schema}/resolvers/posts.js | 0 .../src/{ => schema}/resolvers/posts.spec.js | 0 backend/src/{ => schema}/resolvers/reports.js | 0 .../{ => schema}/resolvers/reports.spec.js | 0 backend/src/{ => schema}/resolvers/rewards.js | 0 .../{ => schema}/resolvers/rewards.spec.js | 0 backend/src/{ => schema}/resolvers/shout.js | 0 .../src/{ => schema}/resolvers/shout.spec.js | 0 .../src/{ => schema}/resolvers/socialMedia.js | 0 .../resolvers/socialMedia.spec.js | 0 .../src/{ => schema}/resolvers/statistics.js | 0 .../{ => schema}/resolvers/user_management.js | 2 +- .../resolvers/user_management.spec.js | 0 backend/src/{ => schema}/resolvers/users.js | 0 .../src/{ => schema}/resolvers/users.spec.js | 0 .../{ => schema}/types/enum/BadgeStatus.gql | 0 .../src/{ => schema}/types/enum/BadgeType.gql | 0 .../src/{ => schema}/types/enum/UserGroup.gql | 0 .../{ => schema}/types/enum/Visibility.gql | 0 backend/src/{ => schema}/types/index.js | 0 .../src/{ => schema}/types/scalar/Date.gql_ | 0 .../{ => schema}/types/scalar/DateTime.gql_ | 0 .../src/{ => schema}/types/scalar/Time.gql_ | 0 .../src/{ => schema}/types/scalar/Upload.gql | 0 backend/src/{ => schema}/types/schema.gql | 0 .../src/{ => schema}/types/schema_full.gql_ | 0 backend/src/{ => schema}/types/type/Badge.gql | 0 .../src/{ => schema}/types/type/Category.gql | 0 .../src/{ => schema}/types/type/Comment.gql | 0 backend/src/{ => schema}/types/type/Post.gql | 0 backend/src/{ => schema}/types/type/Tag.gql | 0 backend/src/{ => schema}/types/type/User.gql | 0 backend/src/server.js | 47 ++++--------------- .../templates/configmap.template.yaml | 2 +- docker-compose.maintenance.yml | 2 +- docker-compose.yml | 2 +- 52 files changed, 64 insertions(+), 45 deletions(-) create mode 100644 backend/src/config/index.js delete mode 100644 backend/src/graphql-schema.js create mode 100644 backend/src/schema/index.js rename backend/src/{ => schema}/resolvers/badges.spec.js (100%) rename backend/src/{ => schema}/resolvers/comments.js (100%) rename backend/src/{ => schema}/resolvers/comments.spec.js (100%) rename backend/src/{ => schema}/resolvers/fileUpload/index.js (100%) rename backend/src/{ => schema}/resolvers/fileUpload/spec.js (100%) rename backend/src/{ => schema}/resolvers/follow.js (100%) rename backend/src/{ => schema}/resolvers/follow.spec.js (100%) rename backend/src/{ => schema}/resolvers/index.js (100%) rename backend/src/{ => schema}/resolvers/moderation.js (100%) rename backend/src/{ => schema}/resolvers/moderation.spec.js (100%) rename backend/src/{ => schema}/resolvers/notifications.js (100%) rename backend/src/{ => schema}/resolvers/notifications.spec.js (100%) rename backend/src/{ => schema}/resolvers/posts.js (100%) rename backend/src/{ => schema}/resolvers/posts.spec.js (100%) rename backend/src/{ => schema}/resolvers/reports.js (100%) rename backend/src/{ => schema}/resolvers/reports.spec.js (100%) rename backend/src/{ => schema}/resolvers/rewards.js (100%) rename backend/src/{ => schema}/resolvers/rewards.spec.js (100%) rename backend/src/{ => schema}/resolvers/shout.js (100%) rename backend/src/{ => schema}/resolvers/shout.spec.js (100%) rename backend/src/{ => schema}/resolvers/socialMedia.js (100%) rename backend/src/{ => schema}/resolvers/socialMedia.spec.js (100%) rename backend/src/{ => schema}/resolvers/statistics.js (100%) rename backend/src/{ => schema}/resolvers/user_management.js (98%) rename backend/src/{ => schema}/resolvers/user_management.spec.js (100%) rename backend/src/{ => schema}/resolvers/users.js (100%) rename backend/src/{ => schema}/resolvers/users.spec.js (100%) rename backend/src/{ => schema}/types/enum/BadgeStatus.gql (100%) rename backend/src/{ => schema}/types/enum/BadgeType.gql (100%) rename backend/src/{ => schema}/types/enum/UserGroup.gql (100%) rename backend/src/{ => schema}/types/enum/Visibility.gql (100%) rename backend/src/{ => schema}/types/index.js (100%) rename backend/src/{ => schema}/types/scalar/Date.gql_ (100%) rename backend/src/{ => schema}/types/scalar/DateTime.gql_ (100%) rename backend/src/{ => schema}/types/scalar/Time.gql_ (100%) rename backend/src/{ => schema}/types/scalar/Upload.gql (100%) rename backend/src/{ => schema}/types/schema.gql (100%) rename backend/src/{ => schema}/types/schema_full.gql_ (100%) rename backend/src/{ => schema}/types/type/Badge.gql (100%) rename backend/src/{ => schema}/types/type/Category.gql (100%) rename backend/src/{ => schema}/types/type/Comment.gql (100%) rename backend/src/{ => schema}/types/type/Post.gql (100%) rename backend/src/{ => schema}/types/type/Tag.gql (100%) rename backend/src/{ => schema}/types/type/User.gql (100%) diff --git a/backend/.env.template b/backend/.env.template index abc62b2dc..e905d1eb6 100644 --- a/backend/.env.template +++ b/backend/.env.template @@ -4,7 +4,7 @@ NEO4J_PASSWORD=letmein GRAPHQL_PORT=4000 GRAPHQL_URI=http://localhost:4000 CLIENT_URI=http://localhost:3000 -MOCK=false +MOCKS=false JWT_SECRET="b/&&7b78BF&fv/Vd" MAPBOX_TOKEN="pk.eyJ1IjoiaHVtYW4tY29ubmVjdGlvbiIsImEiOiJjajl0cnBubGoweTVlM3VwZ2lzNTNud3ZtIn0.KZ8KK9l70omjXbEkkbHGsQ" diff --git a/backend/src/config/index.js b/backend/src/config/index.js new file mode 100644 index 000000000..7a0387560 --- /dev/null +++ b/backend/src/config/index.js @@ -0,0 +1,26 @@ +import dotenv from 'dotenv' + +dotenv.config() + +const requiredConfigs = { + MAPBOX_TOKEN: process.env.MAPBOX_TOKEN, + JWT_SECRET: process.env.JWT_SECRET, + PRIVATE_KEY_PASSPHRASE: process.env.PRIVATE_KEY_PASSPHRASE, +} + +const developmentConfigs = { + DEBUG: process.env.NODE_ENV !== 'production' && process.env.DEBUG === 'true', + MOCKS: process.env.MOCKS === 'true', +} + +// check required configs and throw error +Object.entries(requiredConfigs).map(entry => { + if (!entry[1]) { + throw new Error(`ERROR: "${entry[0]}" env variable is missing.`) + } +}) + +export default { + ...requiredConfigs, + ...developmentConfigs, +} diff --git a/backend/src/graphql-schema.js b/backend/src/graphql-schema.js deleted file mode 100644 index 01b40dfc5..000000000 --- a/backend/src/graphql-schema.js +++ /dev/null @@ -1,2 +0,0 @@ -export { default as typeDefs } from './types' -export { default as resolvers } from './resolvers' diff --git a/backend/src/schema/index.js b/backend/src/schema/index.js new file mode 100644 index 000000000..d294d8aba --- /dev/null +++ b/backend/src/schema/index.js @@ -0,0 +1,24 @@ +import { makeAugmentedSchema } from 'neo4j-graphql-js' +import CONFIG from './../config' +import applyScalars from './../bootstrap/scalars' +import applyDirectives from './../bootstrap/directives' +import typeDefs from './types' +import resolvers from './resolvers' + +export default applyScalars( + applyDirectives( + makeAugmentedSchema({ + typeDefs, + resolvers, + config: { + query: { + exclude: ['Notfication', 'Statistics', 'LoggedInUser'], + }, + mutation: { + exclude: ['Notfication', 'Statistics', 'LoggedInUser'], + }, + debug: CONFIG.DEBUG, + }, + }), + ), +) diff --git a/backend/src/resolvers/badges.spec.js b/backend/src/schema/resolvers/badges.spec.js similarity index 100% rename from backend/src/resolvers/badges.spec.js rename to backend/src/schema/resolvers/badges.spec.js diff --git a/backend/src/resolvers/comments.js b/backend/src/schema/resolvers/comments.js similarity index 100% rename from backend/src/resolvers/comments.js rename to backend/src/schema/resolvers/comments.js diff --git a/backend/src/resolvers/comments.spec.js b/backend/src/schema/resolvers/comments.spec.js similarity index 100% rename from backend/src/resolvers/comments.spec.js rename to backend/src/schema/resolvers/comments.spec.js diff --git a/backend/src/resolvers/fileUpload/index.js b/backend/src/schema/resolvers/fileUpload/index.js similarity index 100% rename from backend/src/resolvers/fileUpload/index.js rename to backend/src/schema/resolvers/fileUpload/index.js diff --git a/backend/src/resolvers/fileUpload/spec.js b/backend/src/schema/resolvers/fileUpload/spec.js similarity index 100% rename from backend/src/resolvers/fileUpload/spec.js rename to backend/src/schema/resolvers/fileUpload/spec.js diff --git a/backend/src/resolvers/follow.js b/backend/src/schema/resolvers/follow.js similarity index 100% rename from backend/src/resolvers/follow.js rename to backend/src/schema/resolvers/follow.js diff --git a/backend/src/resolvers/follow.spec.js b/backend/src/schema/resolvers/follow.spec.js similarity index 100% rename from backend/src/resolvers/follow.spec.js rename to backend/src/schema/resolvers/follow.spec.js diff --git a/backend/src/resolvers/index.js b/backend/src/schema/resolvers/index.js similarity index 100% rename from backend/src/resolvers/index.js rename to backend/src/schema/resolvers/index.js diff --git a/backend/src/resolvers/moderation.js b/backend/src/schema/resolvers/moderation.js similarity index 100% rename from backend/src/resolvers/moderation.js rename to backend/src/schema/resolvers/moderation.js diff --git a/backend/src/resolvers/moderation.spec.js b/backend/src/schema/resolvers/moderation.spec.js similarity index 100% rename from backend/src/resolvers/moderation.spec.js rename to backend/src/schema/resolvers/moderation.spec.js diff --git a/backend/src/resolvers/notifications.js b/backend/src/schema/resolvers/notifications.js similarity index 100% rename from backend/src/resolvers/notifications.js rename to backend/src/schema/resolvers/notifications.js diff --git a/backend/src/resolvers/notifications.spec.js b/backend/src/schema/resolvers/notifications.spec.js similarity index 100% rename from backend/src/resolvers/notifications.spec.js rename to backend/src/schema/resolvers/notifications.spec.js diff --git a/backend/src/resolvers/posts.js b/backend/src/schema/resolvers/posts.js similarity index 100% rename from backend/src/resolvers/posts.js rename to backend/src/schema/resolvers/posts.js diff --git a/backend/src/resolvers/posts.spec.js b/backend/src/schema/resolvers/posts.spec.js similarity index 100% rename from backend/src/resolvers/posts.spec.js rename to backend/src/schema/resolvers/posts.spec.js diff --git a/backend/src/resolvers/reports.js b/backend/src/schema/resolvers/reports.js similarity index 100% rename from backend/src/resolvers/reports.js rename to backend/src/schema/resolvers/reports.js diff --git a/backend/src/resolvers/reports.spec.js b/backend/src/schema/resolvers/reports.spec.js similarity index 100% rename from backend/src/resolvers/reports.spec.js rename to backend/src/schema/resolvers/reports.spec.js diff --git a/backend/src/resolvers/rewards.js b/backend/src/schema/resolvers/rewards.js similarity index 100% rename from backend/src/resolvers/rewards.js rename to backend/src/schema/resolvers/rewards.js diff --git a/backend/src/resolvers/rewards.spec.js b/backend/src/schema/resolvers/rewards.spec.js similarity index 100% rename from backend/src/resolvers/rewards.spec.js rename to backend/src/schema/resolvers/rewards.spec.js diff --git a/backend/src/resolvers/shout.js b/backend/src/schema/resolvers/shout.js similarity index 100% rename from backend/src/resolvers/shout.js rename to backend/src/schema/resolvers/shout.js diff --git a/backend/src/resolvers/shout.spec.js b/backend/src/schema/resolvers/shout.spec.js similarity index 100% rename from backend/src/resolvers/shout.spec.js rename to backend/src/schema/resolvers/shout.spec.js diff --git a/backend/src/resolvers/socialMedia.js b/backend/src/schema/resolvers/socialMedia.js similarity index 100% rename from backend/src/resolvers/socialMedia.js rename to backend/src/schema/resolvers/socialMedia.js diff --git a/backend/src/resolvers/socialMedia.spec.js b/backend/src/schema/resolvers/socialMedia.spec.js similarity index 100% rename from backend/src/resolvers/socialMedia.spec.js rename to backend/src/schema/resolvers/socialMedia.spec.js diff --git a/backend/src/resolvers/statistics.js b/backend/src/schema/resolvers/statistics.js similarity index 100% rename from backend/src/resolvers/statistics.js rename to backend/src/schema/resolvers/statistics.js diff --git a/backend/src/resolvers/user_management.js b/backend/src/schema/resolvers/user_management.js similarity index 98% rename from backend/src/resolvers/user_management.js rename to backend/src/schema/resolvers/user_management.js index e2fd5acf1..eb07a07b3 100644 --- a/backend/src/resolvers/user_management.js +++ b/backend/src/schema/resolvers/user_management.js @@ -1,4 +1,4 @@ -import encode from '../jwt/encode' +import encode from '../../jwt/encode' import bcrypt from 'bcryptjs' import { AuthenticationError } from 'apollo-server' import { neo4jgraphql } from 'neo4j-graphql-js' diff --git a/backend/src/resolvers/user_management.spec.js b/backend/src/schema/resolvers/user_management.spec.js similarity index 100% rename from backend/src/resolvers/user_management.spec.js rename to backend/src/schema/resolvers/user_management.spec.js diff --git a/backend/src/resolvers/users.js b/backend/src/schema/resolvers/users.js similarity index 100% rename from backend/src/resolvers/users.js rename to backend/src/schema/resolvers/users.js diff --git a/backend/src/resolvers/users.spec.js b/backend/src/schema/resolvers/users.spec.js similarity index 100% rename from backend/src/resolvers/users.spec.js rename to backend/src/schema/resolvers/users.spec.js diff --git a/backend/src/types/enum/BadgeStatus.gql b/backend/src/schema/types/enum/BadgeStatus.gql similarity index 100% rename from backend/src/types/enum/BadgeStatus.gql rename to backend/src/schema/types/enum/BadgeStatus.gql diff --git a/backend/src/types/enum/BadgeType.gql b/backend/src/schema/types/enum/BadgeType.gql similarity index 100% rename from backend/src/types/enum/BadgeType.gql rename to backend/src/schema/types/enum/BadgeType.gql diff --git a/backend/src/types/enum/UserGroup.gql b/backend/src/schema/types/enum/UserGroup.gql similarity index 100% rename from backend/src/types/enum/UserGroup.gql rename to backend/src/schema/types/enum/UserGroup.gql diff --git a/backend/src/types/enum/Visibility.gql b/backend/src/schema/types/enum/Visibility.gql similarity index 100% rename from backend/src/types/enum/Visibility.gql rename to backend/src/schema/types/enum/Visibility.gql diff --git a/backend/src/types/index.js b/backend/src/schema/types/index.js similarity index 100% rename from backend/src/types/index.js rename to backend/src/schema/types/index.js diff --git a/backend/src/types/scalar/Date.gql_ b/backend/src/schema/types/scalar/Date.gql_ similarity index 100% rename from backend/src/types/scalar/Date.gql_ rename to backend/src/schema/types/scalar/Date.gql_ diff --git a/backend/src/types/scalar/DateTime.gql_ b/backend/src/schema/types/scalar/DateTime.gql_ similarity index 100% rename from backend/src/types/scalar/DateTime.gql_ rename to backend/src/schema/types/scalar/DateTime.gql_ diff --git a/backend/src/types/scalar/Time.gql_ b/backend/src/schema/types/scalar/Time.gql_ similarity index 100% rename from backend/src/types/scalar/Time.gql_ rename to backend/src/schema/types/scalar/Time.gql_ diff --git a/backend/src/types/scalar/Upload.gql b/backend/src/schema/types/scalar/Upload.gql similarity index 100% rename from backend/src/types/scalar/Upload.gql rename to backend/src/schema/types/scalar/Upload.gql diff --git a/backend/src/types/schema.gql b/backend/src/schema/types/schema.gql similarity index 100% rename from backend/src/types/schema.gql rename to backend/src/schema/types/schema.gql diff --git a/backend/src/types/schema_full.gql_ b/backend/src/schema/types/schema_full.gql_ similarity index 100% rename from backend/src/types/schema_full.gql_ rename to backend/src/schema/types/schema_full.gql_ diff --git a/backend/src/types/type/Badge.gql b/backend/src/schema/types/type/Badge.gql similarity index 100% rename from backend/src/types/type/Badge.gql rename to backend/src/schema/types/type/Badge.gql diff --git a/backend/src/types/type/Category.gql b/backend/src/schema/types/type/Category.gql similarity index 100% rename from backend/src/types/type/Category.gql rename to backend/src/schema/types/type/Category.gql diff --git a/backend/src/types/type/Comment.gql b/backend/src/schema/types/type/Comment.gql similarity index 100% rename from backend/src/types/type/Comment.gql rename to backend/src/schema/types/type/Comment.gql diff --git a/backend/src/types/type/Post.gql b/backend/src/schema/types/type/Post.gql similarity index 100% rename from backend/src/types/type/Post.gql rename to backend/src/schema/types/type/Post.gql diff --git a/backend/src/types/type/Tag.gql b/backend/src/schema/types/type/Tag.gql similarity index 100% rename from backend/src/types/type/Tag.gql rename to backend/src/schema/types/type/Tag.gql diff --git a/backend/src/types/type/User.gql b/backend/src/schema/types/type/User.gql similarity index 100% rename from backend/src/types/type/User.gql rename to backend/src/schema/types/type/User.gql diff --git a/backend/src/server.js b/backend/src/server.js index 59261302f..3431320a7 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -1,48 +1,19 @@ -import { GraphQLServer } from 'graphql-yoga' -import { makeAugmentedSchema } from 'neo4j-graphql-js' -import { typeDefs, resolvers } from './graphql-schema' import express from 'express' -import dotenv from 'dotenv' +import helmet from 'helmet' +import { GraphQLServer } from 'graphql-yoga' +import CONFIG from './config' import mocks from './mocks' import middleware from './middleware' -import applyDirectives from './bootstrap/directives' -import applyScalars from './bootstrap/scalars' import { getDriver } from './bootstrap/neo4j' -import helmet from 'helmet' import decode from './jwt/decode' - -dotenv.config() -// check env and warn -const requiredEnvVars = ['MAPBOX_TOKEN', 'JWT_SECRET', 'PRIVATE_KEY_PASSPHRASE'] -requiredEnvVars.forEach(env => { - if (!process.env[env]) { - throw new Error(`ERROR: "${env}" env variable is missing.`) - } -}) +import schema from './schema' const driver = getDriver() -const debug = process.env.NODE_ENV !== 'production' && process.env.DEBUG === 'true' - -let schema = makeAugmentedSchema({ - typeDefs, - resolvers, - config: { - query: { - exclude: ['Notfication', 'Statistics', 'LoggedInUser'], - }, - mutation: { - exclude: ['Notfication', 'Statistics', 'LoggedInUser'], - }, - debug: debug, - }, -}) -schema = applyScalars(applyDirectives(schema)) const createServer = options => { const defaults = { context: async ({ request }) => { - const authorizationHeader = request.headers.authorization || '' - const user = await decode(driver, authorizationHeader) + const user = await decode(driver, request.headers.authorization) return { driver, user, @@ -52,11 +23,11 @@ const createServer = options => { }, } }, - schema: schema, - debug: debug, - tracing: debug, + schema, + debug: CONFIG.DEBUG, + tracing: CONFIG.DEBUG, middlewares: middleware(schema), - mocks: process.env.MOCK === 'true' ? mocks : false, + mocks: CONFIG.MOCKS ? mocks : false, } const server = new GraphQLServer(Object.assign({}, defaults, options)) diff --git a/deployment/human-connection/templates/configmap.template.yaml b/deployment/human-connection/templates/configmap.template.yaml index baf41661a..87b51a7d3 100644 --- a/deployment/human-connection/templates/configmap.template.yaml +++ b/deployment/human-connection/templates/configmap.template.yaml @@ -4,7 +4,7 @@ data: GRAPHQL_PORT: "4000" GRAPHQL_URI: "http://nitro-backend.human-connection:4000" - MOCK: "false" + MOCKS: "false" NEO4J_URI: "bolt://nitro-neo4j.human-connection:7687" NEO4J_USER: "neo4j" NEO4J_AUTH: "none" diff --git a/docker-compose.maintenance.yml b/docker-compose.maintenance.yml index 113b4492c..ad599e153 100644 --- a/docker-compose.maintenance.yml +++ b/docker-compose.maintenance.yml @@ -19,7 +19,7 @@ services: - GRAPHQL_URI=http://localhost:4000 - CLIENT_URI=http://localhost:3000 - JWT_SECRET=b/&&7b78BF&fv/Vd - - MOCK=false + - MOCKS=false - MAPBOX_TOKEN=pk.eyJ1IjoiaHVtYW4tY29ubmVjdGlvbiIsImEiOiJjajl0cnBubGoweTVlM3VwZ2lzNTNud3ZtIn0.KZ8KK9l70omjXbEkkbHGsQ - PRIVATE_KEY_PASSPHRASE=a7dsf78sadg87ad87sfagsadg78 - NEO4J_apoc_import_file_enabled=true diff --git a/docker-compose.yml b/docker-compose.yml index 896d1bef9..ca66217c2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -32,7 +32,7 @@ services: - GRAPHQL_URI=http://localhost:4000 - CLIENT_URI=http://localhost:3000 - JWT_SECRET=b/&&7b78BF&fv/Vd - - MOCK=false + - MOCKS=false - MAPBOX_TOKEN=pk.eyJ1IjoiaHVtYW4tY29ubmVjdGlvbiIsImEiOiJjajl0cnBubGoweTVlM3VwZ2lzNTNud3ZtIn0.KZ8KK9l70omjXbEkkbHGsQ - PRIVATE_KEY_PASSPHRASE=a7dsf78sadg87ad87sfagsadg78 neo4j: From 4fd2885b263666527b737d8294cbf3a9988a3085 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 13:19:08 +0200 Subject: [PATCH 02/13] reference global config --- backend/src/activitypub/ActivityPub.js | 6 ++---- backend/src/activitypub/security/index.js | 5 +++-- backend/src/activitypub/utils/index.js | 3 ++- backend/src/bootstrap/neo4j.js | 7 ++++--- backend/src/config/index.js | 15 +++++++++++++++ backend/src/index.js | 7 ++++--- backend/src/jwt/decode.js | 3 ++- backend/src/jwt/encode.js | 9 +++++---- backend/src/middleware/index.js | 6 +++--- backend/src/middleware/nodes/locations.js | 6 ++++-- .../src/schema/resolvers/user_management.spec.js | 3 ++- backend/src/seed/reset-db.js | 5 +++-- 12 files changed, 49 insertions(+), 26 deletions(-) diff --git a/backend/src/activitypub/ActivityPub.js b/backend/src/activitypub/ActivityPub.js index da1056362..aa447a2d7 100644 --- a/backend/src/activitypub/ActivityPub.js +++ b/backend/src/activitypub/ActivityPub.js @@ -7,6 +7,7 @@ import router from './routes' import dotenv from 'dotenv' import Collections from './Collections' import uuid from 'uuid/v4' +import CONFIG from '../config' const debug = require('debug')('ea') let activityPub = null @@ -23,10 +24,7 @@ export default class ActivityPub { static init(server) { if (!activityPub) { dotenv.config() - activityPub = new ActivityPub( - process.env.CLIENT_URI || 'http://localhost:3000', - process.env.GRAPHQL_URI || 'http://localhost:4000', - ) + activityPub = new ActivityPub(CONFIG.CLIENT_URI, CONFIG.GRAPHQL_URI) // integrate into running graphql express server server.express.set('ap', activityPub) diff --git a/backend/src/activitypub/security/index.js b/backend/src/activitypub/security/index.js index 7f619acbe..2ecdec022 100644 --- a/backend/src/activitypub/security/index.js +++ b/backend/src/activitypub/security/index.js @@ -2,12 +2,13 @@ import dotenv from 'dotenv' import { resolve } from 'path' import crypto from 'crypto' import request from 'request' +import CONFIG from './../../config' const debug = require('debug')('ea:security') dotenv.config({ path: resolve('src', 'activitypub', '.env') }) export function generateRsaKeyPair(options = {}) { - const { passphrase = process.env.PRIVATE_KEY_PASSPHRASE } = options + const { passphrase = CONFIG.PRIVATE_KEY_PASSPHRASE } = options return crypto.generateKeyPairSync('rsa', { modulusLength: 4096, publicKeyEncoding: { @@ -31,7 +32,7 @@ export function createSignature(options) { url, headers = {}, algorithm = 'rsa-sha256', - passphrase = process.env.PRIVATE_KEY_PASSPHRASE, + passphrase = CONFIG.PRIVATE_KEY_PASSPHRASE, } = options if (!SUPPORTED_HASH_ALGORITHMS.includes(algorithm)) { throw Error(`SIGNING: Unsupported hashing algorithm = ${algorithm}`) diff --git a/backend/src/activitypub/utils/index.js b/backend/src/activitypub/utils/index.js index ee7ae2606..3927f4056 100644 --- a/backend/src/activitypub/utils/index.js +++ b/backend/src/activitypub/utils/index.js @@ -2,6 +2,7 @@ import { activityPub } from '../ActivityPub' import gql from 'graphql-tag' import { createSignature } from '../security' import request from 'request' +import CONFIG from './../../config' const debug = require('debug')('ea:utils') export function extractNameFromId(uri) { @@ -38,7 +39,7 @@ export function throwErrorIfApolloErrorOccurred(result) { export function signAndSend(activity, fromName, targetDomain, url) { // fix for development: replace with http url = url.indexOf('localhost') > -1 ? url.replace('https', 'http') : url - debug(`passhprase = ${process.env.PRIVATE_KEY_PASSPHRASE}`) + debug(`passhprase = ${CONFIG.PRIVATE_KEY_PASSPHRASE}`) return new Promise(async (resolve, reject) => { debug('inside signAndSend') // get the private key diff --git a/backend/src/bootstrap/neo4j.js b/backend/src/bootstrap/neo4j.js index 292983359..15c9c4533 100644 --- a/backend/src/bootstrap/neo4j.js +++ b/backend/src/bootstrap/neo4j.js @@ -1,5 +1,6 @@ import { v1 as neo4j } from 'neo4j-driver' import dotenv from 'dotenv' +import CONFIG from './../config' dotenv.config() @@ -7,9 +8,9 @@ let driver export function getDriver(options = {}) { const { - uri = process.env.NEO4J_URI || 'bolt://localhost:7687', - username = process.env.NEO4J_USERNAME || 'neo4j', - password = process.env.NEO4J_PASSWORD || 'neo4j', + uri = CONFIG.NEO4J_URI, + username = CONFIG.NEO4J_USERNAME, + password = CONFIG.NEO4J_PASSWORD, } = options if (!driver) { driver = neo4j.driver(uri, neo4j.auth.basic(username, password)) diff --git a/backend/src/config/index.js b/backend/src/config/index.js index 7a0387560..aa8b3a5dc 100644 --- a/backend/src/config/index.js +++ b/backend/src/config/index.js @@ -8,9 +8,22 @@ const requiredConfigs = { PRIVATE_KEY_PASSPHRASE: process.env.PRIVATE_KEY_PASSPHRASE, } +const neo4jConfigs = { + NEO4J_URI: process.env.NEO4J_URI || 'bolt://localhost:7687', + NEO4J_USERNAME: process.env.NEO4J_USERNAME || 'neo4j', + NEO4J_PASSWORD: process.env.NEO4J_PASSWORD || 'neo4j', +} + +const serverConfigs = { + GRAPHQL_PORT: process.env.GRAPHQL_PORT || 4000, + CLIENT_URI: process.env.CLIENT_URI || 'http://localhost:3000', + GRAPHQL_URI: process.env.GRAPHQL_URI || 'http://localhost:4000', +} + const developmentConfigs = { DEBUG: process.env.NODE_ENV !== 'production' && process.env.DEBUG === 'true', MOCKS: process.env.MOCKS === 'true', + DISABLED_MIDDLEWARES: process.env.DISABLED_MIDDLEWARES || '', } // check required configs and throw error @@ -22,5 +35,7 @@ Object.entries(requiredConfigs).map(entry => { export default { ...requiredConfigs, + ...neo4jConfigs, + ...serverConfigs, ...developmentConfigs, } diff --git a/backend/src/index.js b/backend/src/index.js index 2095d171f..f28e58947 100644 --- a/backend/src/index.js +++ b/backend/src/index.js @@ -1,17 +1,18 @@ import createServer from './server' import ActivityPub from './activitypub/ActivityPub' +import CONFIG from './config' const serverConfig = { - port: process.env.GRAPHQL_PORT || 4000, + port: CONFIG.GRAPHQL_PORT, // cors: { // credentials: true, - // origin: [process.env.CLIENT_URI] // your frontend url. + // origin: [CONFIG.CLIENT_URI] // your frontend url. // } } const server = createServer() server.start(serverConfig, options => { /* eslint-disable-next-line no-console */ - console.log(`GraphQLServer ready at ${process.env.GRAPHQL_URI} 🚀`) + console.log(`GraphQLServer ready at ${CONFIG.GRAPHQL_URI} 🚀`) ActivityPub.init(server) }) diff --git a/backend/src/jwt/decode.js b/backend/src/jwt/decode.js index d4485952d..b98357103 100644 --- a/backend/src/jwt/decode.js +++ b/backend/src/jwt/decode.js @@ -1,11 +1,12 @@ import jwt from 'jsonwebtoken' +import CONFIG from './../config' export default async (driver, authorizationHeader) => { if (!authorizationHeader) return null const token = authorizationHeader.replace('Bearer ', '') let id = null try { - const decoded = await jwt.verify(token, process.env.JWT_SECRET) + const decoded = await jwt.verify(token, CONFIG.JWT_SECRET) id = decoded.sub } catch (err) { return null diff --git a/backend/src/jwt/encode.js b/backend/src/jwt/encode.js index 49aa17bd0..97c6dcd66 100644 --- a/backend/src/jwt/encode.js +++ b/backend/src/jwt/encode.js @@ -1,15 +1,16 @@ import jwt from 'jsonwebtoken' import ms from 'ms' +import CONFIG from './../config' // Generate an Access Token for the given User ID export default function encode(user) { - const token = jwt.sign(user, process.env.JWT_SECRET, { + const token = jwt.sign(user, CONFIG.JWT_SECRET, { expiresIn: ms('1d'), - issuer: process.env.GRAPHQL_URI, - audience: process.env.CLIENT_URI, + issuer: CONFIG.GRAPHQL_URI, + audience: CONFIG.CLIENT_URI, subject: user.id.toString(), }) - // jwt.verifySignature(token, process.env.JWT_SECRET, (err, data) => { + // jwt.verifySignature(token, CONFIG.JWT_SECRET, (err, data) => { // console.log('token verification:', err, data) // }) return token diff --git a/backend/src/middleware/index.js b/backend/src/middleware/index.js index bef6ceac9..cdc1d298c 100644 --- a/backend/src/middleware/index.js +++ b/backend/src/middleware/index.js @@ -12,6 +12,7 @@ import includedFieldsMiddleware from './includedFieldsMiddleware' import orderByMiddleware from './orderByMiddleware' import validationMiddleware from './validation' import notificationsMiddleware from './notifications' +import CONFIG from './../config' export default schema => { let middleware = [ @@ -31,9 +32,8 @@ export default schema => { // add permisions middleware at the first position (unless we're seeding) // NOTE: DO NOT SET THE PERMISSION FLAT YOUR SELF - if (process.env.NODE_ENV !== 'production') { - const DISABLED_MIDDLEWARES = process.env.DISABLED_MIDDLEWARES || '' - const disabled = DISABLED_MIDDLEWARES.split(',') + if (CONFIG.DEBUG) { + const disabled = CONFIG.DISABLED_MIDDLEWARES.split(',') if (!disabled.includes('activityPub')) middleware.unshift(activityPubMiddleware) if (!disabled.includes('permissions')) middleware.unshift(permissionsMiddleware.generate(schema)) diff --git a/backend/src/middleware/nodes/locations.js b/backend/src/middleware/nodes/locations.js index a0adeb57f..62d1e3a65 100644 --- a/backend/src/middleware/nodes/locations.js +++ b/backend/src/middleware/nodes/locations.js @@ -2,6 +2,7 @@ import request from 'request' import { UserInputError } from 'apollo-server' import isEmpty from 'lodash/isEmpty' import asyncForEach from '../../helpers/asyncForEach' +import CONFIG from './../../config' const fetch = url => { return new Promise((resolve, reject) => { @@ -58,11 +59,12 @@ const createOrUpdateLocations = async (userId, locationName, driver) => { if (isEmpty(locationName)) { return } - const mapboxToken = process.env.MAPBOX_TOKEN const res = await fetch( `https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent( locationName, - )}.json?access_token=${mapboxToken}&types=region,place,country&language=${locales.join(',')}`, + )}.json?access_token=${CONFIG.MAPBOX_TOKEN}&types=region,place,country&language=${locales.join( + ',', + )}`, ) if (!res || !res.features || !res.features[0]) { diff --git a/backend/src/schema/resolvers/user_management.spec.js b/backend/src/schema/resolvers/user_management.spec.js index 9dff9e388..690d93f86 100644 --- a/backend/src/schema/resolvers/user_management.spec.js +++ b/backend/src/schema/resolvers/user_management.spec.js @@ -3,6 +3,7 @@ import Factory from '../seed/factories' import { GraphQLClient, request } from 'graphql-request' import jwt from 'jsonwebtoken' import { host, login } from '../jest/helpers' +import CONFIG from './config' const factory = Factory() @@ -185,7 +186,7 @@ describe('login', () => { }), ) const token = data.login - jwt.verify(token, process.env.JWT_SECRET, (err, data) => { + jwt.verify(token, CONFIG.JWT_SECRET, (err, data) => { expect(data.email).toEqual('test@example.org') expect(err).toBeNull() }) diff --git a/backend/src/seed/reset-db.js b/backend/src/seed/reset-db.js index 3197a6e18..095db240c 100644 --- a/backend/src/seed/reset-db.js +++ b/backend/src/seed/reset-db.js @@ -1,10 +1,11 @@ import { cleanDatabase } from './factories' import dotenv from 'dotenv' +import CONFIG from './config' dotenv.config() -if (process.env.NODE_ENV === 'production') { - throw new Error(`YOU CAN'T CLEAN THE DATABASE WITH NODE_ENV=${process.env.NODE_ENV}`) +if (!CONFIG.DEBUG) { + throw new Error(`YOU CAN'T CLEAN THE DATABASE WITH DEBUG=${CONFIG.DEBUG}`) } ;(async function() { From caa6a65f999f2480df0e72b871f159b90936f087 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 18:47:00 +0200 Subject: [PATCH 03/13] removed dotenv.config calls --- backend/src/activitypub/ActivityPub.js | 1 - backend/src/activitypub/security/index.js | 7 ++++--- backend/src/bootstrap/neo4j.js | 3 --- backend/src/middleware/activityPubMiddleware.js | 2 -- backend/src/middleware/userMiddleware.js | 4 ---- backend/src/seed/reset-db.js | 3 --- 6 files changed, 4 insertions(+), 16 deletions(-) diff --git a/backend/src/activitypub/ActivityPub.js b/backend/src/activitypub/ActivityPub.js index aa447a2d7..2667fd572 100644 --- a/backend/src/activitypub/ActivityPub.js +++ b/backend/src/activitypub/ActivityPub.js @@ -23,7 +23,6 @@ export default class ActivityPub { static init(server) { if (!activityPub) { - dotenv.config() activityPub = new ActivityPub(CONFIG.CLIENT_URI, CONFIG.GRAPHQL_URI) // integrate into running graphql express server diff --git a/backend/src/activitypub/security/index.js b/backend/src/activitypub/security/index.js index 2ecdec022..9b48b7ed9 100644 --- a/backend/src/activitypub/security/index.js +++ b/backend/src/activitypub/security/index.js @@ -1,11 +1,12 @@ -import dotenv from 'dotenv' -import { resolve } from 'path' +// import dotenv from 'dotenv' +// import { resolve } from 'path' import crypto from 'crypto' import request from 'request' import CONFIG from './../../config' const debug = require('debug')('ea:security') -dotenv.config({ path: resolve('src', 'activitypub', '.env') }) +// TODO Does this reference a local config? Why? +// dotenv.config({ path: resolve('src', 'activitypub', '.env') }) export function generateRsaKeyPair(options = {}) { const { passphrase = CONFIG.PRIVATE_KEY_PASSPHRASE } = options diff --git a/backend/src/bootstrap/neo4j.js b/backend/src/bootstrap/neo4j.js index 15c9c4533..bfa68acf3 100644 --- a/backend/src/bootstrap/neo4j.js +++ b/backend/src/bootstrap/neo4j.js @@ -1,9 +1,6 @@ import { v1 as neo4j } from 'neo4j-driver' -import dotenv from 'dotenv' import CONFIG from './../config' -dotenv.config() - let driver export function getDriver(options = {}) { diff --git a/backend/src/middleware/activityPubMiddleware.js b/backend/src/middleware/activityPubMiddleware.js index 43da21e26..f3ced42f9 100644 --- a/backend/src/middleware/activityPubMiddleware.js +++ b/backend/src/middleware/activityPubMiddleware.js @@ -1,10 +1,8 @@ import { generateRsaKeyPair } from '../activitypub/security' import { activityPub } from '../activitypub/ActivityPub' import as from 'activitystrea.ms' -import dotenv from 'dotenv' const debug = require('debug')('backend:schema') -dotenv.config() export default { Mutation: { diff --git a/backend/src/middleware/userMiddleware.js b/backend/src/middleware/userMiddleware.js index 079ba310a..29e512ebd 100644 --- a/backend/src/middleware/userMiddleware.js +++ b/backend/src/middleware/userMiddleware.js @@ -1,9 +1,5 @@ -import dotenv from 'dotenv' - import createOrUpdateLocations from './nodes/locations' -dotenv.config() - export default { Mutation: { CreateUser: async (resolve, root, args, context, info) => { diff --git a/backend/src/seed/reset-db.js b/backend/src/seed/reset-db.js index 095db240c..bcc29d78f 100644 --- a/backend/src/seed/reset-db.js +++ b/backend/src/seed/reset-db.js @@ -1,9 +1,6 @@ import { cleanDatabase } from './factories' -import dotenv from 'dotenv' import CONFIG from './config' -dotenv.config() - if (!CONFIG.DEBUG) { throw new Error(`YOU CAN'T CLEAN THE DATABASE WITH DEBUG=${CONFIG.DEBUG}`) } From 3adb8d0f64913a8df5da8db7d8ea8f84fd1486c8 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 19:29:14 +0200 Subject: [PATCH 04/13] lint fixes --- backend/src/activitypub/ActivityPub.js | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/activitypub/ActivityPub.js b/backend/src/activitypub/ActivityPub.js index 2667fd572..12671f330 100644 --- a/backend/src/activitypub/ActivityPub.js +++ b/backend/src/activitypub/ActivityPub.js @@ -4,7 +4,6 @@ import request from 'request' import as from 'activitystrea.ms' import NitroDataSource from './NitroDataSource' import router from './routes' -import dotenv from 'dotenv' import Collections from './Collections' import uuid from 'uuid/v4' import CONFIG from '../config' From 177e33c022aab11aea63d12e61c2e5877cd5fc2a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 19:34:58 +0200 Subject: [PATCH 05/13] fixed spec include paths --- backend/src/middleware/orderByMiddleware.spec.js | 4 ++-- backend/src/middleware/permissionsMiddleware.spec.js | 4 ++-- backend/src/middleware/slugifyMiddleware.spec.js | 4 ++-- backend/src/middleware/softDeleteMiddleware.spec.js | 4 ++-- backend/src/schema/resolvers/badges.spec.js | 4 ++-- backend/src/schema/resolvers/comments.spec.js | 4 ++-- backend/src/schema/resolvers/follow.spec.js | 4 ++-- backend/src/schema/resolvers/moderation.spec.js | 4 ++-- backend/src/schema/resolvers/notifications.spec.js | 4 ++-- backend/src/schema/resolvers/posts.spec.js | 4 ++-- backend/src/schema/resolvers/reports.spec.js | 4 ++-- backend/src/schema/resolvers/rewards.spec.js | 4 ++-- backend/src/schema/resolvers/shout.spec.js | 4 ++-- backend/src/schema/resolvers/socialMedia.spec.js | 4 ++-- backend/src/schema/resolvers/user_management.spec.js | 6 +++--- backend/src/schema/resolvers/users.spec.js | 4 ++-- 16 files changed, 33 insertions(+), 33 deletions(-) diff --git a/backend/src/middleware/orderByMiddleware.spec.js b/backend/src/middleware/orderByMiddleware.spec.js index 658447160..af26dd233 100644 --- a/backend/src/middleware/orderByMiddleware.spec.js +++ b/backend/src/middleware/orderByMiddleware.spec.js @@ -1,5 +1,5 @@ -import Factory from '../seed/factories' -import { host } from '../jest/helpers' +import Factory from '../../seed/factories' +import { host } from '../../jest/helpers' import { GraphQLClient } from 'graphql-request' let client diff --git a/backend/src/middleware/permissionsMiddleware.spec.js b/backend/src/middleware/permissionsMiddleware.spec.js index fc1815631..b15e0f281 100644 --- a/backend/src/middleware/permissionsMiddleware.spec.js +++ b/backend/src/middleware/permissionsMiddleware.spec.js @@ -1,5 +1,5 @@ -import Factory from '../seed/factories' -import { host, login } from '../jest/helpers' +import Factory from '../../seed/factories' +import { host, login } from '../../jest/helpers' import { GraphQLClient } from 'graphql-request' const factory = Factory() diff --git a/backend/src/middleware/slugifyMiddleware.spec.js b/backend/src/middleware/slugifyMiddleware.spec.js index 7ca4ec193..a90baec39 100644 --- a/backend/src/middleware/slugifyMiddleware.spec.js +++ b/backend/src/middleware/slugifyMiddleware.spec.js @@ -1,5 +1,5 @@ -import Factory from '../seed/factories' -import { host, login } from '../jest/helpers' +import Factory from '../../seed/factories' +import { host, login } from '../../jest/helpers' import { GraphQLClient } from 'graphql-request' let authenticatedClient diff --git a/backend/src/middleware/softDeleteMiddleware.spec.js b/backend/src/middleware/softDeleteMiddleware.spec.js index 4265599dd..d78171c7c 100644 --- a/backend/src/middleware/softDeleteMiddleware.spec.js +++ b/backend/src/middleware/softDeleteMiddleware.spec.js @@ -1,5 +1,5 @@ -import Factory from '../seed/factories' -import { host, login } from '../jest/helpers' +import Factory from '../../seed/factories' +import { host, login } from '../../jest/helpers' import { GraphQLClient } from 'graphql-request' const factory = Factory() diff --git a/backend/src/schema/resolvers/badges.spec.js b/backend/src/schema/resolvers/badges.spec.js index 8383d9838..a0dbafe00 100644 --- a/backend/src/schema/resolvers/badges.spec.js +++ b/backend/src/schema/resolvers/badges.spec.js @@ -1,6 +1,6 @@ -import Factory from '../seed/factories' import { GraphQLClient } from 'graphql-request' -import { host, login } from '../jest/helpers' +import Factory from '../../seed/factories' +import { host, login } from '../../jest/helpers' const factory = Factory() let client diff --git a/backend/src/schema/resolvers/comments.spec.js b/backend/src/schema/resolvers/comments.spec.js index 451c559f1..9fc162c6f 100644 --- a/backend/src/schema/resolvers/comments.spec.js +++ b/backend/src/schema/resolvers/comments.spec.js @@ -1,6 +1,6 @@ -import Factory from '../seed/factories' import { GraphQLClient } from 'graphql-request' -import { host, login } from '../jest/helpers' +import Factory from '../../seed/factories' +import { host, login } from '../../jest/helpers' const factory = Factory() let client diff --git a/backend/src/schema/resolvers/follow.spec.js b/backend/src/schema/resolvers/follow.spec.js index 4a361b03d..d29e17938 100644 --- a/backend/src/schema/resolvers/follow.spec.js +++ b/backend/src/schema/resolvers/follow.spec.js @@ -1,6 +1,6 @@ -import Factory from '../seed/factories' import { GraphQLClient } from 'graphql-request' -import { host, login } from '../jest/helpers' +import Factory from '../../seed/factories' +import { host, login } from '../../jest/helpers' const factory = Factory() let clientUser1 diff --git a/backend/src/schema/resolvers/moderation.spec.js b/backend/src/schema/resolvers/moderation.spec.js index 835e9e535..b1dec603b 100644 --- a/backend/src/schema/resolvers/moderation.spec.js +++ b/backend/src/schema/resolvers/moderation.spec.js @@ -1,6 +1,6 @@ -import Factory from '../seed/factories' import { GraphQLClient } from 'graphql-request' -import { host, login } from '../jest/helpers' +import Factory from '../../seed/factories' +import { host, login } from '../../jest/helpers' const factory = Factory() let client diff --git a/backend/src/schema/resolvers/notifications.spec.js b/backend/src/schema/resolvers/notifications.spec.js index 37d8c83ff..3876a4be3 100644 --- a/backend/src/schema/resolvers/notifications.spec.js +++ b/backend/src/schema/resolvers/notifications.spec.js @@ -1,6 +1,6 @@ -import Factory from '../seed/factories' import { GraphQLClient } from 'graphql-request' -import { host, login } from '../jest/helpers' +import Factory from '../../seed/factories' +import { host, login } from '../../jest/helpers' const factory = Factory() let client diff --git a/backend/src/schema/resolvers/posts.spec.js b/backend/src/schema/resolvers/posts.spec.js index e4175ff09..9e2ec70a2 100644 --- a/backend/src/schema/resolvers/posts.spec.js +++ b/backend/src/schema/resolvers/posts.spec.js @@ -1,6 +1,6 @@ -import Factory from '../seed/factories' import { GraphQLClient } from 'graphql-request' -import { host, login } from '../jest/helpers' +import Factory from '../../seed/factories' +import { host, login } from '../../jest/helpers' const factory = Factory() let client diff --git a/backend/src/schema/resolvers/reports.spec.js b/backend/src/schema/resolvers/reports.spec.js index 19b5e6f9e..6b996b016 100644 --- a/backend/src/schema/resolvers/reports.spec.js +++ b/backend/src/schema/resolvers/reports.spec.js @@ -1,6 +1,6 @@ -import Factory from '../seed/factories' import { GraphQLClient } from 'graphql-request' -import { host, login } from '../jest/helpers' +import Factory from '../../seed/factories' +import { host, login } from '../../jest/helpers' const factory = Factory() diff --git a/backend/src/schema/resolvers/rewards.spec.js b/backend/src/schema/resolvers/rewards.spec.js index e2b67b25d..2bdd9a39b 100644 --- a/backend/src/schema/resolvers/rewards.spec.js +++ b/backend/src/schema/resolvers/rewards.spec.js @@ -1,6 +1,6 @@ -import Factory from '../seed/factories' import { GraphQLClient } from 'graphql-request' -import { host, login } from '../jest/helpers' +import Factory from '../../seed/factories' +import { host, login } from '../../jest/helpers' const factory = Factory() diff --git a/backend/src/schema/resolvers/shout.spec.js b/backend/src/schema/resolvers/shout.spec.js index 46570efa0..a94f7ca0b 100644 --- a/backend/src/schema/resolvers/shout.spec.js +++ b/backend/src/schema/resolvers/shout.spec.js @@ -1,6 +1,6 @@ -import Factory from '../seed/factories' import { GraphQLClient } from 'graphql-request' -import { host, login } from '../jest/helpers' +import Factory from '../../seed/factories' +import { host, login } from '../../jest/helpers' const factory = Factory() let clientUser1, clientUser2 diff --git a/backend/src/schema/resolvers/socialMedia.spec.js b/backend/src/schema/resolvers/socialMedia.spec.js index 5143587b1..231598062 100644 --- a/backend/src/schema/resolvers/socialMedia.spec.js +++ b/backend/src/schema/resolvers/socialMedia.spec.js @@ -1,6 +1,6 @@ -import Factory from '../seed/factories' import { GraphQLClient } from 'graphql-request' -import { host, login } from '../jest/helpers' +import Factory from '../../seed/factories' +import { host, login } from '../../jest/helpers' const factory = Factory() diff --git a/backend/src/schema/resolvers/user_management.spec.js b/backend/src/schema/resolvers/user_management.spec.js index 690d93f86..cf648a6bd 100644 --- a/backend/src/schema/resolvers/user_management.spec.js +++ b/backend/src/schema/resolvers/user_management.spec.js @@ -1,9 +1,9 @@ import gql from 'graphql-tag' -import Factory from '../seed/factories' import { GraphQLClient, request } from 'graphql-request' import jwt from 'jsonwebtoken' -import { host, login } from '../jest/helpers' -import CONFIG from './config' +import CONFIG from './../../config' +import Factory from '../../seed/factories' +import { host, login } from '../../jest/helpers' const factory = Factory() diff --git a/backend/src/schema/resolvers/users.spec.js b/backend/src/schema/resolvers/users.spec.js index 22096b6c8..a5c50f4f9 100644 --- a/backend/src/schema/resolvers/users.spec.js +++ b/backend/src/schema/resolvers/users.spec.js @@ -1,6 +1,6 @@ import { GraphQLClient } from 'graphql-request' -import { host } from '../jest/helpers' -import Factory from '../seed/factories' +import { host } from '../../jest/helpers' +import Factory from '../../seed/factories' const factory = Factory() let client From 164f3b687821f706fba824754b0d66b21c65dc5b Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 22:57:46 +0200 Subject: [PATCH 06/13] fixed lint --- backend/src/schema/resolvers/socialMedia.spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/schema/resolvers/socialMedia.spec.js b/backend/src/schema/resolvers/socialMedia.spec.js index 18c12851c..38850761c 100644 --- a/backend/src/schema/resolvers/socialMedia.spec.js +++ b/backend/src/schema/resolvers/socialMedia.spec.js @@ -3,7 +3,6 @@ import { GraphQLClient } from 'graphql-request' import Factory from '../../seed/factories' import { host, login } from '../../jest/helpers' - const factory = Factory() describe('SocialMedia', () => { From edd71b782597a3d9f190746feb2dd39329a89977 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 23:00:27 +0200 Subject: [PATCH 07/13] DISABLE_MIDDLEWARES now requires DEBUG=true --- backend/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/package.json b/backend/package.json index e2abde493..573031606 100644 --- a/backend/package.json +++ b/backend/package.json @@ -11,7 +11,7 @@ "lint": "eslint src --config .eslintrc.js", "test": "run-s test:jest test:cucumber", "test:before:server": "cross-env GRAPHQL_URI=http://localhost:4123 GRAPHQL_PORT=4123 yarn run dev 2> /dev/null", - "test:before:seeder": "cross-env GRAPHQL_URI=http://localhost:4001 GRAPHQL_PORT=4001 DISABLED_MIDDLEWARES=permissions,activityPub yarn run dev 2> /dev/null", + "test:before:seeder": "cross-env GRAPHQL_URI=http://localhost:4001 GRAPHQL_PORT=4001 DEBUG=true DISABLED_MIDDLEWARES=permissions,activityPub yarn run dev 2> /dev/null", "test:jest:cmd": "wait-on tcp:4001 tcp:4123 && jest --forceExit --detectOpenHandles --runInBand", "test:cucumber:cmd": "wait-on tcp:4001 tcp:4123 && cucumber-js --require-module @babel/register --exit test/", "test:jest:cmd:debug": "wait-on tcp:4001 tcp:4123 && node --inspect-brk ./node_modules/.bin/jest -i --forceExit --detectOpenHandles --runInBand", @@ -20,7 +20,7 @@ "test:jest:debug": "run-p --race test:before:* 'test:jest:cmd:debug {@}' --", "db:script:seed": "wait-on tcp:4001 && babel-node src/seed/seed-db.js", "db:reset": "babel-node src/seed/reset-db.js", - "db:seed": "cross-env GRAPHQL_URI=http://localhost:4001 GRAPHQL_PORT=4001 DISABLED_MIDDLEWARES=permissions run-p --race dev db:script:seed" + "db:seed": "cross-env GRAPHQL_URI=http://localhost:4001 GRAPHQL_PORT=4001 DEBUG=true DISABLED_MIDDLEWARES=permissions run-p --race dev db:script:seed" }, "author": "Human Connection gGmbH", "license": "MIT", @@ -109,4 +109,4 @@ "prettier": "~1.17.1", "supertest": "~4.0.2" } -} +} \ No newline at end of file From edcc5adb41f5f4daca0416cfed6f8b892634c460 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 23:11:48 +0200 Subject: [PATCH 08/13] corrected paths and include order --- backend/src/middleware/orderByMiddleware.spec.js | 4 ++-- backend/src/middleware/permissionsMiddleware.spec.js | 4 ++-- backend/src/middleware/slugifyMiddleware.spec.js | 4 ++-- backend/src/middleware/softDeleteMiddleware.spec.js | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/src/middleware/orderByMiddleware.spec.js b/backend/src/middleware/orderByMiddleware.spec.js index af26dd233..450220cd6 100644 --- a/backend/src/middleware/orderByMiddleware.spec.js +++ b/backend/src/middleware/orderByMiddleware.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' -import { host } from '../../jest/helpers' import { GraphQLClient } from 'graphql-request' +import Factory from '../seed/factories' +import { host } from '../jest/helpers' let client let headers diff --git a/backend/src/middleware/permissionsMiddleware.spec.js b/backend/src/middleware/permissionsMiddleware.spec.js index b15e0f281..6cf9dc302 100644 --- a/backend/src/middleware/permissionsMiddleware.spec.js +++ b/backend/src/middleware/permissionsMiddleware.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' -import { host, login } from '../../jest/helpers' import { GraphQLClient } from 'graphql-request' +import Factory from '../seed/factories' +import { host, login } from '../jest/helpers' const factory = Factory() diff --git a/backend/src/middleware/slugifyMiddleware.spec.js b/backend/src/middleware/slugifyMiddleware.spec.js index a90baec39..79bba0a5d 100644 --- a/backend/src/middleware/slugifyMiddleware.spec.js +++ b/backend/src/middleware/slugifyMiddleware.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' -import { host, login } from '../../jest/helpers' import { GraphQLClient } from 'graphql-request' +import Factory from '../seed/factories' +import { host, login } from '../jest/helpers' let authenticatedClient let headers diff --git a/backend/src/middleware/softDeleteMiddleware.spec.js b/backend/src/middleware/softDeleteMiddleware.spec.js index d78171c7c..388f44a3c 100644 --- a/backend/src/middleware/softDeleteMiddleware.spec.js +++ b/backend/src/middleware/softDeleteMiddleware.spec.js @@ -1,6 +1,6 @@ -import Factory from '../../seed/factories' -import { host, login } from '../../jest/helpers' import { GraphQLClient } from 'graphql-request' +import Factory from '../seed/factories' +import { host, login } from '../jest/helpers' const factory = Factory() let client From a1db7fa2013632fea215a38e37ce3bac200e809a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 23:13:42 +0200 Subject: [PATCH 09/13] corrected config include --- backend/src/seed/reset-db.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/seed/reset-db.js b/backend/src/seed/reset-db.js index bcc29d78f..5f4319f73 100644 --- a/backend/src/seed/reset-db.js +++ b/backend/src/seed/reset-db.js @@ -1,5 +1,5 @@ import { cleanDatabase } from './factories' -import CONFIG from './config' +import CONFIG from './../config' if (!CONFIG.DEBUG) { throw new Error(`YOU CAN'T CLEAN THE DATABASE WITH DEBUG=${CONFIG.DEBUG}`) From 15bfabcefd55afa775dc34b7eccccc0ae7978cbd Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 23:17:58 +0200 Subject: [PATCH 10/13] check if config variables are present only when server is started --- backend/src/config/index.js | 15 ++++----------- backend/src/server.js | 7 +++++++ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/backend/src/config/index.js b/backend/src/config/index.js index aa8b3a5dc..5cc455495 100644 --- a/backend/src/config/index.js +++ b/backend/src/config/index.js @@ -2,37 +2,30 @@ import dotenv from 'dotenv' dotenv.config() -const requiredConfigs = { +export const requiredConfigs = { MAPBOX_TOKEN: process.env.MAPBOX_TOKEN, JWT_SECRET: process.env.JWT_SECRET, PRIVATE_KEY_PASSPHRASE: process.env.PRIVATE_KEY_PASSPHRASE, } -const neo4jConfigs = { +export const neo4jConfigs = { NEO4J_URI: process.env.NEO4J_URI || 'bolt://localhost:7687', NEO4J_USERNAME: process.env.NEO4J_USERNAME || 'neo4j', NEO4J_PASSWORD: process.env.NEO4J_PASSWORD || 'neo4j', } -const serverConfigs = { +export const serverConfigs = { GRAPHQL_PORT: process.env.GRAPHQL_PORT || 4000, CLIENT_URI: process.env.CLIENT_URI || 'http://localhost:3000', GRAPHQL_URI: process.env.GRAPHQL_URI || 'http://localhost:4000', } -const developmentConfigs = { +export const developmentConfigs = { DEBUG: process.env.NODE_ENV !== 'production' && process.env.DEBUG === 'true', MOCKS: process.env.MOCKS === 'true', DISABLED_MIDDLEWARES: process.env.DISABLED_MIDDLEWARES || '', } -// check required configs and throw error -Object.entries(requiredConfigs).map(entry => { - if (!entry[1]) { - throw new Error(`ERROR: "${entry[0]}" env variable is missing.`) - } -}) - export default { ...requiredConfigs, ...neo4jConfigs, diff --git a/backend/src/server.js b/backend/src/server.js index 3431320a7..d09d94220 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -8,6 +8,13 @@ import { getDriver } from './bootstrap/neo4j' import decode from './jwt/decode' import schema from './schema' +// check required configs and throw error +Object.entries(CONFIG.requiredConfigs).map(entry => { + if (!entry[1]) { + throw new Error(`ERROR: "${entry[0]}" env variable is missing.`) + } +}) + const driver = getDriver() const createServer = options => { From 1a264a26623f8d4b0a36ae15b8a70847674f758a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 23:19:50 +0200 Subject: [PATCH 11/13] fixed config check for server --- backend/src/server.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/src/server.js b/backend/src/server.js index d09d94220..15950821f 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -1,7 +1,7 @@ import express from 'express' import helmet from 'helmet' import { GraphQLServer } from 'graphql-yoga' -import CONFIG from './config' +import { default as CONFIG, requiredConfigs } from './config' import mocks from './mocks' import middleware from './middleware' import { getDriver } from './bootstrap/neo4j' @@ -9,7 +9,8 @@ import decode from './jwt/decode' import schema from './schema' // check required configs and throw error -Object.entries(CONFIG.requiredConfigs).map(entry => { +// TODO check this directly in config file - currently not possible due to testsetup +Object.entries(requiredConfigs).map(entry => { if (!entry[1]) { throw new Error(`ERROR: "${entry[0]}" env variable is missing.`) } From 0b270ee7c3f6cf71c0db212f25c64bcd0305c513 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 3 Jun 2019 23:24:26 +0200 Subject: [PATCH 12/13] fixed default import syntax --- backend/src/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/server.js b/backend/src/server.js index 15950821f..7692f0d2c 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -1,7 +1,7 @@ import express from 'express' import helmet from 'helmet' import { GraphQLServer } from 'graphql-yoga' -import { default as CONFIG, requiredConfigs } from './config' +import CONFIG, { requiredConfigs } from './config' import mocks from './mocks' import middleware from './middleware' import { getDriver } from './bootstrap/neo4j' From dd624ef535fc91a98061dc8bb69aa9b27ec5b834 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 4 Jun 2019 00:10:42 +0200 Subject: [PATCH 13/13] fix for YOU CAN'T CLEAN THE DATABASE WITH DEBUG=false --- backend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/package.json b/backend/package.json index 573031606..d861f9b6c 100644 --- a/backend/package.json +++ b/backend/package.json @@ -19,7 +19,7 @@ "test:cucumber": " cross-env CLIENT_URI=http://localhost:4123 run-p --race test:before:* 'test:cucumber:cmd {@}' --", "test:jest:debug": "run-p --race test:before:* 'test:jest:cmd:debug {@}' --", "db:script:seed": "wait-on tcp:4001 && babel-node src/seed/seed-db.js", - "db:reset": "babel-node src/seed/reset-db.js", + "db:reset": "cross-env DEBUG=true babel-node src/seed/reset-db.js", "db:seed": "cross-env GRAPHQL_URI=http://localhost:4001 GRAPHQL_PORT=4001 DEBUG=true DISABLED_MIDDLEWARES=permissions run-p --race dev db:script:seed" }, "author": "Human Connection gGmbH",