Skip to content
This repository has been archived by the owner on Sep 4, 2020. It is now read-only.

Commit

Permalink
made an npm package
Browse files Browse the repository at this point in the history
  • Loading branch information
Adriano Raiano committed Mar 16, 2012
1 parent b19ff5f commit d6aebdc
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 74 deletions.
9 changes: 7 additions & 2 deletions README.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -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 [email protected]:adrai/nodeSSO.git`

Expand All @@ -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'
});

Expand Down
86 changes: 44 additions & 42 deletions example/server.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
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,
authPath: authPath,
deauthPath: deauthPath,
successPath: successPath,
validatePath: validatePath
});
});

var everyauth = require('everyauth');

Expand All @@ -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);
Expand All @@ -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'];

Expand Down Expand Up @@ -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()
Expand All @@ -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 <a href="'+authPath+'?consumerToken='+consumerToken+'&callbackUrl=http://localhost:3001/validate/">'+authPath+'?consumerToken='+consumerToken+'&callbackUrl=http://localhost:3001/validate</a>');
res.write('</br>');
res.write('</br>');
res.write('Logout <a href="'+deauthPath+'?callbackUrl=http://www.google.ch">'+deauthPath+'?callbackUrl=http://www.google.ch</a>');
res.end();
res.writeHead(200, { 'Content-Type': 'text/html' });
res.write('Login <a href="'+authPath+'?consumerToken='+consumerToken+'&callbackUrl=http://localhost:3001/validate/">'+authPath+'?consumerToken='+consumerToken+'&callbackUrl=http://localhost:3001/validate</a>');
res.write('</br>');
res.write('</br>');
res.write('Logout <a href="'+deauthPath+'?callbackUrl=http://www.google.ch">'+deauthPath+'?callbackUrl=http://www.google.ch</a>');
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);
Expand Down
40 changes: 16 additions & 24 deletions lib/ssoJuggler.js
Original file line number Diff line number Diff line change
@@ -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,
Expand Down Expand Up @@ -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;
}
Expand All @@ -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 });
Expand All @@ -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);
Expand Down Expand Up @@ -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;
}
Expand All @@ -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;
};
}
20 changes: 14 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,18 +1,26 @@
{
"author": "adrai"
"author": "adrai"
, "name": "nodeSSO"
, "version": "0.0.1"
, "private": false
, "main": "index.js"
, "repository": {
"type": "git"
, "url": "[email protected]: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" : {
}
}

0 comments on commit d6aebdc

Please sign in to comment.