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.
- OTP 27.1 to CI
- use of binary string in
database_cache_file
option
- Elixir-specific info to README (thanks https://github.com/petrus-jvrensburg)
- OTP 27.0 to CI
- wrong root in MMDB tree parser, failing IPv4 lookups in IPv6 databases that don't include IPv4-mapped IPv6 addresses [wrong since 1.0.0]
- OTP 25.3 to CI
- OTP 26.0 to CI
- OTP 26.1 to CI
- OTP 26.2 to CI
- README
- CI to use latest rebar3 version that's compatible with each covered OTP release
- failed load of .tgz database when its mime type is listed as "application/x-tar"
- broken CLI check when loading database from a HTTP(S) URL
- broken compilation under Elixir's Mix (introduced in 2.3.3)
- unwarranted compilation warning on OTP 25
- OTP 25 to CI
- a few wrong specs
rebar3_lint
warnings on OTP 25rebar3_hank
warnings on OTP 25- Dialyzer warnings on OTP 25
- a few eqWAlizer warnings
- spelling mistakes in CHANGELOG [Kian-Meng Ang]
- the ability to customize database cache path [Bartosz Szafran]
- wrong reference to custom database fetcher in README [Bartosz Szafran]
- decoding of negative integers [made wrong in 2.0.0]
- documentation from edoc to ExDoc
- imported version of
tls_certificate_check
to '~> 1.9'
locus_mmdb:unpack_tree_data_and_data_section/2
to the APIlocus_mmdb_data_codec:parse_on_index/3
to the API- CI on Windows
- no longer warranted run time dependency (
public_key
)
- wrong return of errors during
:check/1
for maps containing maps or arrays which had been checked previously - wrong paths in
:check/1
errors or warnings concerning maps - no longer warranted type definition
- support for retrieving databases using consumer-defined
locus_custom_fetcher
s - support for decoding IEEE-754 infinities in MMDB data
locus:check/1
to API (which replaceslocus:analyze/1
and can be up to 3200% faster 🏎️)- details to MMDB unpacking errors
- linting checks with
rebar3_lint
- dead code checks with
rebar3_hank
⚠️ return type oflocus:lookup/2
(see MIGRATION.md)- database loader to use
persistent_term
instead of ETS - MMDB decoder to perform stricter metadata validations
- MMDB decoder to not crash upon maps containing duplicate keys
- databases downloaded through HTTP(S) without a
last-modified
response header to no longer be cached - imported version of
tls_certificate_check
to '~> 1.7' - single CT suite covering both filesystem and HTTP sources into one for each
- test coverage for the better
⚠️ locus:wait_for_loader/1
from API (deprecated in 1.10.0 - see MIGRATION.md)⚠️ locus:wait_for_loader/2
from API (deprecated in 1.10.0 - see MIGRATION.md)⚠️ locus:wait_for_loaders/2
from API (deprecated in 1.10.0 - see MIGRATION.md)⚠️ locus:get_version/1
from API (deprecated in 1.4.0 - see MIGRATION.md)⚠️ locus:analyze/1
from API (locus:check/1
now fulfills this role - see MIGRATION.md)- deprecated loader options
pre_readiness_update_period
andpost_readiness_update_period
(see MIGRATION.md) - warnings on the use of discontinued GeoLite2 HTTP URLs
- erroneous decoding of 32-bit signed integers as signed when they're less than 4 bytes in length
- small risk of API functions
:await_loader
and:await_loaders
blocking indefinitely longer than they should
- OTP 24 to CI targets
- minimum Erlang/OTP version to 22
- imported version of
tls_certificate_check
to '~> 1.5'
- imported version of
tls_certificate_check
to '~> 1.3' - minimum Erlang/OTP version to 21.2
stacktrace_compat
dependency- (now-)dead code that dealt with pre- OTP 21.2 differences in
stdlib
and such - unmaintained compatibility with rebar 2
- import of MaxMind test data in a way that works both locally and on GHA
- Hex documentation
- imported version of
tls_certificate_check
to 1.2.0
- broken
tls_certificate_check
s when using rebar3 3.14.4
- CI from Travis to GitHub actions
- documentation unavailability in hexdocs.pm (hopefully)
tls_certificate_check
compilation errors on OTP 20.1+, when on top of macOS Big Sur
- CA bundles, based on the latest mkcert.org full CA list as of Nov 13, 2020
- imported
stacktrace_compat
version to benefit from its latest improvements
- erroneous execution of the optional "remote HTTP" test group when a license key is lacking
- misdetection of Mix as being rebar 2 and the erroneous compilation warnings that followed it
- support for OTP 23
- checksum verification algorithm of MaxMind downloads from MD5 to SHA-256
- support for HTTPS redirections across distinct hostnames
- support for not censoring license keys from MaxMind URLs mentioned in logs
- support for censorship of arbitrary query arguments from HTTP URLs mentioned in logs
- truncation of large HTTP URLs mentioned in logs
download_redirected
events to HTTP downloadstoo_many_redirections
andinvalid_redirection
reasons to HTTP download failures- mention of compatibility with other providers
- consumer-subscribed events as to follow the same URL censorship rules as the built-in logger
- documented MaxMind database edition format from atoms to tuples while keeping retrocompatibility
- unmaintained compatibility with rebar 2
- CA bundles, based on the latest Mozilla Included CA Certificate List [Paulo Oliveira]
- misformatted log warning
- use of deprecated function in README example of how to use the library
- display of private function in generated function reference
:await_loader
API function which, contrary to:wait_for_loader
, will await readiness up to the entire specified interval (rather than return upon the first encountered failure)- checksum verification of databases downloaded directly from MaxMind
- rejection of successful HTTP downloads if body size doesn't match
content-length
- censorship of license key from database URLs mentioned in logs
- purging of very large binaries from internally caught exceptions which are known error cases, as to lower the risk of the VM getting OOM-killed when logging formatters get their hands on those very large chunks of data
- default behaviour upon failing to load a database, as to retry loading while exponentially backing off (using very short intervals at first)
:wait_for_loader
and:wait_for_loaders
API functions (use:await_loader
and:await_loaders
instead)
- incomplete spec for
locus_loader:event()
type - wrong spec for
locus_maxmind_download:msg()
andlocus_maxmind_download:event()
types
- documentation as to reflect the recent changes to MaxMind licensing requirements
- support for loading databases with full awareness of license keys (now mandatory)
- the use of discontinued "https://geolite.maxmind.com/download/geoip/database/GeoLite2-..." database URLs
- support for returning types other than map upon successful lookups
- MMDB decoder, which was split into separate tree, data section and analysis modules
- imported
stacktrace_compat
version [1.0.2 => 1.1.1]
- support for OTP 18
- incidents of
locus
managerial processes keeping references to old binaries, upon a database update, for a potentially unlimited time (OTP 20+ only) - broken logging of playground shell on OTP 21.1+
- ability of loading databases from uncompressed tarballs (
.tar
files) - ability of loading unpacked databases (
.mmdb
and.mmdb.gz
files) - stacktrace of caught exceptions to event reporting (including custom logger)
- ability of launching database loaders under library consumers' own supervisors
wait_for_loaders/2
API method for concurrently awaiting multiple database loaders
- log level of HTTP and filesystem database loading failures from warning to error
- HTTP and filesystem loaders into a common loader codebase
- caching of HTTP databases as to store and load compressed
.mmdb
files rather than tarballs - supervision structure as to launch database loaders as transient processes under a new
simple_one_for_one
supervisor - dependency versions:
certifi
[2.4.2 => 2.5.1]ssl_verify_fun
[1.1.4 => 1.1.5]
- support for OTP 17.4 and 17.5
- undocumented support for rebar 2
- half-baked and unwarranted support for
file://
-prefixed URLs
- case-sensitive patterning of
.mmdb
file extensions within tarballs - overly verbose
logger
messages on OTP 21.1+ - HTTPS certificate validation test cases on OTP 22
- Dialyzer warning on OTP 21.3
- crash in HTTP loader when database URL scheme is not in lower case (introduced in 1.6.0)
- new API method for validating loaded databases (
locus:analyze/1
) - new command line tool supporting database validation
- new dependencies:
certifi
2.4.2ssl_verify_fun
1.1.4stacktrace_transform
1.0.2
- test coverage using MaxMind's test data was greatly extended
- database decoder was thoroughly optimized
- documentation was mildly improved
- misguided rejection of UTF-8 strings with non-printable (but valid) codepoints
- unnecessarily strict refusal to load 2.x database formats succeeding 2.0
- safety of database HTTPS downloads was substantially improved by now rejecting expired certificates, mismatched hostnames, self-signed certificates or unknown certificate authorities
- infinite recursion in maliciously crafted databases due to circular paths is now prevented
- unwarranted import of rebar3_hex plugin in library consumers
- ability of tweaking pre- and post-readiness database update periods
- test coverage of HTTP-loaded database updates
- undeterministic test cases which sometimes broke
- official test cases for good data at https://github.com/maxmind/MaxMind-DB/
- string and binary IP address parsing to handle ranges and shortened addresses
- :get_version/1 (use :get_info/2)
- incompatibility with OTP 20.3.1 due to gen_statem bug (issue with init actions)
- incompatibility with OTP 20.3.1 due to gen_statem bug (issue with init actions)
- incompatibility with OTP 20.3.1 due to gen_statem bug (issue with init actions)
- incompatibility with OTP 20.3.1 due to gen_statem bug (issue with init actions)
- ability of loading databases from local file system
- type spec of database entries
- wrong handling of timezones on cached tarballs
- wrong handling of daylight saving time on conditional HTTP requests
- wrong handling of timezones on cached tarballs
- wrong handling of daylight saving time on conditional HTTP requests
- wrong handling of timezones on cached tarballs
- wrong handling of daylight saving time on conditional HTTP requests
- wrong handling of timezones on cached tarballs
- wrong handling of daylight saving time on conditional HTTP requests
- undesirable inlining
- OTP 17.4 and 17.5 support
- matched IP address prefix not being returned on successful lookups
- documentation external links not opening in parent frame
- internal functions showing up as public in documentation
- documented description of
locus_logger:set_loglevel/2
- OTP 18 support
- OTP 19.0, 19.1 and 19.2 support
- ability of consulting database metadata, source and version through
:get_info
- ability of subscribing database loader events
- ability of specifying connect, download start and idle download timeouts
- ability of turning off cache
- ability of downloading .mmdb databases using HTTP
- ability of querying those databases
- ability of caching said databases on the local filesystem
- ability of conditioning said downloads based on cache content and 'if-modified-since' headers
- ability of regularly performing database update attempts
- OTP 19.3 and 20.x for all of the above