Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

rest-crud-generator

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rest-crud-generator

REST API Generator for Bookshelf.js

  • 0.1.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

Features

  • Create CRUD routes for the passed models
  • Add Bearer authentication to the individual routes
  • Turn of the generation of specified routes

Usage

  1. Require the library const Api = require('rest-crud-generator')
  2. Pass the Bookshelf models to the generate method to create the API calls, with: Api.generate(User)

Adding Authentication:

To enable authentication and change the allowedRole array, run: Api.addBearerAuthentication(validateFunction), the validateFunction looks like this:

function (token, callback) { 
    // correct authentication
    return callback(null, true, {});
    
    // error authenticating
    return callback(null, false);
}

API

generate(model, options)

generates the CRUD routes for the given model

{
    routes: {
        findOne: {
            allowedRoles: [],
            isEnabled: true
        },
        findAll: {
            allowedRoles: [],
            isEnabled: true
        },
        create: {
            allowedRoles: [],
            isEnabled: true
        },
        delete: {
            allowedRoles: [],
            isEnabled: true
        },
        update: {
            allowedRoles: [],
            isEnabled: true
        }
    }
}

addBearerAuthentication(validateFunction)

Adds the bearer authentication to the server authentication. This requires the route to have a Bearer: <token> header that specifies if the user is allowed access to the route.

The validateFunction specifies if this given <token> is correct and access is allowed (boolean). You will want to check this against the UserSession table to see if the token matches an entry.

An example of a fully fledged authentication function:

exports.validateFunction = function (token, callback) {
    UserSessionModel
    .where({ token: token })
    .fetch()
    .then(function (userSession) {
        if (!userSession) {
            return Promise.reject(Boom.badRequest('INVALID_TOKEN'));
        }

        return UserModel.where({ id: userSession.get('user_id') })
        .fetch();
    })
    .then(function (user) {
        if (!user) {
            return Promise.reject(Boom.badRequest('INVALID_TOKEN'));
        }

        var userObj = user;
        userObj.scope = [ user.get('scope') ];

        return callback(null, true, userObj);
    })
    .catch(function (err) {
        return callback(err);
    });
};

Route scheme

Routes are generated on the plural name of the base model separated by _ on the capital letters.

Example: User becomes /user Example: BaseUnit becomes /base_units

Patterns used

  • adapter: Allows us to create a top level interface on an already existing library, ...
    • Example: Create an adapter to be able to use different SQL Engines (postgres, mysql, ...) while keeping the method the same
  • facade: Provides a simplified interface to a larger body of code (such as a class library)
    • Example: the classes CarEngine, CarModel, CarBody, ... that we combine in the Car Facade which has a method: `assembleCar``
  • spies: Are used to confirm that a function is called, these are used in the tests.
    • Example: Did we call the ORM functions, the Route registration functionsm ...

Keywords

FAQs

Package last updated on 15 Aug 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc