diff --git a/README.md b/README.md index 923ad44a..bf892c31 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,3 @@ -* Make sure you have a redis server running: download redis using homebrew: brew install redis -* Start the redis server: redis-server /usr/local/etc/redis.conf -* To run the code, clone the git repo, cd into the folder, and run npm install. Then, run npm start. - -Steps to start exchanging messages: - -* Open two separate tabs, one with a location hash of #init. For example, if the port being used is 3000, open one tab as http://localhost:3000/#init, and one as http://localhost:3000. -* The tab with the location hash should have a button that says create channel. Click that button, and wait for an alert dialog to pop up (this might take a while). -* In the tab without the init hash, paste the generated code in the input field with the join channel placeholder text. -* Click connect in the tab without the init hash. Then, click connect in the tab with the init hash (order shouldn't actually matter). You should be able to send messages and see them in the other tab now. +* Install the redis server if not installed. +* To run the project, make sure you have a redis server running locally: redis-server /usr/local/etc/redis.conf +* Follow instructions inside the console on the browser. diff --git a/app.js b/app.js index 8039d76c..8d25ef06 100644 --- a/app.js +++ b/app.js @@ -1,5 +1,7 @@ const express = require('express') -const bodyParser = require('body-parser') +var busboy = require('connect-busboy'); //middleware for form/file upload +var path = require('path'); //used for file path +var fs = require('fs-extra'); //File System - for file manipulation const app = express() var redis = require("redis"), client = redis.createClient(); @@ -8,76 +10,58 @@ client.on('error', function(err) { console.log(err); }) -app.use(bodyParser.json()); +app.use(busboy()); +app.use(express.static(path.join(__dirname, 'public'))); -app.use(express.static('public')) - -app.use(function(req, res, next) { - res.header("Access-Control-Allow-Origin", "*"); - res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); - next(); -}); - -function insert(create_key) { - let id = Math.floor(Math.random()*10000).toString(); - client.set(id, create_key, redis.print); - return id; -} - -app.post('/local_answer/:id', function(req, res) { - let id = req.params.id; - client.set(id, JSON.stringify(req.body), redis.print); - res.send('ok'); +app.get('/', function (req, res) { + res.send('Hello World!') }) -app.get('/receive_offer/:id', function(req, res) { +app.get('/download/:id', function(req, res) { + res.sendFile(path.join(__dirname + '/public/download.html')); +}); + +app.get('/assets/download/:id', function(req, res) { + let id = req.params.id; - client.get(id, function(err, reply) { + client.hget(id, "filename", function(err, reply) { // maybe some expiration logic too if (!reply) { res.send('error'); } else { - res.send(reply); + res.setHeader('Content-Disposition', 'attachment; filename=' + reply); + // res.setHeader('Content-Transfer-Encoding', 'binary'); + res.setHeader('Content-Type', 'application/octet-stream'); + + res.download(__dirname + '/static/' + reply); } }) -}) + +}); + +app.route('/upload') + .post(function (req, res, next) { + + var fstream; + req.pipe(req.busboy); + req.busboy.on('file', function (fieldname, file, filename) { + console.log("Uploading: " + filename); + + //Path where image will be uploaded + fstream = fs.createWriteStream(__dirname + '/static/' + filename); + file.pipe(fstream); + fstream.on('close', function () { + let id = Math.floor(Math.random()*10000).toString(); + client.hset(id, "filename", filename, redis.print); + client.hset(id, "expiration", 0, redis.print); + console.log("Upload Finished of " + filename); + res.send(id); //where to go next + }); + }); + }); -app.get('/receive_answer/:id', function(req, res) { - let id = req.params.id; - client.get(id, function(err, reply) { - if (!reply) { - res.send('error'); - } else { - client.del(id); - res.send(reply); - } - }) -}) - -app.post('/join/:id', function(req, res) { - let id = req.params.id; - client.get(id, function(err, reply) { - if (!reply) { - res.send('error') - } else { - res.send(reply); - } - }) -}) - -app.post('/create', function(req, res) { - let id = insert(JSON.stringify(req.body)); - res.send(id); -}) - - -app.get('/', function (req, res) { - console.log('get'); - res.send('Hello World!') -}) app.listen(3000, function () { console.log('Example app listening on port 3000!') }) - diff --git a/package.json b/package.json index e2e293f5..ebfba011 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,18 @@ { "name": "portal-alpha", - "version": "0.1.0", + "version": "1.0.0", "description": "", "scripts": { - "start": "browserify public/index.js -o public/bundle.js & node app.js" + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node app.js" }, - "license": "MIT", + "author": "", + "license": "ISC", "dependencies": { - "body-parser": "^1.17.2", + "connect-busboy": "0.0.2", "express": "^4.15.3", - "redis": "^2.7.1", - "simple-peer": "^5.11.4", - "wrtc": "0.0.62" - }, - "devDependencies": { - "browserify": "^14.3.0" + "fs-extra": "^3.0.1", + "path": "^0.12.7", + "redis": "^2.7.1" } } diff --git a/public/download.html b/public/download.html new file mode 100644 index 00000000..975be669 --- /dev/null +++ b/public/download.html @@ -0,0 +1,18 @@ + + +
+