New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@dotmh/lambda-controller-cors

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@dotmh/lambda-controller-cors

A Plugin to add Cors support to Lambda Controller

latest
Source
npmnpm
Version
1.2.0
Version published
Maintainers
1
Created
Source

Lambda Controller Logo

Lambda Control - CORS

DotMH Future Gadget Lab Lambda Controller Plugin XO code style Codacy Badge Codacy Badge Build Buy us a tree NPM npm bundle size Contributor Covenant

Adds Cross Origin Resource Sharing (CORS) support to Lambda Controller.

Installation

To Install

npm i @dotmh/lambda-controller-cors

Requires Lambda Controller to be installed. Lambda Controller is a peer dependancy and so won't be installed automatically

Usage

The CORS plugin usage is slightly different to other plugins. To use CORS I recommend it you add it to the contrustor of your controller.

i.e.

const Controller = require('@dotmh/lambda-controller');
const cors = require('@dotmh/lambda-controller-cors');

class MyController extends Controller {
  constructor(event, ctx, cb) {
    super(event,ctx,cb);
    this.add(cors());
    this.cors();
  }
}

This will add the cors plugin and configure the cors headers.

You will notice that we call a function to add, this is because the cors plugin supplies a factory unlike other plugins.

Configuration

The CORS plugin supplies a factory unlike other Lambda Controller plugins. This is so that you can pass it a configuration. The CORS plugin takes a list of allowed origins that CORS requests can come from.

Configuration Object

  // .... your controller class 
  this.add(cors({
    allowed: [
      'localhost', 
      'prod.example.com',
      'dev.example.com'
    ]
  }});
  // ... the rest of your controller 

Configuration Options

Allowed

allowed accepts ether a list of allowed domains , a single domain or a ''. Whent the '' is used cors is added to all hosts i.e. allow all.

Extra Steps

To fully support CORS in AWS API Gateway we have to do some extra configuration. If you are using the Servless Framework.

Options Route

CORS uses a preflight to the route to get the CORS headers before making a full request. To support this we have to configure the a route for options. To support this the mixin automatically adds a cors route handler to your controller called corsOptions. So we need to configure a handler for that

module.exports.corsOptions = function (event, ctx, callback) {
	(new Controller(event, ctx, callback)).corsOptions();
};

and then add that as an http event in the serverless.yml

functions:
  corsOptions:
    handler: handler.corsOptions
    events:
      - http:
          path: "/"
          method: options
          cors:
            origin: '*'
            headers:
            - Content-Type
            - X-Amz-Date
            - Authorization
            - X-Api-Key
            - X-Amz-Security-Token
            - X-Amz-User-Agent
            allowCredentials: true

Every other route

API Gateway needs to know what it should do with CORS requests. I.e. it needs enabling. This has to be done on everyone of your route

To do this you have to add the cors property to your route.

cors:
  origin: '*'
  headers:
  - Content-Type
  - X-Amz-Date
  - Authorization
  - X-Api-Key
  - X-Amz-Security-Token
  - X-Amz-User-Agent
  allowCredentials: true

PLEASE NOTE I hope to update this readme with the steps required when using AWS SAM soon.

Documentation

For the API documentation see https://dotmh.github.io/lambda-controller-cors/

Or to read locally

npm run readdocs

Licence

This package is Treeware. If you use it in production, then we ask that you buy the world a tree to thank us for our work. By contributing to the Treeware forest you’ll be creating employment for local families and restoring wildlife habitats.

Credits

Logo design by @dotmh

Keywords

Lambda

FAQs

Package last updated on 28 Jan 2021

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