From 2b4df1cd515f3d363f63b2b110e01209b6c07ba9 Mon Sep 17 00:00:00 2001
From: Abhinav Adduri <abhinadduri@gmail.com>
Date: Fri, 23 Jun 2017 10:53:11 -0700
Subject: [PATCH 1/2] added sentry to server code

---
 package-lock.json       | 46 +++++++++++++++++++++++++++++------------
 package.json            |  1 +
 server/config.js        | 10 +++++++--
 server/portal_server.js | 11 +++++++---
 server/storage.js       |  4 ++--
 5 files changed, 52 insertions(+), 20 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 6c2025ca..ba38c09b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2464,12 +2464,6 @@
       "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
       "dev": true
     },
-    "is-utf8": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
-      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
-      "dev": true
-    },
     "is-windows": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz",
@@ -2539,6 +2533,11 @@
       "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
       "dev": true
     },
+    "json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+    },
     "json3": {
       "version": "3.3.2",
       "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
@@ -2771,6 +2770,11 @@
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
       "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew=="
     },
+    "lsmod": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/lsmod/-/lsmod-1.0.0.tgz",
+      "integrity": "sha1-mgD3bco26yP6BTUK/htYXUKZ5ks="
+    },
     "map-obj": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
@@ -2871,7 +2875,7 @@
     "minimatch": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="
+      "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM="
     },
     "minimist": {
       "version": "0.0.10",
@@ -3475,6 +3479,23 @@
       "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
       "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
     },
+    "raven": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/raven/-/raven-2.1.0.tgz",
+      "integrity": "sha1-G2JOVjdNnJ2Tx0RIRhoqNWzjdSc=",
+      "dependencies": {
+        "stack-trace": {
+          "version": "0.0.9",
+          "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz",
+          "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU="
+        },
+        "uuid": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.0.tgz",
+          "integrity": "sha1-Zyj8BFnEUNeWqZwxg3VpvfZy1yg="
+        }
+      }
+    },
     "raven-js": {
       "version": "3.16.0",
       "resolved": "https://registry.npmjs.org/raven-js/-/raven-js-3.16.0.tgz",
@@ -4232,6 +4253,11 @@
         }
       }
     },
+    "timed-out": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+      "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8="
+    },
     "timers-browserify": {
       "version": "1.4.2",
       "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
@@ -4303,12 +4329,6 @@
         }
       }
     },
-    "uglify-to-browserify": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
-      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
-      "optional": true
-    },
     "umd": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz",
diff --git a/package.json b/package.json
index cab3eba7..50476ba0 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,7 @@
     "helmet": "^3.6.1",
     "jquery": "^3.2.1",
     "mozlog": "^2.1.1",
+    "raven": "^2.1.0",
     "raven-js": "^3.16.0",
     "redis": "^2.7.1",
     "uglify-es": "3.0.19"
