From 7ac005d9d53fac3cfd0cb019c5c040c068a43e6e Mon Sep 17 00:00:00 2001
From: Guillaume WANG <guillaume.wang@polytechnique.edu>
Date: Tue, 29 Jan 2019 01:37:39 +0100
Subject: [PATCH] use a .env

---
 .env_dist                     | 13 +++++++++++++
 db/knex_router.ts             |  2 +-
 db/knexfile.js                | 10 +++++-----
 src/adminview/admin_router.ts |  5 ++++-
 src/app.ts                    |  6 ++++--
 src/index.ts                  |  2 +-
 src/ldap/internal/config.ts   |  9 +++++++--
 7 files changed, 35 insertions(+), 12 deletions(-)
 create mode 100644 .env_dist

diff --git a/.env_dist b/.env_dist
new file mode 100644
index 0000000..246780d
--- /dev/null
+++ b/.env_dist
@@ -0,0 +1,13 @@
+# Modele du fichier '.env', definissant variables "d'environnement" utilisees dans divers fichiers de src/ et de db/.
+# (Ces variables sont chargees par le package dotenv dans `process.env`, dans les fichiers .js et .ts ou dotenv.config() est appele)
+# Copier ce fichier en le renommant '.env', (le placer a la racine du repo,) et modifier les champs comme il faut.
+
+TARGET_ENV=development
+PORT=3000
+DB_USER=sigma
+DB_PASSWD=sigmapw
+DB_HOST=129.201.104.10
+#DB_HOST=127.0.0.1 # for devs using a port forwarding
+FRONTEND_SERVER_URL=http://localhost:8888
+#LDAP_URI= (loaded from ldap_config.json!)
+#TEST_PORT=3001 (used only in tests/, not yet implemented)
diff --git a/db/knex_router.ts b/db/knex_router.ts
index 34962cb..3ce9bf2 100644
--- a/db/knex_router.ts
+++ b/db/knex_router.ts
@@ -3,7 +3,7 @@
  */
 require('dotenv').config();
 
-const environment = process.env.TARGET_ENV || 'development';
+const environment = process.env.TARGET_ENV;
 export const config = require('./knexfile')[environment];
 
 console.log("Running Knex configuration '%s'", environment);
diff --git a/db/knexfile.js b/db/knexfile.js
index a439284..4f0e7a7 100644
--- a/db/knexfile.js
+++ b/db/knexfile.js
@@ -26,8 +26,8 @@ module.exports = {
         client: 'pg',
         connection: {
             host: 'localhost',
-            user: process.env.DB_USER || 'sigma',
-            password: process.env.DB_PASSWD || 'sigmapw',
+            user: process.env.DB_USER,
+            password: process.env.DB_PASSWD,
             database: 'sigma_dev',
             charset: 'utf8'
         },
@@ -36,9 +36,9 @@ module.exports = {
     staging: {
         client: 'pg',
         connection: {
-            host: process.env.DB_HOST || '129.201.104.10',
-            user: process.env.DB_USER || 'sigma',
-            password: process.env.DB_PASSWD || 'password',
+            host: process.env.DB_HOST,
+            user: process.env.DB_USER,
+            password: process.env.DB_PASSWD,
             database: 'sigma_staging',
             charset: 'utf8'
         },
diff --git a/src/adminview/admin_router.ts b/src/adminview/admin_router.ts
index a7c7ec8..736af26 100644
--- a/src/adminview/admin_router.ts
+++ b/src/adminview/admin_router.ts
@@ -32,8 +32,11 @@ import flash from 'connect-flash';
 // packages pour l'API REST et pour GraphQL Voyager
 import knex from '../../db/knex_router';
 import { express as graphqlVoyager } from 'graphql-voyager/middleware';
+//loads environment variables from (hidden) .env file
+import dotenv from 'dotenv'; 
+dotenv.config();
 
-let port = process.env.PORT || 3000;
+let port = process.env.PORT;
 
 const whitelist = [
     "magi.karp",
diff --git a/src/app.ts b/src/app.ts
index 3f940da..b2da460 100644
--- a/src/app.ts
+++ b/src/app.ts
@@ -28,7 +28,9 @@ import morgan from 'morgan';
 import path from 'path';
 // config des paramètres de connexion au LDAP
 import { ldapConfig, credentialsLdapConfig } from './ldap/internal/config';
-
+//loads environment variables from (hidden) .env file
+import dotenv from 'dotenv';
+dotenv.config();
 
 /**
  * @desc Création de l'application Express et setup de middlewares basiques
@@ -45,7 +47,7 @@ app.disable('x-powered-by');
 // use morgan (HTTP request logger middleware)
 app.use(morgan('dev'));
 
-const FRONTEND_SERVER_URL = process.env.FRONTEND_SERVER_URL || 'http://localhost:8888';
+const FRONTEND_SERVER_URL = process.env.FRONTEND_SERVER_URL;
 // Options de configuration pour le _middleware_ `cors`.
 // CORS = Cross Origin Resource Sharing
 const corsOptions = {
diff --git a/src/index.ts b/src/index.ts
index f55c107..e0aa4dd 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -7,7 +7,7 @@ dotenv.config();
 import app from './app';
 import colors from 'colors';
 
-const port = process.env.PORT || 3000;
+const port = process.env.PORT;
 const hostnameConfigMap = {
     'development': 'localhost',
     'staging': '0.0.0.0',
diff --git a/src/ldap/internal/config.ts b/src/ldap/internal/config.ts
index ad76623..d2b84df 100644
--- a/src/ldap/internal/config.ts
+++ b/src/ldap/internal/config.ts
@@ -12,13 +12,18 @@
 import fs from 'fs';
 import path from 'path';
 import colors from 'colors';
-// Point central ; tous les champs de la BDD sont 'cachés' dans config.json et pas visibles directement
+import dotenv from 'dotenv';
+dotenv.config();
+
+// Point central ; tous les champs de la BDD sont 'cachés' dans ldap_config.json et pas visibles directement
 let path_config = path.resolve(__dirname,'..', '..', '..', 'ldap_config.json');
 console.log(colors.cyan("Loading LDAP config file from "+path_config));
 export const ldapConfig = JSON.parse(fs.readFileSync(path_config).toString());
+
 let path_credentials = path.resolve(__dirname,'..', '..', '..', 'ldap_credentials.json')
 console.log(colors.cyan("Loading LDAP credentials from "+path_credentials));
 export const credentialsLdapConfig = JSON.parse(fs.readFileSync(path_credentials).toString());
+
 // Override config server from environment
 if (process.env.LDAP_URI != null) {
     ldapConfig.server = process.env.LDAP_URI;
@@ -26,4 +31,4 @@ if (process.env.LDAP_URI != null) {
 else {
     if (process.env.TARGET_ENV == `production`)     { ldapConfig.server = ldapConfig.server_prod; }
     else                                            { ldapConfig.server = ldapConfig.server_dev; }
-}
\ No newline at end of file
+}
-- 
GitLab