renamed plugins

This commit is contained in:
Ritchie Martori
2011-11-26 14:43:47 -08:00
parent 196246055f
commit 96e3a9be23
13 changed files with 507 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
var Model = require('../../model');
var Group = module.exports = Model.spawn({
collection: 'groups',
plugin: 'users',
description: {
name: {type: 'string', unique: true},
creator: 'string'
},
allowed: {
read: 'root',
write: 'creator',
remove: 'creator',
create: 'root'
}
});
var defaults = ['root', 'admin', 'public'];
defaults.forEach(function(group) {
var g = {name: group, creator: 'root'};
Group
.spawn()
.unlock()
.find(g)
.set(g)
.save()
;
});

View File

@@ -0,0 +1,9 @@
var Collection = require('../../collection')
, Group = require('./group')
;
module.exports = Collection.spawn({
collection: 'groups',
plugin: 'users',
model: Group
});

View File

@@ -0,0 +1,83 @@
var app = require('../../app')
, Group = require('./group')
, Groups = require('./groups')
, User = require('./user')
, Users = require('./users')
, ObjectID = require('mongodb').BSON
;
function user(action, params, req, res) {
User
.spawn()
.for(req)
.set(params)
.notify(res)
[action]()
;
}
app.post('/users', function(req, res) {
user('save', req.body, req, res);
});
app.post('/users/login', function(req, res) {
user('login', req.body, req, {
send: function(u) {
u.auth = req.sessionID;
res.send(req.session.user = u);
}
});
});
app.get('/users/logout', function(req, res) {
req.session.destroy(function() {
res.send({auth: null});
});
});
app.get('/me', function(req, res) {
user('fetch', {email: req.session.user && req.session.user.email}, req, res);
});
app.del('/me', function(req, res) {
var u = req.session.user;
if(u) user('remove', u, req, res);
});
app.get('/users/:id', function(req, res) {
User
.spawn()
.for(req)
.find({_id: req.param('id')})
.notify(res)
.fetch()
;
});
app.post('/users/:email/group', function(req, res) {
var changes = {}
, group = req.body && req.body.group
;
// TODO validate group
changes['groups.' + group] = 1;
User
.spawn()
.for(req)
.find({email: req.param('email')})
.set({$set: changes})
.notify(res)
.save()
;
});
app.get('/users', function(req, res) {
Users
.spawn({
query: req.params
})
.for(req)
.notify(res)
.fetch()
;
});

62
lib/plugins/users/user.js Normal file
View File

@@ -0,0 +1,62 @@
var Model = require('../../model')
, ObjectID = require('mongodb').BSONPure.ObjectID
, _ = require('underscore')
;
module.exports = Model.spawn({
collection: 'users',
plugin: 'users',
description: {
email: {type: 'email', unique: true},
password: 'password',
name: 'string',
auth: 'string',
removed: 'boolean',
groups: 'object'
},
allowed: {
read: 'public',
write: 'creator',
remove: 'creator',
create: 'public',
special: {
groups: {read: 'public', write: 'root'},
email: {read: 'creator'}
}
},
toJSON: function() {
var j = Model.toJSON.apply(this, arguments);
// remove password before sending to clients
delete j.password;
return j;
},
set: function(changes) {
// prevent ever storing a real password
changes.password && (changes.password = this.hash(changes.password));
return Model.set.apply(this, arguments);
},
login: function() {
if(!this.get('email') || !this.get('password')) this.error('User email and password are required', 'Required Field');
return this.fetch();
},
hash: function(password) {
return password + 'hash!';
},
defineRoutes: function() {
// routes in ./index.js
}
});

View File

@@ -0,0 +1,9 @@
var Collection = require('../../collection')
, User = require('./user')
;
module.exports = Collection.spawn({
collection: 'users',
plugin: 'users',
model: User
});