From 3df4d11c40de9caec416d2f543dc0669cbec02a8 Mon Sep 17 00:00:00 2001
From: Dominik Sigmund <dominik.sigmund@br.de>
Date: Wed, 19 Feb 2020 11:26:01 +0100
Subject: [PATCH] Added sonarqube check

---
 .gitlab-ci.yml    |  6 ++++++
 README.md         | 24 ++++++++++++++++--------
 index.js          | 28 ++++++++++++++++++++++++++++
 package-lock.json |  5 +++++
 package.json      |  4 +++-
 5 files changed, 58 insertions(+), 9 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c2b92b1..adbb7bc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,6 +5,12 @@ include:
     file: '/cicd/SAST-nodejs.gitlab-ci.yml'
   - project: 'general/templates'
     file: '/cicd/npm-audit.gitlab-ci.yml'
+  - project: 'general/templates'
+    file: '/cicd/sonarqube.gitlab-ci.yml'
+
+variables:
+  SONAR_PROJECT_KEY: config
+  SONAR_TOKEN: 11922a8e774494f51e1d2f0e695949e4073e7df8
 
 cache:
   paths:
diff --git a/README.md b/README.md
index 0f52d9b..31d758b 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,29 @@
 # config
 
+[![pipeline status](https://it-devops-01.br-edv.brnet.int/general/config/badges/master/pipeline.svg)](https://it-devops-01.br-edv.brnet.int/general/config/commits/master)
+[![coverage report](https://it-devops-01.br-edv.brnet.int/general/config/badges/master/coverage.svg)](https://it-devops-01.br-edv.brnet.int/general/config/commits/master)
+
 Simple Config Log with HashiCorp Vault support.
 
 ## Installation
 
+`npm install --save git+ssh://git@it-devops-01.br-edv.brnet.int:general/config.git`
+
 ## Usage
 
+`let config = require('config')`
 
-## TODO
+Then config is your config object. (Use it like config.setting)
 
-sonarqube
+It reads from the following sources, performing a deep merge:  
+(The Top Value overwrites the lower ones)
 
-badges
+- ENV
+- config.json
+- config.defaults.json
 
-bottom overwrites top
-config.defaults.json
-config.json
-process.ENV
+## TODO / Missing
 
-if value == "vault:", treat it as secret
\ No newline at end of file
+- hashicorp values support: if value == "vault:", treat it as secret
+- sonarqube + badges
+- tests
diff --git a/index.js b/index.js
index e69de29..1878007 100644
--- a/index.js
+++ b/index.js
@@ -0,0 +1,28 @@
+var fs = require('fs')
+var merge = require('lodash.merge')
+
+let config = {}
+
+if (fs.accessSync('./config.defaults.json')) {
+  config = JSON.parse(fs.readFileSync('./config.defaults.json', 'utf8'))
+}
+
+if (fs.accessSync('./config.json')) {
+  config = merge(config, JSON.parse(fs.readFileSync('./config.json', 'utf8')))
+}
+
+iterate(config)
+
+module.exports = config
+
+const iterate = function (obj) {
+  for (let index = 0; index < Object.keys(obj).length; index++) {
+    const element = Object.keys(obj)[index]
+    if (process.env[element]) {
+      obj[element] = process.env[element]
+    }
+    if (typeof element === 'object') {
+      iterate(element)
+    }
+  }
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 2d7570a..27e70f5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2758,6 +2758,11 @@
       "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
       "dev": true
     },
+    "lodash.merge": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+    },
     "lodash.sortby": {
       "version": "4.7.0",
       "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
diff --git a/package.json b/package.json
index 775da5c..ef1bc2b 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,8 @@
   "description": "Simple Config Log with HashiCorp Vault support",
   "main": "index.js",
   "scripts": {
-    "test": "jest"
+    "test": "jest",
+    "sonarqube": "sonar-scanner -Dsonar.projectKey=config -Dsonar.sources=. -Dsonar.host.url=https://it-devops-01.br-edv.brnet.int:8999 -Dsonar.login=gitlab"
   },
   "keywords": [
     "config",
@@ -14,6 +15,7 @@
   "author": "Dominik Sigmund",
   "license": "ISC",
   "dependencies": {
+    "lodash.merge": "^4.6.2",
     "vault": "^0.3.0"
   },
   "devDependencies": {
-- 
GitLab