Files
habitica/lib/server/auth.js
2012-09-18 01:22:35 -04:00

125 lines
3.7 KiB
JavaScript

// Generated by CoffeeScript 1.3.3
var content, derby, req, schema;
derby = require('derby');
schema = require('../app/schema');
content = require('../app/content');
req = void 0;
module.exports.setRequest = function(r) {
return req = r;
};
module.exports.newUserAndPurl = function() {
var acceptableUid, guid, model, newUser, sess, task, uidParam, _i, _len, _ref;
model = req.getModel();
sess = model.session;
uidParam = req.url.split('/')[1];
if (!sess.userId) {
sess.userId = derby.uuid();
newUser = require('node.extend')(true, {}, schema.userSchema);
_ref = content.defaultTasks;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
task = _ref[_i];
guid = task.id = require('derby/node_modules/racer').uuid();
newUser.tasks[guid] = task;
switch (task.type) {
case 'habit':
newUser.habitIds.push(guid);
break;
case 'daily':
newUser.dailyIds.push(guid);
break;
case 'todo':
newUser.todoIds.push(guid);
break;
case 'reward':
newUser.rewardIds.push(guid);
}
}
model.set("users." + sess.userId, newUser);
}
acceptableUid = require('guid').isGuid(uidParam) || (uidParam === '3' || uidParam === '9');
if (acceptableUid && sess.userId !== uidParam) {
return sess.userId = uidParam;
}
};
module.exports.setupEveryauth = function(everyauth) {
everyauth.debug = true;
everyauth.everymodule.findUserById(function(id, callback) {
return callback(null, null);
});
return everyauth.facebook.appId(process.env.FACEBOOK_KEY).appSecret(process.env.FACEBOOK_SECRET).findOrCreateUser(function(session, accessToken, accessTokenExtra, fbUserMetadata) {
var model, q;
session.habitRpgAuth || (session.habitRpgAuth = {});
session.habitRpgAuth.facebook = fbUserMetadata.id;
model = req.getModel();
q = model.query('users').withEveryauth('facebook', fbUserMetadata.id);
model.fetch(q, function(err, user) {
var id;
id = user && user.get() && user.get()[0].id;
console.log({
err: err,
id: id,
fbUserMetadata: fbUserMetadata
});
if (id && id !== session.userId) {
return session.userId = id;
} else {
model.setNull("users." + session.userId + ".auth", {
'facebook': {}
});
return model.set("users." + session.userId + ".auth.facebook", fbUserMetadata);
}
});
return fbUserMetadata;
}).redirectPath("/");
};
module.exports.setupQueries = function(store) {
store.query.expose('users', 'withId', function(id) {
return this.byId(id);
});
store.query.expose('users', 'withEveryauth', function(provider, id) {
console.log({
withEveryauth: {
provider: provider,
id: id
}
});
return this.where("auth." + provider + ".id").equals(id);
});
return store.queryAccess('users', 'withEveryauth', function(methodArgs) {
var accept;
accept = arguments[arguments.length - 1];
return accept(true);
});
};
module.exports.setupAccessControl = function(store) {
store.accessControl = true;
store.readPathAccess('users.*', function() {
var captures, next;
if (!(this.session && this.session.userId)) {
return;
}
captures = arguments[0];
next = arguments[arguments.length - 1];
return next(captures === this.session.userId);
});
return store.writeAccess('*', 'users.*', function() {
var captures, next, pathArray;
if (!(this.session && this.session.userId)) {
return;
}
captures = arguments[0];
next = arguments[arguments.length - 1];
pathArray = captures.split('.');
return next(pathArray[0] === this.session.userId);
});
};