clack-cors - A Clack middleware to set CORS related HTTP headers.
CLACK-CORS ASDF System Details
Description: A Clack middleware to set
CORS
relatedHTTP
headers.Licence: Unlicense
Author: Alexander Artemenko <svetlyak.40wt@gmail.com>
Homepage: https://40ants.com/clack-cors/
Bug tracker: https://github.com/40ants/clack-cors/issues
Source control: GIT
Depends on: alexandria, log4cl, serapeum
Installation
You can install this library from Quicklisp, but you want to receive updates quickly, then install it from Ultralisp.org:
(ql-dist:install-dist "http://dist.ultralisp.org/"
:prompt nil)
(ql:quickload :clack-cors)
Usage
Returns a Clack middleware which can be used to override CORS
HTTP
headers in response.
You can pass arguments ALLOWED-ORIGIN
, ALLOWED-HEADERS
and ALLOWED-METHODS
to override corresponding headers.
If given, these arguments are extend headers, returned by the main application. For example, if main application
already returns Access-Control-Allow-Headers
with value Content-Type
, then it will be overwritten with
the value Authorization
. To implement a smarter logic, pass as an argument a function of two variables - initial
env
plist and resulting headers plist
. The function should return a string which will be used
to replace a header value.
Also, you can provide a ERROR-RESPONSE
argument which will be used as response
in case if original APP
returns response other than a list of three items. This argument
should be a list like this:
(list 500
(list :Content-Type "application/json")
(list "{\"code\": -1, \"message\": \"Unhandled error.\"}"))
All arguments can be given as a function of two argument, in this case a function
will be called with Lack's env
plist and a plist of headers returned by the main application.
Most useful keys in the env
plist are :REQUEST-METHOD
and :REQUEST-URI
.
Default value to return as Access-Control-Allow-Origin
HTTP
header.
Default value to return as Access-Control-Allow-Headers
HTTP
header.
Default value to return as Access-Control-Allow-Methods
HTTP
header.
Default value to return if main app will not return a list of three items.