Skip to content

Releases: byronka/minum

v8.0.6 handle bad URL-encodings better - simply skip

16 Jan 02:34
Compare
Choose a tag to compare

handle bad URL-encodings better - simply skip

It was discovered that if a user sent a request with improperly-formed URL-encoded data, it would sometimes cause a 500 error. This was not a significant issue, but ergonomically the system should not react so strongly for a relatively minor issue.

This adjustment takes a milder approach, simply moving on to the next key-value pair and logging about the action.

v8.0.5 Fixing security vulnerabilities

24 Nov 19:46
Compare
Choose a tag to compare

v8.0.4 Various improvements

11 Nov 20:36
Compare
Choose a tag to compare

v8.0.3 Bug fix

15 Sep 17:31
Compare
Choose a tag to compare

v8.0.2 Better edge condition handling, documentation

08 Sep 00:43
Compare
Choose a tag to compare

v8.0.1 - documentation

28 Aug 00:00
Compare
Choose a tag to compare

Extra documentation in key areas, and some minor adjustments. See RELEASE_NOTES.md

v8.0.0 - partial ranges

17 Aug 17:01
Compare
Choose a tag to compare

See RELEASE_NOTES.md for further information

Handle incoming body better

04 Aug 16:23
Compare
Choose a tag to compare

See RELEASE_NOTES.md

v6.0.0 Handle streaming large files

07 Jul 21:44
Compare
Choose a tag to compare

New feature: streaming output from server

Breaking change: Response constructors converted to factory methods. Order of parameters adjusted in certain cases for greater consistency.

A missing capability of the Minum server was to send large files. Yes, it was reasonable to send files up to around several megabytes, but before this change, the data would take room in the server's memory. If the server were making a large
file available and there were many requests, it could easily eat up the entire memory.

Now, the Response object and WebFramework have had their code adjusted to enable this without undue requirements. The constructors in Response were converted to factory methods, and some of these are intended to be used for streaming large data, such as buildLargeFileResponse and buildStreamingResponse.

There is no limit to the file size being served. Memory usage will be minimally impactful.

To migrate to version 6 more easily:

Do a global search and replace: "new Response" -> "Response.buildLeanResponse". That will fix a bunch of the cases. The rest are likely "Response.buildResponse", but update those as necessary. In several cases, it will be required to reorder the parameters - the extraHeaders parameter is now the second parameter in almost all the Response factory methods. In some cases, you will find calls to a now-deleted constructor which would provide a status code and body but no extra headers. These should be fixed to include the necessary headers, such as Map.of("Content-Type", "text/plain")

v5.0.0 - Refactorings

02 Jul 00:28
Compare
Choose a tag to compare

Excellent test coverage enables fearless refactoring.

It is closing in on a year past beta. We have stability and high test
coverage, let's apply the recommendations from linting tools, informed
by our tests and usage scenarios.

Improvements:

  • Several class methods and constructors would pass mutable data, leading to the possibility of
    subtle bugs. Where possible, these have been corrected.
  • Made several methods package-private, to lower scope. Removed methods if possible - e.g. see Context.
  • Consistency and conventionality improvements.
  • Applying recommendations from linting tools that would forestall bugs, such as setting the charset
    instead of relying on the system default.
  • Organizing the files better. All files are now in subpackages of "minum".
  • Improved documentation.
  • Removed need for Context object during construction of some classes.
  • Added new tools for regular examination of the code - information is provided during compilation
    and running make lint.

Moved to different package:

  • Context (globally adjust like this: find src/ -type f -name "*.java" -exec sed -i 's/com\.renomad\.minum\.Context/com.renomad.minum.state.Context/g' {} \;)
  • Constants (globally adjust like this: find src/ -type f -name "*.java" -exec sed -i 's/com\.renomad\.minum\.Constants/com.renomad.minum.state.Constants/g' {} \;)
  • ActionQueue (globally adjust like this: find src/ -type f -name "*.java" -exec sed -i 's/com\.renomad\.minum\.utils\.ActionQueue/com.renomad.minum.queue.ActionQueue/g' {} \;)

Removed:

  • Context.getFileUtils - instead of obtaining from Context, build: new FileUtils(logger, constants);
  • Several other public methods from Context that only related to Minum internals

Adjusted:

  • PathDetails is no longer a record. Its methods moved to be prefixed with "get" with adjusted capitalization
  • TagInfo, same thing
  • HtmlParseNode, same thing
  • On TagInfo, the attributes are further encapsulated - it is no longer possible to grab the collection. Get an attribute with "getAttribute()"

Removed use of Context in constructors:

  • Headers
  • RequestLine

Moved:

  • RequestLine.PathDetails was moved to its own file. It can now be called on its own, "PathDetails" (globally adjust like
    this: find src/ -type f -name "*.java" -exec sed -i 's/RequestLine\.PathDetails/PathDetails/g' {} \;)