From 39a63cd16e372f132b14a1e10786dca9fb0696bc Mon Sep 17 00:00:00 2001
From: Abhinav Adduri <abhinadduri@gmail.com>
Date: Mon, 5 Jun 2017 15:35:36 -0700
Subject: [PATCH] currently not working, decryption seems to fail

---
 frontend/src/fileReceiver.js |   5 +-
 package.json                 |   2 +
 server/config.js             |  16 ++++
 server/portal_server.js      | 144 +++++++++++++++++++++++------------
 4 files changed, 119 insertions(+), 48 deletions(-)
 create mode 100644 server/config.js

diff --git a/frontend/src/fileReceiver.js b/frontend/src/fileReceiver.js
index c030fb71..81311648 100644
--- a/frontend/src/fileReceiver.js
+++ b/frontend/src/fileReceiver.js
@@ -5,6 +5,7 @@ class FileReceiver extends EventEmitter {
   constructor() {
     super();
     this.salt = strToIv(location.pathname.slice(10, -1));
+    window.salt = this.salt;
   }
 
   download() {
@@ -30,11 +31,13 @@ class FileReceiver extends EventEmitter {
           let blob = new Blob([this.response]);
           let fileReader = new FileReader();
           fileReader.onload = function() {
+            window.data = this.result;
+            console.log(this.result);
             resolve({
               data: this.result,
               fname: xhr
                 .getResponseHeader('Content-Disposition')
-                .match(/filename="(.+)"/)[1]
+                .match(/="(.+)"/)[1]
             });
           };
 
diff --git a/package.json b/package.json
index 462d07fb..229f13e7 100644
--- a/package.json
+++ b/package.json
@@ -4,8 +4,10 @@
   "version": "1.0.0",
   "author": "Mozilla (https://mozilla.org)",
   "dependencies": {
+    "aws-sdk": "^2.62.0",
     "body-parser": "^1.17.2",
     "connect-busboy": "0.0.2",
+    "convict": "^3.0.0",
     "express": "^4.15.3",
     "fs-extra": "^3.0.1",
     "path": "^0.12.7",
diff --git a/server/config.js b/server/config.js
new file mode 100644
index 00000000..43860f77
--- /dev/null
+++ b/server/config.js
@@ -0,0 +1,16 @@
+const convict = require('convict');
+
+let conf = convict({
+    aws_credentials: {
+        region: 'us-west-2',
+        bucketName: 'testpilot-p2p'
+    }
+})
+
+// var env = conf.get('env');
+// conf.loadFile('./config/' + env + '.json');
+ 
+// Perform validation 
+conf.validate({allowed: 'strict'});
+ 
+module.exports = conf;
\ No newline at end of file
diff --git a/server/portal_server.js b/server/portal_server.js
index 3d518ec4..c1577fd7 100644
--- a/server/portal_server.js
+++ b/server/portal_server.js
@@ -1,15 +1,24 @@
-const express = require('express');
-const busboy = require('connect-busboy');
-const path = require('path');
-const fs = require('fs-extra');
-const bodyParser = require('body-parser');
-const crypto = require('crypto');
+const express = require("express")
+const busboy = require("connect-busboy");
+const path = require("path");
+const fs = require("fs-extra");
+const bodyParser = require("body-parser");
+const crypto = require("crypto");
+const conf = require('./config.js');
+const stream = require('stream');
 
-const app = express();
-const redis = require('redis'),
-  client = redis.createClient();
+let aws_credentials = conf.get('aws_credentials');
 
-client.on('error', err => {
+const AWS = require('aws-sdk');
+AWS.config.loadFromPath('../../.aws/credentials');
+const s3 = new AWS.S3();
+
+
+const app = express()
+const redis = require("redis"),
+    redis_client = redis.createClient();
+
+redis_client.on("error", (err) => {
   console.log(err);
 });
 
@@ -28,22 +37,36 @@ app.get('/assets/download/:id', (req, res) => {
     return;
   }
 
-  client.hget(id, 'filename', (err, reply) => {
-    // maybe some expiration logic too
-    if (!reply) {
-      res.sendStatus(404);
-    } else {
-      res.setHeader('Content-Disposition', 'attachment; filename=' + reply);
-      res.setHeader('Content-Type', 'application/octet-stream');
+  let params = {
+    Bucket: aws_credentials.bucketName,
+    Key: req.params.id
+  }
 
-      res.download(__dirname + '/../static/' + id, reply, err => {
-        if (!err) {
-          client.del(id);
-          fs.unlinkSync(__dirname + '/../static/' + id);
-        }
-      });
+  s3.getObject(params, function(err, data) {
+    if (err) {
+      console.log(err, err.stack); // an error occurred
     }
-  });
+    else {
+      res.writeHead(200, {"Content-Disposition": "attachment; filename=response", //+ reply,
+                          "Content-Type": "application/octet-stream"});
+      // res.setHeader("Content-Type", "application/octet-stream");
+      res.end(new Buffer(data.Body))
+    }
+  })
+
+  // redis_client.hget(id, "filename", (err, reply) => { // maybe some expiration logic too
+  //   if (!reply) {
+  //     res.sendStatus(404);
+  //   } else {
+
+      // res.download(__dirname + "/../static/" + id, reply, (err) => {
+      //   if (!err) {
+      //     redis_client.del(id);
+      //     fs.unlinkSync(__dirname + "/../static/" + id);
+      //   }
+      // });
+  //   }
+  // })
 });
 
 app.post('/delete/:id', (req, res) => {
@@ -60,45 +83,72 @@ app.post('/delete/:id', (req, res) => {
     res.sendStatus(404);
   }
 
+<<<<<<< HEAD
   client.hget(id, 'delete', (err, reply) => {
     if (!reply) {
       res.sendStatus(404);
     } else {
       client.del(id);
       fs.unlinkSync(__dirname + '/../static/' + id);
+=======
+  redis_client.hget(id, "delete", (err, reply) => {
+    if (!reply) {
+      res.sendStatus(404);
+    } else {
+      redis_client.del(id);
+      fs.unlinkSync(__dirname + "/../static/" + id);
+>>>>>>> currently not working, decryption seems to fail
       res.sendStatus(200);
     }
   });
 });
 
-app.post('/upload/:id', (req, res, next) => {
-  if (!validateID(req.params.id)) {
-    res.send(404);
-    return;
-  }
+app.post("/upload/:id", (req, res, next) => {
 
-  let fstream;
-  req.pipe(req.busboy);
-  req.busboy.on('file', (fieldname, file, filename) => {
-    console.log('Uploading: ' + filename);
+    if (!validateID(req.params.id)){
+      res.send(404);
+      return;
+    }
 
-    //Path where image will be uploaded
-    fstream = fs.createWriteStream(__dirname + '/../static/' + req.params.id);
-    file.pipe(fstream);
-    fstream.on('close', () => {
-      let id = req.params.id;
-      let uuid = crypto.randomBytes(10).toString('hex');
+    let fstream;
+    req.pipe(req.busboy);
+    req.busboy.on("file", (fieldname, file, filename) => {
+        console.log("Uploading: " + filename);
 
-      client.hmset([id, 'filename', filename, 'delete', uuid]);
 
-      // delete the file off the server in 24 hours
-      // setTimeout(() => {
-      //   fs.unlinkSync(__dirname + "/static/" + id);
-      // }, 86400000);
+        let params = {
+          Bucket: aws_credentials.bucketName,
+          Key: req.params.id,
+          Body: file
+        }
 
-      client.expire(id, 86400000);
-      console.log('Upload Finished of ' + filename);
-      res.send(uuid);
+        s3.upload(params, function(err, data) {
+          if (err) {
+            console.log(err, err.stack); // an error occurred
+          } else {
+            console.log(data);
+          }
+        })
+
+        return;
+
+        fstream = fs.createWriteStream(__dirname + "/../static/" + req.params.id);
+        file.pipe(fstream);
+        fstream.on("close", () => {
+            let id = req.params.id;
+            let uuid = crypto.randomBytes(10).toString('hex');
+
+            redis_client.hmset([id, "filename", filename, "delete", uuid]);
+
+            // delete the file off the server in 24 hours
+            // setTimeout(() => {
+            //   fs.unlinkSync(__dirname + "/static/" + id);
+            // }, 86400000);
+
+            redis_client.expire(id, 86400000);
+            console.log("Upload Finished of " + filename);
+            res.send(uuid);
+        });
     });
   });
 });