Jump To …

index.js

endPoints/users/

Users Collection API Endpoint

var ObjectID = mongo.ObjectID;
(exports = module.exports = function(house, options){
    

This endpoint requires a data source

    
    var ds = options.ds;
    var col = options.collection;
    
    var handleReq = function(req, res, next) {
        var path = req.hasOwnProperty('urlRouted') ? req.urlRouted : req.url;
        
        var findQuery = function(query) {
            ds.find(col, query, function(err, data){
                if(err) {
                    house.log.err(err);
                } else if(data) {
                    for(var i in data) {
                        delete data[i].pass;
                        
                        if(req.session.data.user && data[i].id.toString() == req.session.data.user.toString()
                         || (req.session.data.groups && req.session.data.groups.indexOf('admin') !== -1)) {

console.log('your own record')

                        } else {
                            var userData = data[i];
                            var avatar = null;
                            
                            if(userData.avatar) {
                                avatar = userData.avatar;
                            }
                            data[i] = {
                                id: data[i].id,
                                name: data[i].name
                            }
                            if(avatar) {
                                data[i].avatar = avatar;
                            }
                        }
                    }
                    res.data(data);
                } else {
                    house.log.err(new Error('no data from mongo'));
                }
            });
        }
        
        var docId;
        
        if(path.length > 1 && path.indexOf('/') === 0) {
            var docId = path.substr(1);
            docId = new ObjectID(docId);
        }
        
        if(req.method == 'GET') {
            
            if(!req.session.data.user) {
                res.data([]);
            }
            
            var query = {};
            
            if(docId) {
                query._id = docId;
                findQuery(query);
            } else {
                if(req.query) {
                    query = req.query;
                    

query mongo id's

                    if(query.hasOwnProperty('id')) {
                        query._id = new ObjectID(query.id);
                        delete query.id;
                    }
                }
                findQuery(query);
            }
            
        } else if(req.method == 'POST') {
            
        } else if(req.method == 'PUT') {
            var query = {};
            if(docId) {
                

must be a user

                if(!req.session.data.user) return;
                

you can only update your own document

                query._id = req.session.data.user;
                
                delete req.fields.groups; // and not your groups
                

TODO hash password

                delete req.fields.pass;
                

TODO handle changing name

                delete req.fields.name;
                
                delete req.fields.id;
            
                ds.update(col, query, {"$set": req.fields}, function(err, data){
                    if(err) {
                        house.log.err(err);
                        res.end('error');
                    } else {
                        house.log.debug(data);
                        res.data({});
                    }
                });
            }
        } else if(req.method == 'DELETE') {
            var query = {};
            if(docId) {
                if(!req.session.data.user) return;
                

you can only delete your own document

                query._id = req.session.data.user;
                
                ds.remove(col, query, function(err, data){
                    if(err) {
                        house.log.err(err);
                        res.end('error');
                    } else {
                        res.data(data);
                    }
                });
                
            }
        } else if(req.method == 'OPTIONS') {
            
        }
    }
    return handleReq;
});

JukeboxJS