-
Bug fixes
- Fix
:only
and:only_matching
which were not bypassing requests unless both were enabled
- Fix
-
Enhancements
- Support reading of
conn.host
inPlug.Test
- Add normalization of
:dhfile
for Cowboy's SSL options - Import error reporting and performance of
Plug.Static
- Support reading of
-
Enhancements
- Add
:only_matching
option toPlug.Static
- Add
-
Bug fixes
- Return 400 from
Plug.Static
on invalid paths - Ensure
Plug.Upload
does not error out on invalid access - Ensure query string errors return 400
- Return 400 from
-
Enhancements
- Raise on cookie overflow
- Log (with :debug level) when session cookie cannot be decoded
-
Bug fixes
- Ensure Plug.Parsers fail with request too large even when read_length > length
-
Enhancements
- Add
:brotli
toPlug.Static
- Add
-
Bug fixes
- Fixed session verification when token may have the
--
separator
- Fixed session verification when token may have the
- Enhancements
- Only log errors if the exception has 5xx status code
- Warn when rendering non 5xx status code in Plug.Debugger
- Use URL safe variant on crypto (old tokens are still valid but new ones will be generated)
- Allow custom content-type when passing a map body in
Plug.Test
-
Enhancements
- Raise if new lines are used in header values
-
Bug fix
- Allow mime type lookup of uppercase extensions
- Do not validate uppercase headers in production to avoid performance hits
- Prevent Plug.Parsers from clobbering existing conn.params when part of it is unfetched
- Bug fix
- Ensure cookie store returns a Session ID so they can be dropped
- Enhancements
- Allow configuring all options supported by the underlying transport (i.e. cowboy)
-
Enhancements
- Allow custom headers in
Plug.Static
- Allow custom headers in
-
Bug fix
- No longer automatically assume "priv" for cert and key files for Cowboy SSL
- Raise if response has been sent more than once in test connection
- Raise when body is nil on
Plug.Conn.resp/3
- Show more info and escape messages in
Plug.Debugger
-
Enhancements
- Support
:rewrite_on
onPlug.SSL
- Add
Plug.Conn.merge_resp_headers/2
- Support
-
Bug fix
- Ensure message encryptor and verifier do not error on bad data
-
Enhancements
- Add
conn.request_path
- Raise if
put_session/3
is invoked when response is sent
- Add
-
Bug fixes
- Fix empty params being encoded into query string as '&'
-
Deprecations
Plug.Conn.full_path/2
is deprecated in favor ofconn.request_path
Plug.Test.put_req_header/3
andPlug.Test.delete_req_header/3
is deprecated in favor of similarly named functions inPlug.Conn
-
Enhancements
- Raise if a header in upcase is given
- Store timestamps in sessions ETS table and document each entry format
- Allow private options when specifying routes in
Plug.Router
- Allow the session to be cleared and ignored when an invalid CSRF token is given
- Allow log level to be configured in
Plug.Logger
- Generate masked CSRF tokens to avoid BREACH attacks
-
Backwards incompatible changes
Plug.Logger
no longer sets the request id. UsePlug.RequestId
instead
-
Enhancements
- Add
Plug.HTML
- Add
-
Bug fixes
- Do not crash on poorly encoded cookies
- Decode parameters before matching on the router
-
Enhancements
- Add
Plug.SSL
with redirection from HTTP and HSTS support - Remove the need for
:encrypt
option fromPlug.Session.COOKIE
. The need for encryption can be fully specified by passing:encrypted_salt
option. This improvement is backwards compatible.
- Add
-
Bug fixes
- Ensure we don't parse body params if they were already parsed
-
Enhancements
- Add
query_params
andbody_params
to keep query and body parameters apart fromparams
- Allow custom encoders when encoding query parameters
- Assert valid utf-8 on url encoded and multipart bodies
- Add
-
Bug fixes
- Use only body parameters when detecting method override
- Add Vary header when serving gzipped content in Plug.Static
-
Deprecations
fetch_params/2
is deprecated in favor offetch_query_params/2
-
Bug fixes
- Ensure test adapter reuses the given connection
-
Deprecations
- The
:headers
option inPlug.Test.conn/4
is deprecated in favor ofput_req_header/3
- The
-
Enhancements
- Add
:log_on_halt
option toPlug.Builder
andPlug.Router
- Use raw files and delayed writes on upload
- Add
-
Bug fixes
- Do not read the whole request body at once
- Improve performance of url encoded params
-
Deprecations
Plug.Builder.compile/1
andPlug.Builder.compile/2
are deprecated in favor of explicitPlug.Builder.compile/3
-
Enhancements
- Allow Plug mimes to be configured via application environment
- Extend JSON parser to be compatible with all json compatible content types. This includes types with suffix
+json
- Add
Plug.Conn.clear_session/1
-
Bug fixes
- Do not require cowboy at compile time
- Also parse request bodies on DELETE requests
-
Enhancements
- Add
Plug.Conn.async_assign/3
andPlug.Conn.await_assign/3
to start and await for assigns asynchronously, mimic'ingTask.async/1
andTask.await/2
behaviour - Add
Plug.Conn.WrapperError
to propagate an error with the connection for better debugging by eitherPlug.Debugger
orPlug.ErrorHandler
- Add
Plug.Conn.update_resp_header/4
to update a response header or set its initial value if not present
- Add
-
Bug fixes
- Skip parsing of files when no filename is sent
- Fix how script_name are accumulated with multiple calls to
Plug.Router.forward/2
-
Backwards incompatible changes
Plug.CSRFProtection
now uses a session to store tokens. Tokens are now generated on demand and can be accessed viaPlug.CSRFProtection.get_csrf_token/0
-
Enhancements
- Add
:only
option toPlug.Static
to avoid all requests triggering file system queries - Add ETag management to
Plug.Static
when requests to not contain a versioned query string - Enforce atom or string keys in
Plug.Conn.put_session/3
and friends and normalize keys to strings
- Add
-
Bug fixes
- Add UTF-8 tag to debugger templates
-
Backwards incompatible changes
Plug.CSRFProtection
now uses a cookie instead of session and expects a"_csrf_token"
parameter instead of"csrf_token"
-
Enhancements
- Add
Plug.Conn.full_path/1
- Add
Plug.CSRFProtection
that adds cross-forgery protection - Add
Plug.ErrorHandler
that allows an error page to be sent on crashes (instead of a blank one) - Support host option in
Plug.Router
- Add
-
Backwards incompatible changes
- Add
Plug.Router.Utils.build_match/1
was renamed tobuild_path_match/1
- Add
-
Bug fixes
- Clean up
{:plug_conn, :sent}
messages from listener inbox and ensure connection works accross processes
- Clean up
-
Deprecations
- Deprecate
recycle/2
in favor ofrecycle_cookies
in Plug.Test
- Deprecate
-
Enhancements
- Use PKCS7 padding in MessageEncryptor (the same as OpenSSL)
- Add support for custom serializers in cookie session store
- Allow customization of key generation in cookie session store
- Automatically import
Plug.Conn
in Plug builder - Render errors from Plug when using Ranch/Cowboy nicely
- Provide
Plug.Crypto.secure_compare/2
for comparing binaries - Add
Plug.Debugger
for helpful pages whenever there is a failure during a request
-
Deprecations
- Deprecate
:accept
in favor of:pass
in Plug.Parsers
- Deprecate
-
Enhancements
- Add
Plug.Conn.Utils.media_type/1
to provide media type parsing with wildcard support - Do not print adapter data by default when inspecting the connection
- Allow plug_status to simplify the definition of plug aware exceptions
- Allow cache headers in
Plug.Static
to be turned off
- Add
-
Bug fix
- Support dots on header parameter parsing
-
Enhancements
- Add a
Plug.Parsers.JSON
that expects a JSON decoder as argument
- Add a
-
Bug fix
- Properly populate
params
field for test connections - Fix
Plug.Logger
not reporting the proper path
- Properly populate
-
Enhancements
- Add
fetch_session/2
,fetch_params/2
andfetch_cookies/2
so they can be pluggable - Raise an error message on invalid router indentifiers
- Add
put_status/2
and support atom status codes - Add
secret_key_base
field to the connection
- Add
-
Backwards incompatible changes
- Add
encryption_salt
andsigning_salt
to the CookieStore and derive actual keys fromsecret_key_base
- Add
-
Enhancements
- Support Elixir 1.0.0-rc1
- Support haltable pipelines with
Plug.Conn.halt/2
- Ensure both Plug.Builder and Plug.Router's
call/2
are overridable
-
Bug fix
- Properly report times in Logger
-
Backwards incompatible changes
- Remove support for Plug wrappers
- Enhancements
- Add
Plug.Logger
- Add
conn.peer
andconn.remote_ip
- Add
Plug.Conn.sendfile/5
- Allow
call/2
fromPlug.Builder
to be overridable
- Add
- Enhancements
- Update to Cowboy v1.0.0
- Update mime types list
- Update to Elixir v0.15.0
- Enhancements
- Update to Elixir v0.14.3
- Cowboy adapter now returns
{:error,:eaddrinuse}
when port is already in use - Add
Plug.Test.recycle/2
that copies relevant data between connections for future requests
-
Enhancements
- Add ability to configure when
Plug.Parsers
raisesUnsupportedMediaTypeError
- Add
Plug.Conn.Query.encode/1
- Add
CookieStore
for session
- Add ability to configure when
-
Bug fixes
- Ensure plug parses content-type with CRLF as LWS
-
Enhancements
- Update to Elixir v0.14.0
- Update Cowboy adapter to v0.10.0
- Add
Plug.Conn.read_body/2
-
Backwards incompatible changes
Plug.Parsers
now expect:length
instead of:limit
and also accept:read_length
and:read_timeout
- Enhancements
- Update to Elixir v0.13.3
- Enhancements
- Update to Elixir v0.13.2
- Enhancements
- Update to Elixir v0.13.1
- Enhancements
- Remove
:mime
dependency in favor ofPlug.MIME
- Improve errors when Cowboy is not available
- First hex package release
- Remove
-
Enhancements
- Support
before_send/1
callbacks - Add
Plug.Static
- Allow iodata as the body
- Do not allow response headers to be set if the response was already sent
- Add
Plug.Conn.private
to be used as storage by libraries/frameworks - Add
get_req_header
andget_resp_header
for fetching request and response headers
- Support
-
Backwards incompatible changes
Plug.Connection
was removed in favor ofPlug.Conn
Plug.Conn
is now a struct- assigns, cookies, params and sessions have been converted to maps
- Definition of the Plug specification