// 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); }); };