View Source Changelog
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.
[2.3.6] - 2022-09-20
Fixed
- failed load of .tgz database when its mime type is listed as "application/x-tar"
[2.3.5] - 2022-09-20
Fixed
- broken CLI check when loading database from a HTTP(S) URL
[2.3.4] - 2022-09-12
Fixed
- broken compilation under Elixir's Mix (introduced in 2.3.3)
[2.3.3] - 2022-09-12
Fixed
- unwarranted compilation warning on OTP 25
[2.3.2] - 2022-08-07
Added
- OTP 25 to CI
Fixed
- a few wrong specs
rebar3_lint
warnings on OTP 25rebar3_hank
warnings on OTP 25- Dialyzer warnings on OTP 25
- a few eqWAlizer warnings
[2.3.1] - 2022-04-19
Fixed
- spelling mistakes in CHANGELOG [Kian-Meng Ang]
[2.3.0] - 2022-01-25
Added
- the ability to customize database cache path [Bartosz Szafran]
[2.2.2] - 2021-12-01
Fixed
- wrong reference to custom database fetcher in README [Bartosz Szafran]
[2.2.1] - 2021-09-22
Fixed
- decoding of negative integers [made wrong in 2.0.0]
[2.2.0] - 2021-09-03
Changed
- documentation from edoc to ExDoc
- imported version of
tls_certificate_check
to '~> 1.9'
[2.1.0] - 2021-08-30
Added
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
Removed
- no longer warranted run time dependency (
public_key
)
Fixed
- 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
[2.0.0] - 2021-08-30
Added
- 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
Changed
- ⚠️ return type of
locus: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
Removed
- ⚠️
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
[1.16.1] - 2021-07-12
Fixed
- 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
[1.16.0] - 2021-05-13
Added
- OTP 24 to CI targets
Changed
- minimum Erlang/OTP version to 22
- imported version of
tls_certificate_check
to '~> 1.5'
[1.15.0] - 2021-04-02
Changed
- imported version of
tls_certificate_check
to '~> 1.3' - minimum Erlang/OTP version to 21.2
Removed
stacktrace_compat
dependency- (now-)dead code that dealt with pre- OTP 21.2 differences in
stdlib
and such - unmaintained compatibility with rebar 2
Fixed
- import of MaxMind test data in a way that works both locally and on GHA
[1.14.1] - 2021-03-16
Fixed
- Hex documentation
[1.14.0] - 2021-03-12
Changed
- imported version of
tls_certificate_check
to 1.2.0
Fixed
- broken
tls_certificate_check
s when using rebar3 3.14.4
[1.13.2] - 2020-12-10
Changed
- CI from Travis to GitHub actions
Fixed
- documentation unavailability in hexdocs.pm (hopefully)
[1.13.1] - 2020-12-08
Fixed
tls_certificate_check
compilation errors on OTP 20.1+, when on top of macOS Big Sur
[1.13.0] - 2020-12-05
Changed
- 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
[1.12.2] - 2020-10-29
Fixed
- erroneous execution of the optional "remote HTTP" test group when a license key is lacking
[1.12.1] - 2020-10-16
Fixed
- misdetection of Mix as being rebar 2 and the erroneous compilation warnings that followed it
[1.12.0] - 2020-05-21
Added
- support for OTP 23
Changed
- checksum verification algorithm of MaxMind downloads from MD5 to SHA-256
[1.11.0] - 2020-05-11
Added
- 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
Changed
- 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
[1.10.2] - 2020-03-13
Added
- unmaintained compatibility with rebar 2
[1.10.1] - 2020-03-11
Changed
- CA bundles, based on the latest Mozilla Included CA Certificate List [Paulo Oliveira]
Fixed
- misformatted log warning
- use of deprecated function in README example of how to use the library
- display of private function in generated function reference
[1.10.0] - 2020-02-12
Added
: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
Changed
- default behaviour upon failing to load a database, as to retry loading while exponentially backing off (using very short intervals at first)
Deprecated
:wait_for_loader
and:wait_for_loaders
API functions (use:await_loader
and:await_loaders
instead)
Fixed
- incomplete spec for
locus_loader:event()
type - wrong spec for
locus_maxmind_download:msg()
andlocus_maxmind_download:event()
types
[1.9.0] - 2020-02-03
Changed
- documentation as to reflect the recent changes to MaxMind licensing requirements
[1.9.0-beta] - 2020-01-02
Added
- support for loading databases with full awareness of license keys (now mandatory)
Deprecated
- the use of discontinued "https://geolite.maxmind.com/download/geoip/database/GeoLite2-..." database URLs
[1.8.0] - 2019-11-05
Added
- support for returning types other than map upon successful lookups
Changed
- MMDB decoder, which was split into separate tree, data section and analysis modules
- imported
stacktrace_compat
version [1.0.2 => 1.1.1]
Removed
- support for OTP 18
Fixed
- 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+
[1.7.0] - 2019-08-12
Added
- 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
Changed
- 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]
Removed
- support for OTP 17.4 and 17.5
- undocumented support for rebar 2
- half-baked and unwarranted support for
file://
-prefixed URLs
Fixed
- 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
[1.6.2] - 2019-03-16
Fixed
- Dialyzer warning on OTP 21.3
[1.6.1] - 2019-02-04
Fixed
- crash in HTTP loader when database URL scheme is not in lower case (introduced in 1.6.0)
[1.6.0] - 2019-01-27
Added
- 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
Changed
- test coverage using MaxMind's test data was greatly extended
- database decoder was thoroughly optimized
- documentation was mildly improved
Fixed
- misguided rejection of UTF-8 strings with non-printable (but valid) codepoints
- unnecessarily strict refusal to load 2.x database formats succeeding 2.0
Security
- 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
[1.5.1] - 2019-01-19
Fixed
- unwarranted import of rebar3_hex plugin in library consumers
[1.5.0] - 2018-11-25
Added
- ability of tweaking pre- and post-readiness database update periods
- test coverage of HTTP-loaded database updates
Fixed
- undeterministic test cases which sometimes broke
[1.4.0] - 2018-06-20
Added
- official test cases for good data at https://github.com/maxmind/MaxMind-DB/
Changed
- string and binary IP address parsing to handle ranges and shortened addresses
Deprecated
- :get_version/1 (use :get_info/2)
[1.3.1] - 2018-05-04
Fixed
- incompatibility with OTP 20.3.1 due to gen_statem bug (issue with init actions)
[1.2.3] - 2018-05-04
Fixed
- incompatibility with OTP 20.3.1 due to gen_statem bug (issue with init actions)
[1.1.5] - 2018-05-04
Fixed
- incompatibility with OTP 20.3.1 due to gen_statem bug (issue with init actions)
[1.0.2] - 2018-05-04
Fixed
- incompatibility with OTP 20.3.1 due to gen_statem bug (issue with init actions)
[1.3.0] - 2018-03-28
Added
- ability of loading databases from local file system
- type spec of database entries
Fixed
- wrong handling of timezones on cached tarballs
- wrong handling of daylight saving time on conditional HTTP requests
[1.2.2] - 2018-03-28
Fixed
- wrong handling of timezones on cached tarballs
- wrong handling of daylight saving time on conditional HTTP requests
[1.1.4] - 2018-03-28
Fixed
- wrong handling of timezones on cached tarballs
- wrong handling of daylight saving time on conditional HTTP requests
[1.0.1] - 2018-03-28
Fixed
- wrong handling of timezones on cached tarballs
- wrong handling of daylight saving time on conditional HTTP requests
[1.2.1] - 2018-02-15
Fixed
- undesirable inlining
[1.2.0] - 2018-02-15
Added
- OTP 17.4 and 17.5 support
[1.1.3] - 2018-02-13
Fixed
- matched IP address prefix not being returned on successful lookups
[1.1.2] - 2018-02-13
Fixed
- documentation external links not opening in parent frame
[1.1.1] - 2018-02-12
Fixed
- internal functions showing up as public in documentation
- documented description of
locus_logger:set_loglevel/2
[1.1.0] - 2018-02-11
Added
- 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
[1.0.0] - 2017-12-31
Added
- 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