From 5dbc404bcdd7467f3839a3926ba4c6250551d7e7 Mon Sep 17 00:00:00 2001 From: Hiromitsu FUJITA Date: Tue, 26 Jan 2016 23:48:16 -0800 Subject: [PATCH] Added test case using passport as middleware. --- README.md | 22 +++++++++++++++ package.json | 4 ++- test/controllers/middlewares/passport.js | 25 +++++++++++++++++ test/suites/middlewares.js | 35 ++++++++++++++++++++++++ 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 test/controllers/middlewares/passport.js diff --git a/README.md b/README.md index 840fed1..02d035b 100644 --- a/README.md +++ b/README.md @@ -175,6 +175,28 @@ module.exports = { }; ``` +Another use case is authentication. +The following example uses [passport](https://github.com/jaredhanson/passport) as `middleware': + +```javascript +var passport = require('passport') +; + +module.exports = { + __exprest: { + routes: [{ + action: 'login' + , middleware: passport.authenticate('basic', { session: false }) + }] + } + +, login: function(req, res) { + res.status(200).json({ loginAs: req.user.username }); + } + +}; + ``` + ## License diff --git a/package.json b/package.json index f6aba96..6b239fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "exprest4", - "version": "0.9.0", + "version": "0.9.1", "description": "REST API framework for Express 4.x.", "homepage": "https://github.com/bow-fujita/exprest4", "repository": { @@ -37,6 +37,8 @@ "mocha-lcov-reporter": "~1.0.0", "multer": "~1.1.0", "node-inspector": "^0.12.5", + "passport": "^0.3.2", + "passport-http": "^0.3.0", "should": "~8.1.1", "supertest": "~1.1.0" }, diff --git a/test/controllers/middlewares/passport.js b/test/controllers/middlewares/passport.js new file mode 100644 index 0000000..b7f6c31 --- /dev/null +++ b/test/controllers/middlewares/passport.js @@ -0,0 +1,25 @@ +/*! + * exprest4 + * Copyright (c) 2016 Hiromitsu Fujita + * MIT License + */ + +'use strict'; + +var passport = require('passport') +; + +module.exports = { + __exprest: { + routes: [{ + action: 'login' + , middleware: passport.authenticate('basic', { session: false }) + }] + } + +, login: function(req, res) { + res.status(200).json({ loginAs: req.user.username }); + } + +}; + diff --git a/test/suites/middlewares.js b/test/suites/middlewares.js index d7de1c9..7080a9f 100644 --- a/test/suites/middlewares.js +++ b/test/suites/middlewares.js @@ -9,6 +9,7 @@ var exprest = require(process.env.APP_ROOT) , express = require('express') , request = require('supertest') + , passport = require('passport') , fs = require('fs') , path = require('path') , ctrl_dir = path.join(__dirname, '..', 'controllers', 'middlewares') @@ -18,6 +19,17 @@ var exprest = require(process.env.APP_ROOT) describe('middlewares', function() { before(function(done) { + // Setting up for passport-http + var BasicStrategy = require('passport-http').BasicStrategy; + app.use(passport.initialize()); + passport.use(new BasicStrategy(function(user, pass, callback) { + console.log('User: '+user); + if (user != 'admin') { + return callback(null, false); + } + return callback(null, { username: user }); + })); + exprest.route(app, { controllers: ctrl_dir }); done(); }); @@ -46,4 +58,27 @@ describe('middlewares', function() { }); + describe('passport', function() { + + it('GET /passport no user => 401 Unauthorized', function(done) { + request(app).get('/passport') + .expect(401, done); + }); + + it('GET /passport invalid user => 401 Unauthorized', function(done) { + request(app).get('/passport') + .auth('user', 'x') + .expect(401, done); + }); + + it('GET /passport valid user => 200 OK', function(done) { + request(app).get('/passport') + .auth('admin', 'x') + .expect(200, { + loginAs: 'admin' + }, done); + }); + + }); + });