diff --git a/server/config.js b/server/config.js
index 5a01e627..6dd487a9 100644
--- a/server/config.js
+++ b/server/config.js
@@ -25,6 +25,11 @@ const conf = convict({
   sentry_id: {
     format: String,
     default: 'https://cdf9a4f43a584f759586af8ceb2194f2@sentry.prod.mozaws.net/238',
+    env: 'P2P_SENTRY_CLIENT'
+  },
+  sentry_dsn: {
+    format: String,
+    default: 'localhost',
     env: 'P2P_SENTRY_DSN'
   },
   env: {
@@ -39,7 +44,8 @@ conf.validate({ allowed: 'strict' });
 
 const props = conf.getProperties();
 module.exports = props;
-
+console.log(props.sentry_dsn)
 module.exports.notLocalHost =
   props.env === 'production' &&
-  props.s3_bucket !== 'localhost';
+  props.s3_bucket !== 'localhost' &&
+  props.sentry_dsn !== 'localhost';
diff --git a/server/portal_server.js b/server/portal_server.js
index acf47b82..f5ec0bcc 100644
--- a/server/portal_server.js
+++ b/server/portal_server.js
@@ -7,9 +7,14 @@ const helmet = require('helmet');
 const bytes = require('bytes');
 const conf = require('./config.js');
 const storage = require('./storage.js');
+const Raven = require('raven');
 
 const notLocalHost = conf.notLocalHost;
 
+if (notLocalHost) {
+  Raven.config(conf.sentry_dsn).install();
+}
+
 const mozlog = require('./log.js');
 
 const log = mozlog('portal.server');
@@ -38,9 +43,9 @@ app.get('/', (req, res) => {
 
 app.get('/exists/:id', (req, res) => {
   const id = req.params.id;
-  storage.exists(id).then(doesExist => {
-    res.sendStatus(doesExist ? 200 : 404);
-  });
+  storage.exists(id).then(() => {
+    res.sendStatus(200);
+  }).catch(err => res.sendStatus(404));
 });
 
 app.get('/download/:id', (req, res) => {
diff --git a/server/storage.js b/server/storage.js
index 4acca3e6..a29d0052 100644
--- a/server/storage.js
+++ b/server/storage.js
@@ -49,7 +49,7 @@ function filename(id) {
       if (!err) {
         resolve(reply);
       } else {
-        reject();
+        reject(err);
       }
     });
   });
@@ -58,7 +58,7 @@ function filename(id) {
 function exists(id) {
   return new Promise((resolve, reject) => {
     redis_client.exists(id, (rediserr, reply) => {
-      resolve(reply === 1);
+      reply === 1 && !rediserr ? resolve() : reject(rediserr);;
     });
   });
 }

From 525c15124a50548ac51b389c854c3b6a1e2e5ca1 Mon Sep 17 00:00:00 2001
From: Abhinav Adduri <abhinadduri@gmail.com>
Date: Fri, 23 Jun 2017 11:42:51 -0700
Subject: [PATCH 2/2] cleaned

---
 package-lock.json          | 14 +++++++++++++-
 server/config.js           |  2 +-
 server/storage.js          |  6 +++++-
 test/local.storage.test.js |  8 ++++++--
 4 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index ba38c09b..3ab4be91 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2464,6 +2464,12 @@
       "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
       "dev": true
     },
+    "is-utf8": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+      "dev": true
+    },
     "is-windows": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz",
@@ -2875,7 +2881,7 @@
     "minimatch": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-      "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM="
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="
     },
     "minimist": {
       "version": "0.0.10",
@@ -4329,6 +4335,12 @@
         }
       }
     },
+    "uglify-to-browserify": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+      "optional": true
+    },
     "umd": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz",
diff --git a/server/config.js b/server/config.js
index 6dd487a9..c49681b8 100644
--- a/server/config.js
+++ b/server/config.js
@@ -44,7 +44,7 @@ conf.validate({ allowed: 'strict' });
 
 const props = conf.getProperties();
 module.exports = props;
-console.log(props.sentry_dsn)
+
 module.exports.notLocalHost =
   props.env === 'production' &&
   props.s3_bucket !== 'localhost' &&
diff --git a/server/storage.js b/server/storage.js
index a29d0052..63b1bbdc 100644
--- a/server/storage.js
+++ b/server/storage.js
@@ -58,7 +58,11 @@ function filename(id) {
 function exists(id) {
   return new Promise((resolve, reject) => {
     redis_client.exists(id, (rediserr, reply) => {
-      reply === 1 && !rediserr ? resolve() : reject(rediserr);;
+      if (reply === 1 && !rediserr) {
+        resolve();
+      } else {
+        reject(rediserr);
+      }
     });
   });
 }
diff --git a/test/local.storage.test.js b/test/local.storage.test.js
index bb8ad187..d7d33f1b 100644
--- a/test/local.storage.test.js
+++ b/test/local.storage.test.js
@@ -44,12 +44,16 @@ const storage = proxyquire('../server/storage', {
 describe('Testing Exists from local filesystem', function() {
   it('Exists returns true when file exists', function() {
     exists.callsArgWith(1, null, 1);
-    return storage.exists('test').then(reply => assert(reply));
+    return storage.exists('test')
+                  .then(() => assert(1))
+                  .catch(err => assert.fail())
   });
 
   it('Exists returns false when file does not exist', function() {
     exists.callsArgWith(1, null, 0);
-    return storage.exists('test').then(reply => assert(!reply));
+    return storage.exists('test')
+                  .then(() => assert.fail())
+                  .catch(err => assert(1))
   });
 });