usr
Version:
User and groups management rest webservice
215 lines (214 loc) • 7.2 kB
JavaScript
(function() {
var Auth, Component;
var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) {
for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; }
function ctor() { this.constructor = child; }
ctor.prototype = parent.prototype;
child.prototype = new ctor;
child.__super__ = parent.prototype;
return child;
};
Component = require('../component');
module.exports = Auth = (function() {
__extends(Auth, Component);
function Auth(app) {
this.app = app;
console.log("CONSTRUCT :");
console.log(app.stores);
console.log(this.app.stores);
this._everyAuth();
this._routes();
}
Auth.prototype.addUser = function(source, id, datas, cb) {
var store, _;
if (source == null) {
source = '';
}
if (id == null) {
id = '';
}
if (datas == null) {
datas = {};
}
_ = this;
console.log("ADDUSER ?");
store = this.app.stores.user;
return store.addUser(source, id, datas, function(err, userId) {
_.checkErr(err);
console.log("ADDED :");
console.log(_.app.stores);
cb(null, userId);
return _.emit('user/new', {
userId: userId,
source: source,
id: id
});
});
};
Auth.prototype.login = function(source, id, datas, user, cb) {
var store, _;
_ = this;
store = this.app.stores.user;
console.log("LOGIN ?");
console.log(_.app.stores);
if (user !== null) {} else {
return store.findUserBySourceAndId(source, id, function(err, user) {
console.log("DID WE FIND ?");
console.log(_.app.stores);
console.log(err);
if (err != null) {
if (err[0] === 'Not found') {
return store.addUser(source, id, datas, function(err, userId) {
return store.findUserById(userId, function(err, user) {
cb(null, user);
_.app.event.emit('user/login', {
userId: user.id
});
});
});
} else {
cb(err, null);
}
} else {
if (source === 'local') {
if (datas.password !== user[source].password) {
cb(['Wrong Password'], null);
return;
}
}
_.app.event.emit('user/login', {
userId: user.id
});
cb(null, user);
}
});
}
};
Auth.prototype._routes = function() {
var _;
_ = this;
this.routeGet('/logout/*', function(req, res) {
req.logout();
delete req.session.token;
if ((req.params != null) && (req.params[0] != null) && req.params[0] !== '') {
res.redirect(req.params[0]);
return;
}
return res.redirect('/');
});
this.routeGet('/login/*', function(req, res) {
if ((req.params != null) && (req.params[0] != null) && req.params[0] !== '') {
req.session.url = req.params[0];
}
if (req.user != null) {
res.redirect('/redirect/');
return;
}
console.log("REDIRECT LOCAL AUTH");
return res.redirect('/auth/local');
});
this.routeGet('/info/:token/:appToken', function(req, res) {
var json;
json = {};
return _.app.token.getInfo(req.params.token, req.params.appToken, function(err, info) {
_.checkErr(err);
return res.json(info);
});
});
return this.routeGet('/redirect', function(req, res) {
var tokenCallback;
if (!req.loggedIn) {
res.redirect('/login/');
return;
}
tokenCallback = function(err, token) {
var url;
req.session.token = token;
if (req.session.url != null) {
url = req.session.url + token;
req.session.url = null;
res.redirect(url);
} else {
res.json({
token: token
});
}
};
if (req.session.token != null) {
return tokenCallback(null, req.session.token);
} else {
return _.app.token.add(req.user.id, {}, tokenCallback);
}
});
};
Auth.prototype._everyAuth = function() {
var providerConfigs, providerName, store, _, _ref;
_ = this;
store = this.app.stores.user;
console.log("EVERYAUTH :");
console.log(this.app.stores);
this.everyAuth = require('everyauth');
this.everyAuth.everymodule.findUserById(function(id, cb) {
console.log("FIND USER BY ID ??" + id);
return store.findUserById(id, cb);
});
this.everyAuth.password.loginWith('email').getLoginPath('/auth/local').postLoginPath('/auth/local').loginView('login').authenticate(function(login, password) {
var promise;
console.log("PASSWORD AUTHENTIFICATION");
console.log(store);
promise = this.Promise();
_.login('local', login, {
login: login,
password: password
}, null, function(err, user) {
console.log("AUTHENTIFICATION RES");
console.log(err);
console.log(user);
if (err !== null) {
promise.fulfill(err);
return;
}
return promise.fulfill(user);
});
return promise;
}).getRegisterPath('/register').postRegisterPath('/register').registerView('register.jade').validateRegistration(function(newUserAttrs, errors) {
return null;
}).registerUser(function(newUserAttrs) {
return null;
}).loginSuccessRedirect('/redirect').registerSuccessRedirect('/redirect');
_ref = _.app.configs.everyAuth;
for (providerName in _ref) {
providerConfigs = _ref[providerName];
this._everyAuth_Providers(providerName, providerConfigs);
}
this.express().use(this.everyAuth.middleware());
return this.everyAuth.helpExpress(this.express());
};
Auth.prototype._everyAuth_Providers = function(providerName, providerConfigs) {
var key, value, _, _results;
_ = this;
_results = [];
for (key in providerConfigs) {
value = providerConfigs[key];
this.everyAuth[providerName][key](value);
this.everyAuth[providerName].redirectPath('/redirect');
_results.push(this.everyAuth[providerName].findOrCreateUser(function(session, accessToken, accessTokenExtra, datas) {
var promise;
datas.accessToken = accessToken;
datas.accessTokenExtra = accessTokenExtra;
promise = _.everyAuth.password.Promise();
_.login(providerName, accessToken, datas, null, function(err, user) {
if (err != null) {
promise.fulfill(err);
return;
}
return promise.fulfill(user);
}, session);
return promise;
}));
}
return _results;
};
return Auth;
})();
}).call(this);