1.0.0 • Published 9 years ago

rabble v1.0.0

Weekly downloads
4
License
MIT
Repository
github
Last release
9 years ago

Rabble

Manage a rabble of users.

Usage

export default function(server) {
  return server.registerAsync({
    register : require('rabble'),
    options : {
      privateKey : process.env.JWT_SECRET,

      getUser : function(decodedToken) {
        return UserMapper.find(decodedToken.id);
      },
    },
  });
}

API Endpoints

This module provides some helpers for you, but due to the incredibly diverse nature of databases and user representations, we don't provide any API endpoints. We do, however, provide some samples:

Create User

server.route({
  path : '/user',
  method : 'POST',

  handler : function(request, reply) {

    let user = new User(request.payload);

    let hashPassword = Promise.promisify(request.server.methods.hashPassword);

    let promise = hashPassword(request.payload.password)
      .then((hash) => user.set('password', hash))
      .then((user) => user.save())
      .then((user) => _.omit(user.toObject(), 'password'));

    return reply(promise);
  },

  config : {

    description : 'Create a user',
    notes : 'Authentication not required',
    tags : [ 'api', 'users' ],

    auth : false,
    validate : {
      payload : Joi.object().keys({
        email : Joi.string().email().required(),
        password : Joi.string().required(),
      }),
    },

  },
});

Create Login Token

server.route({
  path : '/token',
  method : 'POST',

  handler(request, reply) {

    let compare = Promise.promisify(request.server.methods.comparePassword);

    let promise = User.find({ email : request.payload.email })
      .then((user) => {
        return compare(request.payload.password, user.get('password'))
          .then((same) => {
            if (! same) {
              throw Boom.unauthorized();
            }

            return request.server.methods.signToken(user);
          });
      })
      .then((token) => {
        return { token : token };
      });

    return reply(promise);
  },

  config : {

    description : 'Create a login token',
    notes : 'Authentication not required',
    tags : [ 'api', 'users' ],

    auth : false,
    validate : {
      payload : Joi.object().keys({
        email : Joi.string().email().required(),
        password : Joi.string().required(),
      }),
    },

  },
});

Get Logged In User

HEAD - check login GET - fetch user data

server.route({
  path : '/user',
  method : [ 'HEAD', 'GET' ],
  handler : function(request, reply) {
    reply(_.omit(request.auth.credentials.toObject(), 'password'));
  },

  config : {

    description : 'Verify login',
    notes : 'Allows GET or HEAD; returns user object for GETs',
    tags : [ 'api' , 'users' ],

  }
});
1.0.0

9 years ago

0.1.1

9 years ago

0.1.0

9 years ago

0.0.2

9 years ago

0.0.1

9 years ago