All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
1.1.0 - 2019-09-04
Raxx.Request.uri/1and docs forRaxx.Requestmodule.
- Usage of
iodatamade more explicit in the docs.
1.0.1 - 2019-05-01
- Typespec added for
Raxx.request_port/2so that return type is:inet.port_numbernotinteger.
1.0.0 - 2019-04-16
- Config option for
:extra_statusesremoved. Raxx.reason_phrase/1returnsnilfor unknown status code.- Warnings given when using
Raxx.ServerandRaxx.Routerin the same module. - Warnings given for implementing
handle_request/2in a module usingRaxx.Server.
0.18.1 - 2019-02-19
Raxx.redirect/2no longer adds a HTML body. The body can now be set with an option.
- EExHTML is no longer a dependency.
0.18.0 - 2019-02-07
- Warnings to include
raxx_loggerandraxx_view. mountfield fromRaxx.Request.Raxx.BasicAuthsee the BasicAuthentication extension inRaxx.Kit.Raxx.Session.SignedCookieno longer supported, to be added as extension.Raxx.SimpleClientno longer supported.Raxx.RequestIDno longer supported.
0.17.6 - 2019-02-05
Raxx.ViewandRaxx.Layoutextracted to separate extension project, use{:raxx_view, "~> 0.1.0"}for backwards compatable api.
Raxx.Contextfor passing contextual information about the request/response.
0.17.5 - 2019-02-04
Raxx.Loggerextracted to separate extension project, use{:raxx_logger, "~> 0.1.0"}for backwards compatable api.
0.17.4 - 2019-01-06
- Dialyzer warning from
Raxx.Router.section/2macro fixed.
0.17.3 - 2018-11-22
Raxx.Router.section/2for defining routes that have a middleware stack.- Using macro for
Raxx.Middlewarethat adds default implementations for each callback.
0.17.2 - 2018-11-13
- Support
eex_htmlversions0.1.xand0.2.x.
0.17.1 - 2018-11-01
Raxx.Middlewareto develop composable components for common server functionality.Raxx.Stackmodule to combine middlewares are server modules.
0.17.0 - 2018-10-28
Raxx.SimpleServerbehaviour for servers that only need ahandle_request/2callback. usingRaxx.SimpleServerautomatically implementsRaxx.Serverso the module can be used in a service.
use Raxx.Serverissues a warning if the module implementshandle_request/2, it is expected that such servers will make use of the newRaxx.SimpleServer.Raxx.set_header/2raises anArgumentErrorwhen setting host headers.ArgumentErroris raised instead ofRuntimeErrorin cases of bad headers and body content.Raxx.set_body/2raises anArgumentErrorfor GET and HEAD requests.
Raxx.is_application?, useRaxx.Server.verify_serverinstead.Raxx.verify_application, useRaxx.Server.verify_serverinstead.Raxx.Server.is_implemented?, useRaxx.Server.verify_serverinstead.
0.16.1 - 2018-09-19
Raxx.NotFoundwas incorrectly building body forhandle_requestcallback.
0.16.0 - 2018-09-12
:maximum_body_lengthoptions when usingRaxx.Serverso protect against bad clients.Raxx.set_content_length/3to set the content length of a request or response.Raxx.get_content_length/2to get the integer value for the content length of a message.Raxx.set_attachment/2helper to tell the browser the response should be stored on disk rather than displayed in the browser.Raxx.safe?/1to check if request method marks it as safe.Raxx.idempotent?/1to check if request method marks it as idempotent.Raxx.get_query/1replacement forRaxx.fetch_query/1because it never returns error case.
Raxx.set_body/2will raise an exception for responses that cannot have a body.Raxx.set_body/2automatically adds the "content-length" if it is able.- Requests and Responses now work with iodata.
Raxx.bodyspec changed to include iodata.- Improved error message when using invalid iolist in a view.
Raxx.NotFoundworks with iodata for temporary body during buffering.renderfunction generated byRaxx.Viewsets body to iodata from view, without turning into a binary.
Raxx.set_header/2now raises when setting connection specific headers.
EEx.HTMLreplaced byEExHTMLfrom theeex_htmlhex package.Raxx.html_escape/1replaced byEExHTML.escape_to_binary/1.
Raxx.HTTP1.parse_request/1andRaxx.HTTP1.parse_response/1handle more error cases.- response/request sent when request/response expected.
- multiple "host" headers in message.
- invalid "content-length" header.
- multiple "content-length" headers in message.
- invalid "connection" header.
- multiple "connection" headers in message.
0.15.11 - 2018-09-04
Raxx.View.javascript_variables/1to safely inject values into the JavaScript of a template.
0.15.10 - 2018-09-03
Raxx.HTTP1to handle case insensitive connect headers.
0.15.9 - 2018-09-02
Raxx.Viewto generate render functions fromeextemplates.Raxx.Layoutgenerate views from a reusable layout and set of helpers.EEx.HTML,EEx.HTML.SafeandEEx.HTMLEngine. These are temporary additions, used to provide HTML escaping in view and layout modules. They will be moved toeexor a new project before1.0.
0.15.8 - 2018-08-27
Raxx.SimpleClientA very simple HTTP/1.1 client.
0.15.7 - 2018-08-18
Raxx.HTTP1Tools for parsing and serializing to HTTP1 format.
0.15.6 - 2018-08-09
Raxx.requestsets the raw_path as/when no path component given.
0.15.5 - 2018-08-04
Raxx.request_hostto get the domain or ip a request is for.Raxx.request_portto get the numeric port a request is sent to.
0.15.4 - 2018-05-20
:raxxmodule added that is easier to use from erlang.
0.15.3 - 2018-04-30
- Router will return informative return error like any server module.
0.15.2 - 2018-04-28
Raxx.Server.handle/2to be used by server implemenations when executing aRaxx.Servermodule. Add better error messages in cases of bad responses.
- The type of
Raxx.bodyandRaxx.Data.datais nowbinaryinstead ofString.t()to indicate it may not be an actual string. - Generate request_id without using external
uuiddependency.
0.15.1 - 2018-04-22
Raxx.Requeststruct now has araw_pathfield to hold the unparsed path of the URL.
0.15.0 - 2018-04-18
Raxx.fetch_query/1fetch the decoded query from a request.
- The query field on the
Raxx.Requeststruct is now a binary and not a parsed query. This is changed because there is no formal specification for query string structure. https://stackoverflow.com/questions/24059773/correct-way-to-pass-multiple-values-for-same-parameter-name-in-get-request
URI2is no longer part of this project, user will need to provide their own implementations to decode nested queries.
0.14.14 - 2018-03-21
Raxx.set_secure_browser_headers/1Adds a collection of useful headers when responding to a browser.Raxx.delete_header/2delete a header from request or response.Raxx.RequestIDassign a request id to every request handled by an application
0.14.13 - 2018-03-19
- Secure sessions in signed cookies by using
Raxx.Session.SignedCookie. Raxx.BasicAuthfor setting and verifying credentials using the Basic authentication scheme.
0.14.12 - 2018-03-14
Raxx.get_header/2for fetching a single header value from a request/response.Raxx.redirect/2will generate a redirect response directing browser to another url.- Header values checked for forbidden charachters using
Raxx.set_header/3. Raxx.get_header/3return fallback value if required header is not set.
0.14.11 - 2018-03-08
- The source code is now formatted, ensuring code is properly formatted is part of CI and a requirement for contributions.
0.14.10 - 2018-02-24
- Default page in
Raxx.Serverreturned with status 404.
0.14.9 - 2018-02-07
Raxx.Loggersets request metadata on the logger.
0.14.8 - 2018-02-05
:extra_statusesconfiguration option added.
Raxx.Loggeruses@implfor allRaxx.Servercallbacks.
0.14.7 - 2018-01-30
Raxx.Loggermiddleware for basic request logging.
0.14.6 - 2018-01-03
- Typespec for
Raxx.set_body/2reuses body type to fix issue with a binary not being a subtype ofiolist.
1.0.0-rc.2(0.14.5) - 2017-12-29
- Types
headersandbodyadded toRaxxmodule.
- Typespecs for
Raxx.response/1accepts atom identifiers for status codes. - Typespecs for
Raxx.set_body/2andRaxx.set_header/3fixed to accept both Raxx message types.
0.14.4 - 2017-12-28
Raxx.is_application?/1Test to see if an application is compatable to run on Raxx Servers.Raxx.verify_application/1Same test asis_application?/1but returns informativ error.- Typespecs for
Raxx.split_path/1andRaxx.set_body/2
0.14.3 - 2017-12-12
- Typespecs for all public functions.
- Dialyzer step added to CI.
0.14.2 - 2017-11-14
- Correctly split file on new lines when generating status code helpers.
0.14.1 - 2017-11-05
Raxx.reason_phrase/1Get the HTTP/1 reason phrase for each status code.
- Dependency on http_status no longer necessary.
1.0.0-rc.1(0.14.0) - 2017-10-29
handle_headershas been renamed tohandle_head. As previously decribed in README.
- Informative error raised for returning incomplete response without new state
1.0.0-rc.0(0.13.0) - 2017-10-16
Raxx.Trailerhas been renamed toRaxx.Tail.handle_trailershas been renamed tohandle_tail.Raxx.Fragmenthas been replaced byRaxx.Data.handle_fragmenthas been replaced byhandle_data
- Specific header modules that were prevously deprecated.
Raxx.ConnectionRaxx.ContentLengthRaxx.LocationRaxx.ReferrerRaxx.TransferEncodingRaxx.UserAgent
0.12.3 - 2017-10-14
- Using
Raxx.Serverimports helper functions fromRaxx. - Using
Raxx.ServeraliasesRaxx.Request. - Using
Raxx.ServeraliasesRaxx.Response.
- Dependency on
Plugis not needed. - Support for Elixir 1.4,
Raxx.Routerhad bugs.
0.12.2 - 2017-10-11
Raxx.trailer/0completes request without any extra metadata.handle_request/2added toRaxx.Serverbehaviour.- Default implementations added to
Raxx.Servercallbacks. Raxx.Routerwill forward request to controllers based on request patterns.
0.12.1 - 2017-09-24
- Cannot set HTTP headers with uppercase attribute.
- Cannot add an HTTP header twice.
0.12.0 - 2017-08-31
- Replace simple interface with a streaming interface through
Raxx.Server. See full article. - Build messages with
Raxxmodule instead orRaxx.RequestandRaxx.Response.
Raxx.complete?/1returnstruefor aniolistbody