diff --git a/README.markdown b/README.markdown
index efcc50e..9a25d14 100644
--- a/README.markdown
+++ b/README.markdown
@@ -4,7 +4,11 @@ The project goal is to provide simple SSO in node.js.
## Getting started
-1. Clone the project:
+1. get nodeSSO:
+
+ npm install nodeSSO
+
+ or
`git clone git@github.com:adrai/nodeSSO.git`
@@ -22,7 +26,8 @@ Using nodeSSO comes very easy to use with everyauth and express.
1. Create a sso juggler
- var ssoJuggler = require('./nodeSSO/lib/ssoJuggler').createSSOJuggler({
+ var SsoJuggler = require('nodeSSO');
+ var ssoJuggler = new SsoJuggler({
authenticationPath: '/auth/openid?openid_identifier=https://www.google.com/accounts/o8/id'
});
diff --git a/example/server.js b/example/server.js
index 25c9c25..6f57922 100644
--- a/example/server.js
+++ b/example/server.js
@@ -1,9 +1,11 @@
+var SsoJuggler = require('../lib/ssoJuggler');
+
var authPath= '/auth',
deauthPath= '/deauth',
successPath= '/success',
validatePath= '/val';
-var ssoJuggler = require('../lib/ssoJuggler').createSSOJuggler({
+var ssoJuggler = new SsoJuggler({
authenticationPath: '/login',
//authenticationPath: '/auth/openid?openid_identifier=https://www.google.com/accounts/o8/id',
cookieExpirationTime: 20,
@@ -11,7 +13,7 @@ var ssoJuggler = require('../lib/ssoJuggler').createSSOJuggler({
deauthPath: deauthPath,
successPath: successPath,
validatePath: validatePath
- });
+ });
var everyauth = require('everyauth');
@@ -20,15 +22,15 @@ everyauth
.openid
.myHostname('http://localhost:3001')
.findOrCreateUser( function (session, userMetadata) {
-
- // Don't forget to save the userIdentifier!
- ssoJuggler.saveUserIdentifier(session, userMetadata.email);
- ssoJuggler.saveAuthSource(session, 'openId');
-
- if (userMetadata.claimedIdentifier.indexOf('https://www.google.com/accounts/o8/id') == 0) {
- ssoJuggler.saveAuthSource(session, 'google');
- }
-
+
+ // Don't forget to save the userIdentifier!
+ ssoJuggler.saveUserIdentifier(session, userMetadata.email);
+ ssoJuggler.saveAuthSource(session, 'openId');
+
+ if (userMetadata.claimedIdentifier.indexOf('https://www.google.com/accounts/o8/id') === 0) {
+ ssoJuggler.saveAuthSource(session, 'google');
+ }
+
return userMetadata;
})
.redirectPath(successPath);
@@ -38,19 +40,19 @@ everyauth.password
.postLoginPath('/login') // Uri path that your login form POSTs to
.loginView("login.jade")
.extractExtraRegistrationParams( function (req) {
- return req;
+ return req;
})
.authenticate( function (login, password, req) {
-
- console.log(login);
- console.log(password);
- console.log(req.param('remember') !== undefined);
-
- var errors = [];
+
+ console.log(login);
+ console.log(password);
+ console.log(req.param('remember') !== undefined);
+
+ var errors = [];
if (!login) errors.push('Missing login');
if (!password) errors.push('Missing password');
if (errors.length) return errors;
- var user = { login: 'user', password: 'password'}
+ var user = { login: 'user', password: 'password'};
if (!user) return ['Login failed'];
if (user.password !== password) return ['Login failed'];
@@ -78,7 +80,7 @@ var express = require('express');
//var RedisStore = require('connect-redis')(express);
var app = express.createServer(
express.bodyParser()
- , express.static(__dirname + "/public")
+ , express.static(__dirname + '/public')
, express.cookieParser()
, express.session({ secret: 'htuayreve'/*, store: new RedisStore */})
, everyauth.middleware()
@@ -89,33 +91,33 @@ ssoJuggler.addRoutes(app);
var consumerToken = 'testToken';
app.get('/', function(req, res){
- res.writeHead(200, { 'Content-Type': 'text/html' });
- res.write('Login '+authPath+'?consumerToken='+consumerToken+'&callbackUrl=http://localhost:3001/validate');
- res.write('');
- res.write('');
- res.write('Logout '+deauthPath+'?callbackUrl=http://www.google.ch');
- res.end();
+ res.writeHead(200, { 'Content-Type': 'text/html' });
+ res.write('Login '+authPath+'?consumerToken='+consumerToken+'&callbackUrl=http://localhost:3001/validate');
+ res.write('');
+ res.write('');
+ res.write('Logout '+deauthPath+'?callbackUrl=http://www.google.ch');
+ res.end();
});
-app.get('/val', function(req, res){
- var userToken = req.param('userToken');
- res.redirect(validatePath+'?consumerToken=' + consumerToken + '&userToken=' + userToken + '&callbackUrl=http://localhost:3001/result');
+app.get('/validate', function(req, res){
+ var userToken = req.param('userToken');
+ res.redirect('/val?consumerToken=' + consumerToken + '&userToken=' + userToken + '&callbackUrl=http://localhost:3001/result');
});
app.get('/result', function(req, res){
- var userIdentifier = req.param('userIdentifier');
- var backConsumerToken = req.param('consumerToken');
- res.writeHead(200, { 'Content-Type': 'text/html' });
- if (backConsumerToken == consumerToken) {
- if (userIdentifier) {
- res.write('This is the user: '+userIdentifier);
- } else {
- res.write('User not valid');
- }
- } else {
- res.write('Wrong sender');
- }
- res.end();
+ var userIdentifier = req.param('userIdentifier');
+ var backConsumerToken = req.param('consumerToken');
+ res.writeHead(200, { 'Content-Type': 'text/html' });
+ if (backConsumerToken == consumerToken) {
+ if (userIdentifier) {
+ res.write('This is the user: '+userIdentifier);
+ } else {
+ res.write('User not valid');
+ }
+ } else {
+ res.write('Wrong sender');
+ }
+ res.end();
});
everyauth.helpExpress(app);
diff --git a/lib/ssoJuggler.js b/lib/ssoJuggler.js
index 14cdf3a..38a9ff1 100644
--- a/lib/ssoJuggler.js
+++ b/lib/ssoJuggler.js
@@ -1,23 +1,7 @@
-var juggler
-
-if (typeof exports !== 'undefined') {
- juggler = exports;
-} else {
- juggler = root.juggler = {};
-}
-
-juggler.VERSION = '0.0.1';
-
-// Create new instance of juggler.
-juggler.createSSOJuggler = function(options) {
- return new Juggler(options);
-};
-
-
/*******************************************
* Juggler
*/
-Juggler = function(options) {
+var Juggler = function(options) {
var defaults = {
authenticationPath: '/login',
cookieExpirationTime: 60,
@@ -47,7 +31,10 @@ Juggler.prototype = {
addRoutes: function(app) {
var checkTokenValidity = function(req, reqToken) {
- var token = req.cookies.token != null ? JSON.parse(req.cookies.token) : null;
+ var token = null;
+ if (req.cookies.token) {
+ token = JSON.parse(req.cookies.token);
+ }
if (token && reqToken == token.token) {
return token;
}
@@ -56,7 +43,7 @@ Juggler.prototype = {
var responseAuth = function(req, res, token) {
- if (token != null) {
+ if (token) {
if (!req.session.remember) {
res.cookie('token', JSON.stringify(token), { maxAge: this.options.cookieExpirationTime*1000 });
@@ -79,14 +66,17 @@ Juggler.prototype = {
var consumerToken = req.param('consumerToken');
var callbackUrl = req.param('callbackUrl');
-
- var token = req.cookies.token != null ? JSON.parse(req.cookies.token) : null;
+
+ var token = null;
+ if (req.cookies.token) {
+ token = JSON.parse(req.cookies.token);
+ }
req.session.callbackUrl = callbackUrl;
req.session.consumerToken = consumerToken;
- if (token != null) {
+ if (token) {
responseAuth(req, res, token);
} else {
res.redirect(this.options.authenticationPath);
@@ -140,8 +130,10 @@ Juggler.prototype = {
}
};
+module.exports = Juggler;
+
// helper
-var mergeOptions = function(options, defaultOptions) {
+function mergeOptions(options, defaultOptions) {
if (!options || typeof options === 'function') {
return defaultOptions;
}
@@ -150,4 +142,4 @@ var mergeOptions = function(options, defaultOptions) {
for (var attrname in defaultOptions) { merged[attrname] = defaultOptions[attrname]; }
for (var attrname in options) { if (options[attrname]) merged[attrname] = options[attrname]; }
return merged;
-};
+}
diff --git a/package.json b/package.json
index 5ca461c..e270e0a 100644
--- a/package.json
+++ b/package.json
@@ -1,18 +1,26 @@
{
- "author": "adrai"
+ "author": "adrai"
, "name": "nodeSSO"
, "version": "0.0.1"
, "private": false
- , "main": "index.js"
+ , "repository": {
+ "type": "git"
+ , "url": "git@github.com:adrai/nodeSSO.git"
+ }
+ , "keywords": ["sso", "login", "web", "session", "cookie", "user"]
+ , "main": "./index.js"
+ , "directories": {
+ "lib": "./lib"
+ }
, "engines": {
- "node": "~v0.4.12"
+ "node": ">= v0.4.0"
}
, "dependencies": {
- }
+ }
, "devDependencies": {
"express": ">=0.0.1"
, "everyauth": ">=0.0.1"
}
- , "scripts": {
- }
+ , "scripts" : {
+ }
}