From db9c8a2d217525c4f48c1bdc878d66cca63d6b1c Mon Sep 17 00:00:00 2001 From: sueanyv Date: Mon, 6 Mar 2017 16:57:42 -0800 Subject: [PATCH 01/14] adding files --- .env | 3 ++ .gitignore | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++ model/user.js | 77 ++++++++++++++++++++++++++++++++ package.json | 39 +++++++++++++++++ server.js | 0 5 files changed, 237 insertions(+) create mode 100644 .env create mode 100644 .gitignore create mode 100644 model/user.js create mode 100644 package.json create mode 100644 server.js diff --git a/.env b/.env new file mode 100644 index 0000000..0f8304c --- /dev/null +++ b/.env @@ -0,0 +1,3 @@ +PORT='3000' +MONGODB_URI='mongodb://localhost/cfgram' +APP_SECRET='coolsecret' diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..27e8853 --- /dev/null +++ b/.gitignore @@ -0,0 +1,118 @@ +# Created by https://www.gitignore.io/api/node,vim,osx,macos,linux + +*node_modules + +### Node ### +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + + + +### Vim ### +# swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-v][a-z] +[._]sw[a-p] +# session +Session.vim +# temporary +.netrwhist +*~ +# auto-generated tag files +tags + + +### OSX ### +*.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon +# Thumbnails +._* +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +### macOS ### +# Icon must end with two \r +# Thumbnails +# Files that might appear in the root of a volume +# Directories potentially created on remote AFP share + + +### Linux ### + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# End of https://www.gitignore.io/api/node,vim,osx,macos,linux +l diff --git a/model/user.js b/model/user.js new file mode 100644 index 0000000..a077a52 --- /dev/null +++ b/model/user.js @@ -0,0 +1,77 @@ + +'use strict'; + +const crypto = require('crypto'); +const bcrypt = require('bcrypt'); +const jwt = require('jsonwebtoken'); +const mongoose = require('mongoose'); +const createError = require('http-errors'); +const Promise = require('bluebird'); +const debug = require('debug')('cfgram:user'); + +const Schema = mongoose.Schema; + +const userSchema = Schema({ + username: { type: String, required: true, unique: true }, + email: { type: String, required: true, unique: true }, + password: { type: String, required: true }, + findHash: { type: String, unique: true } +}); + +userSchema.methods.generatePasswordHash = function(password) { + debug('generatePasswordHash'); + + return new Promise((resolve, reject) => { + bcrypt.hash(password, 10, (err, hash) => { + if (err) return reject(err); + this.password = hash; + resolve(this); + }); + }); +}; + +userSchema.methods.comparePasswordHash = function(password) { + debug('comparePasswordHash'); + + return new Promise((resolve, reject) => { + bcrypt.compare(password, this.password, (err, valid) => { + if (err) return reject(err); + if (!valid) return reject(createError(401, 'wrong password')); + resolve(this); + }); + }); +}; + + +userSchema.methods.generateFindHash = function() { + debug('generateFindHash'); + + return new Promise((resolve, reject) => { + let tries = 0; + + _generateFindHash.call(this); + + function _generateFindHash() { + this.findHash = crypto.randomBytes(32).toString('hex'); + this.save() + .then(() => resolve(this.findHash)) + .catch( err => { + if (tries > 3) return reject(err); + tries++; + _generateFindHash.call(this); + }); + }; + }); +}; + +userSchema.methods.generateToken = function() { + debug('generateToken'); + + return new Promise((resolve, reject) => { + this.generateFindHash() + .then(findHash => resolve(jwt.sign({ token: findHash }, process.env.APP_SECRET))) + .catch( err => reject(err)); + }); +}; + +module.exports = mongoose.model('user', userSchema); diff --git a/package.json b/package.json new file mode 100644 index 0000000..6bfd8ba --- /dev/null +++ b/package.json @@ -0,0 +1,39 @@ +{ + "name": "16-basic_auth", + "version": "1.0.0", + "description": "![cf](https://i.imgur.com/7v5ASc8.png) Lab 16 - Basic Auth ======", + "main": "index.js", + "scripts": { + "test": "DEBUG= 'cfgram*' mocha", + "start": "DEBUG= 'cfgram*' node server.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/sueanyv/16-basic_auth.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/sueanyv/16-basic_auth/issues" + }, + "homepage": "https://github.com/sueanyv/16-basic_auth#readme", + "dependencies": { + "bcrypt": "^1.0.2", + "bluebird": "^3.5.0", + "body-parser": "^1.17.1", + "cors": "^2.8.1", + "debug": "^2.6.1", + "dotenv": "^4.0.0", + "express": "^4.15.2", + "http-errors": "^1.6.1", + "jsonwebtoken": "^7.3.0", + "mongoose": "^4.8.6", + "morgan": "^1.8.1" + }, + "devDependencies": { + "chai": "^3.5.0", + "mocha": "^3.2.0", + "superagent": "^3.5.0" + } +} diff --git a/server.js b/server.js new file mode 100644 index 0000000..e69de29 From d335db65dee6c8e1c9afadcd5dc3b1ab2c694d93 Mon Sep 17 00:00:00 2001 From: sueanyv Date: Tue, 7 Mar 2017 16:31:20 -0800 Subject: [PATCH 02/14] changes and extra files --- .eslintrc | 21 +++++++++++++++++++++ gulpfile.js | 27 +++++++++++++++++++++++++++ lib/basic-auth-middleware.js | 36 ++++++++++++++++++++++++++++++++++++ lib/error-middleware.js | 28 ++++++++++++++++++++++++++++ route/auth-router.js | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 147 insertions(+) create mode 100644 .eslintrc create mode 100644 gulpfile.js create mode 100644 lib/basic-auth-middleware.js create mode 100644 lib/error-middleware.js create mode 100644 route/auth-router.js diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..ca51474 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,21 @@ +{ + "rules": { + "no-console": "off", + "indent": [ "error", 2 ], + "quotes": [ "error", "single" ], + "semi": ["error", "always"], + "linebreak-style": [ "error", "unix" ] + }, + "env": { + "es6": true, + "node": true, + "mocha": true, + "jasmine": true + }, + "ecmaFeatures": { + "modules": true, + "experimentalObjectRestSpread": true, + "impliedStrict": true + }, + "extends": "eslint:recommended" +} diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..6059bf9 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,27 @@ +'use strict'; + +const gulp = require('gulp'); +const eslint = require('gulp-eslint'); +const mocha = require('gulp-mocha'); + +gulp.task('test', function() { + gulp.src('./test/*-test.js', { + read: false + }) + .pipe(mocha({ + reporter: 'spec' + })); +}); + +gulp.task('lint', function() { + return gulp.src(['**/*.js', '!node_modules']) + .pipe(eslint()) + .pipe(eslint.format()) + .pipe(eslint.failAfterError()); +}); + +gulp.task('dev', function() { + gulp.watch(['**/*.js', '!node_modules/**'], ['lint', 'test']); +}); + +gulp.task('default', ['dev']); diff --git a/lib/basic-auth-middleware.js b/lib/basic-auth-middleware.js new file mode 100644 index 0000000..d4d617a --- /dev/null +++ b/lib/basic-auth-middleware.js @@ -0,0 +1,36 @@ +'use strict'; + +const createError = require('http-errors'); +const debug = require('debug')('cfgram:basic-auth-middleware'); + +module.exports = function(req, res, next) { + debug('auth'); + + var authHeader = req.headers.authorization; + if (!authHeader) { + return next(createError(401, 'authorization header required')); + }; + + var base64str = authHeader.split('Basic ')[1]; + if (!base64str) { + return next(createError(401, 'username and password required')); + }; + + var utf8str = new Buffer(base64str, 'base64').toString(); + var authArr = utf8str.split(':'); + + req.auth = { + username: authArr[0], + password: authArr[1] + }; + + if (!req.auth.username) { + return next(createError(401, 'username required')); + }; + + if (!req.auth.password) { + return next(createError(401, 'password required')); + }; + + next(); +}; diff --git a/lib/error-middleware.js b/lib/error-middleware.js new file mode 100644 index 0000000..9b3756d --- /dev/null +++ b/lib/error-middleware.js @@ -0,0 +1,28 @@ +'use strict'; + +const createError = require('http-errors'); +const debug = require('debug')('cfgram:error-middleware'); + +module.exports = function(err, req, res, next) { + debug('error middleware'); + + console.error('msg:', err.message); + console.error('name:', err.name); + + if (err.status) { + res.status(err.status).send(err.name); + next(); + return; + }; + + if (err.name === 'ValidationError') { + err = createError(400, err.message); + res.status(err.status).send(err.name); + next(); + return; + }; + + err = createError(500, err.message); + res.status(err.status).send(err.name); + next(); +}; diff --git a/route/auth-router.js b/route/auth-router.js new file mode 100644 index 0000000..c2c3133 --- /dev/null +++ b/route/auth-router.js @@ -0,0 +1,35 @@ +'use strict'; + +const jsonParser = require('body-parser').json(); +const debug = require('debug')('cfgram:auth-router'); +const Router = require('express').Router; +const basicAuth = require('../lib/basic-auth-middleware.js'); + +const User = require('../model/user.js'); + +const authRouter = module.exports = Router(); + +authRouter.post('/api/signup', jsonParser, function(req, res, next) { + debug('POST /api/signup'); + + let password = req.body.password; + delete req.body.password; + + let user = new User(req.body); + + user.generatePasswordHash(password) + .then( user => user.save()) + .then( user => user.generateToken()) + .then( token => res.send(token)) + .catch(next); +}); + +authRouter.get('/api/signin', basicAuth, function(req, res, next) { + debug('GET /api/signin'); + + User.findOne({ username: req.auth.username }) + .then( user => user.comparePasswordHash(req.auth.password)) + .then( user => user.generateToken()) + .then( token => res.send(token)) + .catch(next); +}); From 27fefc347dfc9696a59cfee6fc84e6e1c07da13e Mon Sep 17 00:00:00 2001 From: sueanyv Date: Tue, 7 Mar 2017 16:34:05 -0800 Subject: [PATCH 03/14] changes and extra files --- test/auth-route-test.js | 77 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 test/auth-route-test.js diff --git a/test/auth-route-test.js b/test/auth-route-test.js new file mode 100644 index 0000000..7a31206 --- /dev/null +++ b/test/auth-route-test.js @@ -0,0 +1,77 @@ +'use strict'; + +const expect = require('chai').expect; +const request = require('superagent'); +const mongoose = require('mongoose'); +const Promise = require('bluebird'); +const User = require('../model/user.js'); + +mongoose.Promise = Promise; + +require('../server.js'); + +const url = `http://localhost:${process.env.PORT}`; + +const exampleUser = { + username: 'exampleuser', + password: '1234', + email: 'exampleuser@test.com' +}; + +describe('Auth Routes', function() { + describe('POST: /api/signup', function() { + describe('with a valid body', function() { + after( done => { + User.remove({}) + .then( () => done()) + .catch(done); + }); + + it('should return a token', done => { + request.post(`${url}/api/signup`) + .send(exampleUser) + .end((err, res) => { + if (err) return done(err); + console.log('\ntoken:', res.text, '\n'); + expect(res.status).to.equal(200); + expect(res.text).to.be.a('string'); + done(); + }); + }); + }); + }); + + describe('GET: /api/signin', function() { + describe('with a valid body', function() { + before( done => { + let user = new User(exampleUser); + user.generatePasswordHash(exampleUser.password) + .then( user => user.save()) + .then( user => { + this.tempUser = user; + done(); + }) + .catch(done); + }); + + after( done => { + User.remove({}) + .then( () => done()) + .catch(done); + }); + + it('should return a token', done => { + request.get(`${url}/api/signin`) + .auth('exampleuser', '1234') + .end((err, res) => { + if (err) return done(err); + console.log('\nuser:', this.tempUser); + console.log('\ntoken:', res.text); + expect(res.status).to.equal(200); + done(); + }); + }); + }); + }); +}); + From 8d43dfd7b715022ff632d0fb8a91415451621ccc Mon Sep 17 00:00:00 2001 From: sueanyv Date: Tue, 7 Mar 2017 21:12:24 -0800 Subject: [PATCH 04/14] added bearer file --- lib/bearer-auth-middleware.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 lib/bearer-auth-middleware.js diff --git a/lib/bearer-auth-middleware.js b/lib/bearer-auth-middleware.js new file mode 100644 index 0000000..cf81b3a --- /dev/null +++ b/lib/bearer-auth-middleware.js @@ -0,0 +1,7 @@ +'use strict'; + +const jwt = require('jsonwebtoken'); +const createError = require('http-errors'); +const debug = require('debug')('cfgram:bearer-auth-middleware'); + +const User = require('../model/user.js'); From 16d7b94172f55f70f25d70cb8afc502e036089be Mon Sep 17 00:00:00 2001 From: sueanyv Date: Tue, 7 Mar 2017 21:37:18 -0800 Subject: [PATCH 05/14] added bearer file --- lib/bearer-auth-middleware.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bearer-auth-middleware.js b/lib/bearer-auth-middleware.js index cf81b3a..5fa38ae 100644 --- a/lib/bearer-auth-middleware.js +++ b/lib/bearer-auth-middleware.js @@ -4,4 +4,4 @@ const jwt = require('jsonwebtoken'); const createError = require('http-errors'); const debug = require('debug')('cfgram:bearer-auth-middleware'); -const User = require('../model/user.js'); +const User = require('../model/user.js') From 90a1541069fda1aaa2d6b113e603ef7909073836 Mon Sep 17 00:00:00 2001 From: sueanyv Date: Tue, 7 Mar 2017 22:03:55 -0800 Subject: [PATCH 06/14] changes --- lib/bearer-auth-middleware.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bearer-auth-middleware.js b/lib/bearer-auth-middleware.js index 5fa38ae..cf81b3a 100644 --- a/lib/bearer-auth-middleware.js +++ b/lib/bearer-auth-middleware.js @@ -4,4 +4,4 @@ const jwt = require('jsonwebtoken'); const createError = require('http-errors'); const debug = require('debug')('cfgram:bearer-auth-middleware'); -const User = require('../model/user.js') +const User = require('../model/user.js'); From 09d0bf38bd78404d3293c8d948bce902cef6f12a Mon Sep 17 00:00:00 2001 From: sueanyv Date: Tue, 7 Mar 2017 22:06:06 -0800 Subject: [PATCH 07/14] changes and testing branch problem --- lib/bearer-auth-middleware.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/bearer-auth-middleware.js b/lib/bearer-auth-middleware.js index cf81b3a..390c860 100644 --- a/lib/bearer-auth-middleware.js +++ b/lib/bearer-auth-middleware.js @@ -5,3 +5,6 @@ const createError = require('http-errors'); const debug = require('debug')('cfgram:bearer-auth-middleware'); const User = require('../model/user.js'); +const debug = require('debug')('cfgram:bearer-auth-middleware'); + +const User = require('../model/user.js'); From 9eba377ead7fd8791d69c2a8feda4313794aa90b Mon Sep 17 00:00:00 2001 From: sueanyv Date: Tue, 7 Mar 2017 22:09:37 -0800 Subject: [PATCH 08/14] changes and testing branch problem --- lib/bearer-auth-middleware.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/bearer-auth-middleware.js b/lib/bearer-auth-middleware.js index 390c860..cf81b3a 100644 --- a/lib/bearer-auth-middleware.js +++ b/lib/bearer-auth-middleware.js @@ -5,6 +5,3 @@ const createError = require('http-errors'); const debug = require('debug')('cfgram:bearer-auth-middleware'); const User = require('../model/user.js'); -const debug = require('debug')('cfgram:bearer-auth-middleware'); - -const User = require('../model/user.js'); From 345119c7c91042b548ebb00f9c267b30388bd289 Mon Sep 17 00:00:00 2001 From: sueanyv Date: Wed, 8 Mar 2017 15:27:09 -0800 Subject: [PATCH 09/14] changes to lab --- package.json | 5 ++++- route/gallery-router.js | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 route/gallery-router.js diff --git a/package.json b/package.json index 6bfd8ba..f566058 100644 --- a/package.json +++ b/package.json @@ -19,17 +19,20 @@ }, "homepage": "https://github.com/sueanyv/16-basic_auth#readme", "dependencies": { + "aws-sdk": "^2.24.0", "bcrypt": "^1.0.2", "bluebird": "^3.5.0", "body-parser": "^1.17.1", "cors": "^2.8.1", "debug": "^2.6.1", + "del": "^2.2.2", "dotenv": "^4.0.0", "express": "^4.15.2", "http-errors": "^1.6.1", "jsonwebtoken": "^7.3.0", "mongoose": "^4.8.6", - "morgan": "^1.8.1" + "morgan": "^1.8.1", + "multer": "^1.3.0" }, "devDependencies": { "chai": "^3.5.0", diff --git a/route/gallery-router.js b/route/gallery-router.js new file mode 100644 index 0000000..cfe29cc --- /dev/null +++ b/route/gallery-router.js @@ -0,0 +1,33 @@ +'use strict'; + +const Router = require('express').Router; +const jsonParser = require('body-parser').json(); +const createError = require('http-errors'); +const debug = require('debug')('cfgram:gallery-router'); + +const Gallery = require('../model/gallery.js'); +const bearerAuth = require('../lib/bearer-auth-middleware.js'); + +const galleryRouter = module.exports = Router(); + +galleryRouter.post('/api/gallery', bearerAuth, jsonParser, function(req, res, next) { + debug('POST: /api/gallery'); + + req.body.userID = req.user._id; + new Gallery(req.body).save() + .then( gallery => res.json(gallery)) + .catch(next); +}); + +galleryRouter.get('/api/gallery/:id', bearerAuth, function(req, res, next) { + debug('GET: /api/gallery/:id'); + + Gallery.findById(req.params.id) + .then( gallery => { + if (gallery.userID.toString() !== req.user._id.toString()) { + return next(createError(401, 'invalid user')); + } + res.json(gallery); + }) + .catch(next); +}); From d788f5324adcf1f1aa36ad10685c6261a319d8c4 Mon Sep 17 00:00:00 2001 From: sueanyv Date: Wed, 8 Mar 2017 15:47:40 -0800 Subject: [PATCH 10/14] changes to lab --- model/gallery.js | 0 test/gallery-route-test.js | 116 +++++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 model/gallery.js create mode 100644 test/gallery-route-test.js diff --git a/model/gallery.js b/model/gallery.js new file mode 100644 index 0000000..e69de29 diff --git a/test/gallery-route-test.js b/test/gallery-route-test.js new file mode 100644 index 0000000..7f03523 --- /dev/null +++ b/test/gallery-route-test.js @@ -0,0 +1,116 @@ +'use strict'; + +const expect = require('chai').expect; +const request = require('superagent'); +const mongoose = require('mongoose'); +const Promise = require('bluebird'); + +const User = require('../model/user.js'); +const Gallery = require('../model/gallery.js'); + +const url = `http://localhost:${process.env.PORT}`; + +const exampleUser = { + username: 'exampleuser', + password: '1234', + email: 'exampleuser@test.com' +}; + +const exampleGallery = { + name: 'test gallery', + desc: 'test gallery description' +}; + +mongoose.Promise = Promise; + +describe('Gallery Routes', function() { + afterEach( done => { + Promise.all([ + User.remove({}), + Gallery.remove({}) + ]) + .then( () => done()) + .catch(done) + }); + + describe('POST: /api/gallery', () => { + before( done => { + new User(exampleUser) + .generatePasswordHash(exampleUser.password) + .then( user => user.save()) + .then( user => { + this.tempUser = user; + return user.generateToken(); + }) + .then( token => { + this.tempToken = token; + done(); + }) + .catch(done); + }); + + it('should return a gallery', done => { + request.post(`${url}/api/gallery`) + .send(exampleGallery) + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .end((err, res) => { + if (err) return done(err); + let date = new Date(res.body.created).toString(); + expect(res.body.name).to.equal(exampleGallery.name); + expect(res.body.desc).to.equal(exampleGallery.desc); + expect(res.body.userID).to.equal(this.tempUser._id.toString()); + expect(date).to.not.equal('Invalid Date'); + done(); + }); + }); + }); + + describe('GET: /api/gallery/:id', () => { + before( done => { + new User(exampleUser) + .generatePasswordHash(exampleUser.password) + .then( user => user.save()) + .then( user => { + this.tempUser = user; + return user.generateToken(); + }) + .then( token => { + this.tempToken = token; + done(); + }) + .catch(done); + }); + + before( done => { + exampleGallery.userID = this.tempUser._id.toString(); + new Gallery(exampleGallery).save() + .then( gallery => { + this.tempGallery = gallery; + done(); + }) + .catch(done); + }); + + after( () => { + delete exampleGallery.userID; + }); + + it('should return a gallery', done => { + request.get(`${url}/api/gallery/${this.tempGallery._id}`) + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .end((err, res) => { + if (err) return done(err); + let date = new Date(res.body.created).toString(); + expect(res.body.name).to.equal(exampleGallery.name); + expect(res.body.desc).to.equal(exampleGallery.desc); + expect(res.body.userID).to.equal(this.tempUser._id.toString()) + expect(date).to.not.equal('Invalid Date'); + done(); + }); + }); + }); +}); From dce55f0ab7414067526021231146197b6af0be4b Mon Sep 17 00:00:00 2001 From: sueanyv Date: Wed, 8 Mar 2017 16:07:14 -0800 Subject: [PATCH 11/14] changes to lab --- test/data/butterfly.png | Bin 0 -> 85473 bytes test/lib/server-toggle.js | 30 +++++++++++ test/pic-router-test.js | 102 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 test/data/butterfly.png create mode 100644 test/lib/server-toggle.js create mode 100644 test/pic-router-test.js diff --git a/test/data/butterfly.png b/test/data/butterfly.png new file mode 100644 index 0000000000000000000000000000000000000000..7323969682c59b1c558c37e995dd1bbf07634342 GIT binary patch literal 85473 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 UR>+v-N&o-=07*qoM6N<$f{|kpu>b%7 literal 0 HcmV?d00001 diff --git a/test/lib/server-toggle.js b/test/lib/server-toggle.js new file mode 100644 index 0000000..3551ab2 --- /dev/null +++ b/test/lib/server-toggle.js @@ -0,0 +1,30 @@ +'use strict'; + +const debug = require('debug')('cfgram:server-toggle'); + +module.exports = exports = {}; + +exports.serverOn = function(server, done) { + if (!server.isRunning) { + server.listen(process.env.PORT, () => { + server.isRunning = true; + debug('server up!'); + done(); + }); + return; + }; + done(); +}; + +exports.serverOff = function(server, done) { + if(server.isRunning) { + server.close( err => { + if (err) return done(err); + server.isRunning = false; + debug('server down!'); + done(); + }); + return; + }; + done(); +}; diff --git a/test/pic-router-test.js b/test/pic-router-test.js new file mode 100644 index 0000000..5635e51 --- /dev/null +++ b/test/pic-router-test.js @@ -0,0 +1,102 @@ +'use strict'; + +const expect = require('chai').expect; +const request = require('superagent'); +const debug = require('debug')('cfgram:pic-router-test'); + +const Pic = require('../model/pic.js'); +const User = require('../model/user.js'); +const Gallery = require('../model/gallery.js'); + +const serverToggle = require('./lib/server-toggle.js'); +const server = require('../server.js'); + +const url = `http://localhost:${process.env.PORT}`; + +const exampleUser = { + username: 'exampleuser', + password: '1234', + email: 'exampleuser@test.com' +}; + +const exampleGallery = { + name: 'test gallery', + desc: 'test gallery description' +}; + +const examplePic = { + name: 'example pic', + desc: 'example pic description', + image: `${__dirname}/data/butterfly.png` +}; + +describe('Pic Routes', function() { + before( done => { + serverToggle.serverOn(server, done); + }); + + after( done => { + serverToggle.serverOff(server, done); + }); + + afterEach( done => { + Promise.all([ + Pic.remove({}), + User.remove({}), + Gallery.remove({}) + ]) + .then( () => done()) + .catch(done); + }); + + describe('POST: /api/gallery/:id/pic', function() { + describe('with a valid token and valid data', function() { + before( done => { + new User(exampleUser) + .generatePasswordHash(exampleUser.password) + .then( user => user.save()) + .then( user => { + this.tempUser = user; + return user.generateToken(); + }) + .then( token => { + this.tempToken = token; + done(); + }) + .catch(done); + }); + + before( done => { + exampleGallery.userID = this.tempUser._id.toString(); + new Gallery(exampleGallery).save() + .then( gallery => { + this.tempGallery = gallery; + done(); + }) + .catch(done); + }); + + after( done => { + delete exampleGallery.userID; + done(); + }); + + it('should return a pic', done => { + request.post(`${url}/api/gallery/${this.tempGallery._id}/pic`) + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .field('name', examplePic.name) + .field('desc', examplePic.desc) + .attach('image', examplePic.image) + .end((err, res) => { + if (err) return done(err); + expect(res.body.name).to.equal(examplePic.name); + expect(res.body.desc).to.equal(examplePic.desc); + expect(res.body.galleryID).to.equal(this.tempGallery._id.toString()); + done(); + }); + }); + }); + }); +}); From 35437a23e9a44ac27b94d8d7ddf4268b3b3cd100 Mon Sep 17 00:00:00 2001 From: sueanyv Date: Wed, 8 Mar 2017 16:12:15 -0800 Subject: [PATCH 12/14] adding access key ID and secret access key --- .env | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.env b/.env index 0f8304c..f829098 100644 --- a/.env +++ b/.env @@ -1,3 +1,7 @@ PORT='3000' +API_URL='http://localhost:8000' MONGODB_URI='mongodb://localhost/cfgram' -APP_SECRET='coolsecret' +APP_SECRET='coolpictures' +AWS_BUCKET='svgram' +AWS_ACCESS_KEY_ID='AKIAIA53QT6WFQIMDIPQ' +AWS_SECRET_ACCESS_KEY=‘hPczcXnQse013A5zD2tq/elNdC4mcOFd8XMRk7yK' From 05fa001c77c2a07f9ff379f18e2fd223e6934881 Mon Sep 17 00:00:00 2001 From: sueanyv Date: Wed, 8 Mar 2017 16:26:05 -0800 Subject: [PATCH 13/14] adding access key ID and secret access key --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 27e8853..94932bb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ # Created by https://www.gitignore.io/api/node,vim,osx,macos,linux -*node_modules +node_modules ### Node ### +.env # Logs logs *.log From 33ff301e8e73762650fc1c06dae046ce89396bdc Mon Sep 17 00:00:00 2001 From: sueanyv Date: Wed, 8 Mar 2017 16:34:32 -0800 Subject: [PATCH 14/14] Delete .env --- .env | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 .env diff --git a/.env b/.env deleted file mode 100644 index f829098..0000000 --- a/.env +++ /dev/null @@ -1,7 +0,0 @@ -PORT='3000' -API_URL='http://localhost:8000' -MONGODB_URI='mongodb://localhost/cfgram' -APP_SECRET='coolpictures' -AWS_BUCKET='svgram' -AWS_ACCESS_KEY_ID='AKIAIA53QT6WFQIMDIPQ' -AWS_SECRET_ACCESS_KEY=‘hPczcXnQse013A5zD2tq/elNdC4mcOFd8XMRk7yK'