Coder Social home page Coder Social logo

cors's Introduction

CORS is a generic purpose library for controlling CORS preflight requests within Go server applications. It differs from other implementations in that it is not implemented as http.Handler directly. This allows you to control when / how the CORS preflight validation happens in your workflow.

CORS follows the Cross Origin Resource Sharing W3 specification as described here.

CORS requires Go 1.13 (or higher) as it uses the error functionality that was introduced in Go 1.13.

Go Version All Tests Build Status

Installing

To add to your Go project, just run:

go get -u github.com/theyakka/cors

Getting started

To use validate a preflight request, you would add something like the following to an http.Handler that is registered to handle OPTIONS calls globally (or however you are handling preflights):

o := cors.Options{
    AllowedOrigins: []string{"http*://*.theyakka.com", "http*://theyakka.com"},
    AllowedHeaders: cors.DefaultHeadersWith("Authorization"),
}
c, err := o.NewCORS()
if err != nil {
    // do something with the error
}

c.ValidatePreflight(w, r, func(w http.ResponseWriter, r *http.Request, error *cors.ValidationError) {
    if error != nil {
        // preflight failed - return an error
        return
    }
    // return success
})

See the API documentation for further details.

Features

  • Domain, Header and Method whitelisting
  • Allows for wildcard Domains and Headers
  • Allow credential option
  • Max Age option

Testing

To run all of the tests, execute the following in a terminal window: go test.

To run one of the tests individually, execute the following in a terminal window: go test.

FAQ

Why should I use this and not ____?

The short (and vague answer) is there is no reason. We find that supporting OSS isn't a competition. It's just "our way" of doing things that we thought others would find useful.

In fact, CORS may / may not be the most appropriate choice for your server application. We built it for our specific purposes. If you're using a mostly vanilla http stack and looking for something more straightforward, you may wan to consider using rs/cors.

We'd love for you to give it a try let us know if you like it! We love feedback either way.

Has it been tested in production? Can I use it in production?

The code here has been written based on experiences with clients of all sizes. It has been production tested. That said, code is always evolving. We plan to keep on using it in production but we also plan to keep on improving it. If you find a bug, let us know!

Who the f*ck is Yakka?

Yakka is an agency that makes better apps (be it mobile, web or whatever). We care about products, we work hard, we work fast and we write real code.

We use Flutter, Go and Vue (with some other stuff mixed in) and we like to think that we know how to use them to make awesome products.

Check us out at https://theyakka.com.

Outro

Credits

CORS is sponsored, owned and maintained by Yakka LLC. Feel free to reach out with suggestions, ideas or to say hey / hire us.

CORS draws significantly from the work done on the rs/cors library here. In itself, the rs/cors library will probably be a better fit for most scenarios, we just needed something more "pluggable" for our situation.

Specification issue

If you find an spot that we've missed the specification, please log an issue. Please use the spec issue template and we'll fix it ASAP.

Security

If you believe you have identified a serious security vulnerability or issue with CORS, please report it as soon as possible to [email protected]. Please refrain from posting it to the public issue tracker so that we have a chance to address it and notify everyone accordingly.

License

CORS is released under a modified MIT license. See LICENSE for details.

cors's People

Contributors

lukef avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.