mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
Pull in a bunch of changes from private branch, initial everyauth code
This commit is contained in:
125
lib/server/auth.js
Normal file
125
lib/server/auth.js
Normal file
@@ -0,0 +1,125 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
var conf, derby, model, sess;
|
||||
|
||||
conf = require("./conf");
|
||||
|
||||
derby = require('derby');
|
||||
|
||||
model = void 0;
|
||||
|
||||
sess = void 0;
|
||||
|
||||
module.exports.setupPurlAuth = function(req) {
|
||||
var acceptableUid, uidParam;
|
||||
model = req.getModel();
|
||||
sess = req.session;
|
||||
sess.userId || (sess.userId = derby.uuid());
|
||||
sess.auth || (sess.auth = {
|
||||
userId: sess.userId
|
||||
});
|
||||
uidParam = req.url.split('/')[1];
|
||||
acceptableUid = require('guid').isGuid(uidParam) || (uidParam === '3' || uidParam === '9');
|
||||
if (acceptableUid && sess.userId !== uidParam) {
|
||||
sess.userId = uidParam;
|
||||
}
|
||||
return model.set('_userId', sess.userId);
|
||||
};
|
||||
|
||||
module.exports.setupEveryauth = function(everyauth) {
|
||||
everyauth.debug = true;
|
||||
everyauth.everymodule.findUserById(function(id, callback) {
|
||||
return model.fetch("users." + id, function(err, user) {
|
||||
var content, guid, newUser, schema, task, _i, _len, _ref;
|
||||
if (user && user.get('id')) {
|
||||
return callback(null, user.get());
|
||||
} else {
|
||||
schema = require('../app/schema');
|
||||
content = require('../app/content');
|
||||
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." + id, newUser);
|
||||
return callback(null, newUser);
|
||||
}
|
||||
});
|
||||
});
|
||||
return everyauth.facebook.appId(process.env.FACEBOOK_KEY).appSecret(process.env.FACEBOOK_SECRET).findOrCreateUser(function(session, accessToken, accessTokenExtra, fbUserMetadata) {
|
||||
var q;
|
||||
q = model.query('users').withEveryauth('facebook', fbUserMetadata.id);
|
||||
model.fetch(q, function(err, user) {
|
||||
console.log({
|
||||
err: err,
|
||||
user: user
|
||||
});
|
||||
if (user.get('id')) {
|
||||
return sess.userId = user.get('id');
|
||||
} else {
|
||||
model.setNull("users." + sess.userId + ".auth", {
|
||||
'facebook': {}
|
||||
});
|
||||
return model.set("users." + sess.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);
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user