mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
115 lines
3.4 KiB
JavaScript
115 lines
3.4 KiB
JavaScript
// Generated by CoffeeScript 1.4.0
|
|
var content, derby, req, schema, _;
|
|
|
|
derby = require('derby');
|
|
|
|
schema = require('../app/schema');
|
|
|
|
content = require('../app/content');
|
|
|
|
_ = require('lodash');
|
|
|
|
req = void 0;
|
|
|
|
module.exports.setRequest = function(r) {
|
|
return req = r;
|
|
};
|
|
|
|
module.exports.newUserAndPurl = function() {
|
|
var acceptableUid, model, sess, uidParam;
|
|
model = req.getModel();
|
|
sess = model.session;
|
|
uidParam = req.url.split('/')[1];
|
|
if (!sess.userId) {
|
|
sess.userId = derby.uuid();
|
|
model.set("users." + sess.userId, schema.newUserObject());
|
|
}
|
|
acceptableUid = require('guid').isGuid(uidParam);
|
|
if (acceptableUid && sess.userId !== uidParam && !(sess.habitRpgAuth && sess.habitRpgAuth.facebook)) {
|
|
return sess.userId = uidParam;
|
|
}
|
|
};
|
|
|
|
module.exports.setupEveryauth = function(everyauth) {
|
|
everyauth.debug = true;
|
|
everyauth.everymodule.findUserById(function(id, callback) {
|
|
return callback(null, null);
|
|
});
|
|
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 && !_.isEmpty(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("/");
|
|
return everyauth.everymodule.handleLogout(function(req, res) {
|
|
if (req.session.habitRpgAuth && req.session.habitRpgAuth.facebook) {
|
|
req.session.habitRpgAuth.facebook = void 0;
|
|
}
|
|
req.session.userId = void 0;
|
|
req.logout();
|
|
return this.redirect(res, this.logoutRedirectPath());
|
|
});
|
|
};
|
|
|
|
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);
|
|
});
|
|
};
|