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.
3.4.0 - 2018-12-11
3.4.0-rc2
was considered final and became 3.4.0
.
3.4.0-rc2 - 2018-11-16
- Fix bug in the Default credentials policy. It was using the default credentials in some cases where it should not PR #954, THREESCALE-1547
3.4.0-rc1 - 2018-11-13
- Fix "nil" being added to the end of URL Path in some cases when using http_proxy PR #946
3.4.0-beta1 - 2018-10-24
- Fix
APICAST_PROXY_HTTPS_PASSWORD_FILE
andAPICAST_PROXY_HTTPS_SESSION_REUSE
parameters for Mutual SSL PR #927 - The "allow" mode of the caching policy now accepts the request when it's authorization is not cached PR #934, THREESCALE-1396
- When using SSL certs with path-based routing enabled, now APIcast falls backs to host-based routing instead of crashing PR #938, THREESCALE-1430
- Fixed error that happened when loading certain configurations that use OIDC PR #940, THREESCALE-1289
- The port is now included in the Host header when the request is proxied PR #942
- Prometheus metrics for: the 3scale batching policy, the upstream API and request response times PR #902, PR #918, PR #930, THREESCALE-1383
- Support for path in the upstream URL PR #905
- OIDC Authentication policy (only usable directly by the configuration file) PR #904
- IP check policy. This policy allows to accept or deny requests based on the IP PR #907, PR #923, THREESCALE-1353
- Delete operation in the headers policy PR #928, THREESCALE-1354
- "Retry-After" header in the response when rate-limited by the 3scale backend PR #929, THREESCALE-1380
- The
threescale_backend_calls
Prometheus metric now includes the response (used to be inbackend_response
) and also the kind of call (auth, authrep, report) PR #919, THREESCALE-1383 - Performance improvement: replaced some varargs in hot paths PR #937
3.3.0 - 2018-10-05
3.3.0-cr2
was considered final and became 3.3.0
.
- The configuration schema of the rate-limit policy has changed from
3.2.0
so if you were using it, please adapt your configuration file accordingly. - The Native OAuth 2.0 flow is deprecated. Please consider using the OIDC integration instead.
- The new conditional policy is considered experimental. The way conditions are expressed might change in future releases.
3.3.0-cr2 - 2018-09-25
- Handles properly policies that raise an error when initialized PR #911, THREESCALE-1332
3.3.0-cr1 - 2018-09-14
- Set default errlog level when
APICAST_LOG_LEVEL
is empty PR #868 - Correct JWT validation according to RFC 7523 Section 3. Like not required
nbf
claim. THREESCALE-583 - Mismatch in OIDC issuer when loading configuration through a configuration file PR #872
- When the 3scale referrer filters was enabled, cached requests were not handled correctly PR #875
- Invalid SNI when connecting to 3scale backend over HTTPS THREESCALE-1269
- Fix handling --pid and --signal on the CLI PR #880
- Some policies did not have access to the vars exposed when using Liquid (
uri
,path
, etc.) PR #891 - Fix error when loading certain configurations that use OIDC PR #893
- Fix error that appeared when combining the liquid context debug policy with policies that contain liquid templates PR #895
- Thread safety issues when rendering Liquid templates PR #896
- Expose
http_method
in Liquid PR #888 - Print error message when OIDC configuration is missing for a request PR #894
- Print whole stderr in 4k chunks when executing external commands PR #894
3.3.0-beta2 - 2018-09-03
- Capture permission errors when searching for files on filesystem PR #865
3.3.0-beta1 - 2018-08-31
- OpenTracing support PR #669, THREESCALE-1159
- Generate new policy scaffold from the CLI PR #682
- 3scale batcher policy PR #685, PR #710, PR #757, PR #786, PR #823, THREESCALE-1155
- Liquid templating support in the headers policy configuration PR #716, PR #845, PR #847, THREESCALE-1140
- Ability to modify query parameters in the URL rewriting policy PR #724, PR #818, THREESCALE-1139
- 3scale referrer policy PR #728, PR #777, THREESCALE-329
- Liquid templating support in the rate-limit policy PR #719, PR #845, PR #847, THREESCALE-411
- Default credentials policy PR #741, THREESCALE-586
- Configurable caching for the token introspection policy PR #656
APICAST_ACCESS_LOG_FILE
env to make the access log location configurable PR #743, THREESCALE-1148- ENV variables to make APIcast listen on HTTPS port PR #622
- New
ssl_certificate
phase allows policies to provide certificate to terminate HTTPS connection PR #622 - Configurable
auth_type
for the token introspection policy PR #755 TimerTask
module to execute recurrent tasks that can be cancelled PR #782, PR #784, PR #791GC
module that implements a workaround to be able to define__gc
on tables PR #790- Policies can define
__gc
metamethod that gets called when they are garbage collected to do cleanup PR #688 - Keycloak Role Check policy PR #773, THREESCALE-1158
- Conditional policy. This policy includes a condition and a policy chain, and only executes the chain when the condition is true PR #812, PR #814, PR #820
- Request headers are now exposed in the context available when evaluating Liquid PR #819
- Rewrite URL captures policy. This policy captures arguments in a URL and rewrites the URL using them PR #827, THREESCALE-1139
- Support for HTTP Proxy THREESCALE-221, #709
- Conditions for the limits of the rate-limit policy PR #839
bin/apicast console
to start Lua REPL with APIcast code loaded PR #853- Liquid Context Debugging policy. It's a policy only meant for debugging purposes, returns the context available when evaluating liquid PR #849
- Logging policy. It allows to enable/disable access logs per service PR #856, THREESCALE-1148
- Support JWK through OIDC Discovery PR #850
- Initial Prometheus metrics policy (backend responses and nginx metrics) PR #860, THREESCALE-1230
THREESCALE_PORTAL_ENDPOINT
andTHREESCALE_CONFIG_FILE
are not required anymore PR #702- The
scope
of the Rate Limit policy isservice
by default PR #704 - Decoded JWTs are now exposed in the policies context by the APIcast policy PR #718
- Upgraded OpenResty to 1.13.6.2, uses OpenSSL 1.1 PR #733
- Use forked
resty.limit.count
that uses increments instead of decrements PR #758, PR 843 - Rate Limit policy to take into account changes in the config PR #703
- The regular expression for mapping rules has been changed, so that special characters are accepted in the wildcard values for path PR #714
- Call
init
andinit_worker
on all available policies regardless they are used or not PR #770 - Cache loaded policies. Loading one policy several times will use the same instance PR #770
- Load all policies into cache when starting APIcast master process. PR #770
init
andinit_worker
phases are executed on the policy module, not the instance of a policy with a configuration PR #770timer_resolution
set only in development environment PR #815- The rate-limit policy, when
redis_url
is empty, now applies per-gateway limits instead of trying to use a localhost Redis PR #842 - Changed the display name of some policies. This only affects how the name shows in the UI THREESCALE-1232
- Do not crash when initializing unreachable/invalid DNS resolver PR #730
- Reporting only 50% calls to 3scale backend when using OIDC PR #774, THREESCALE-1080
- Building container image on OpenShift 3.9 PR #810, THREESCALE-1138
- Rate Limit policy to define multiple limiters of the same type PR #825
- Fix
exclusiveMinimum
field forconn
property in the rate-limit JSON schema PR #832 - Skip invalid policies in the policy chain PR #854
3.2.1 - 2018-06-26
APICAST_BACKEND_CACHE_HANDLER
environment variable is now deprecated. Use caching policy instead.APICAST_CUSTOM_CONFIG
,APICAST_MODULE
environment variables are now deprecated. Use policies instead. PR #746, THREESCALE-1034- Path routing feature enabled by the
APICAST_PATH_ROUTING
environment variable is not considered experimental anymore.
- Reporting only 50% calls to 3scale backend when using OIDC PR #779
3.2.0 - 2018-06-04
3.2.0-rc2 was considered final and became 3.2.0.
3.2.0-rc2 - 2018-05-11
- Default value for the
caching_type
attribute of the caching policy config schema #691, THREESCALE-845
- Fixed set of valid values for the exit param of the Echo policy PR #684
- The schema of the rate-limit policy has been adapted so it can be rendered by
react-jsonschema-form
, a library used in the 3scale UI. This is a breaking change. PR #696, THREESCALE-888 - The upstream policy now performs the rule matching in the rewrite phase. This allows combining it with the URL rewriting policy – upstream policy regex will be matched against the original path if upstream policy is placed before URL rewriting in the policy chain, and against the rewritten path otherwise PR #690, THREESCALE-852
3.2.0-rc1 - 2018-04-24
- Rate Limit policy PR #648
- Documented restrictions in the position in the chain for some policies PR #675, THREESCALE-799
export()
now works correctly in policies of the local chain PR #673- caching policy now works correctly when placed after the apicast policy in the chain PR #674
- OpenTracing support PR #669
- descriptions in
oneOf
s in policy manifests have been replaced with titles PR #663 resty.balancer
doesn't fall back to the port80
by default. If the port is missing,apicast.balancer
sets the default port for the scheme of theproxy_pass
URL PR #662
3.2.0-beta3 - 2018-03-20
ljsonschema
is only used in testing but was required in production also PR #660
3.2.0-beta2 - 2018-03-19
- New property
summary
in the policy manifests PR #633 - OAuth2.0 Token Introspection policy PR #619
- New
metrics
phase that runs when prometheus is collecting metrics PR #629 - Validation of policy configs both in integration and unit tests PR #646
- Option to avoid refreshing the config when using the lazy loader with
APICAST_CONFIGURATION_CACHE
< 0 PR #657
- Error loading policy chain configuration JSON with null value PR #626
- Splitted
resolv.conf
in lines,to avoid commented lines PR #618 - Avoid
nameserver
repetion fromRESOLVER
variable andresolv.conf
file PR #636 - Bug in URL rewriting policy that ignored the
commands
attribute in the policy manifest PR #641 - Skip comentaries after
search
values in resolv.conf PR #635 - Bug that prevented using
CONFIGURATION_CACHE_LOADER=boot
without specifyingAPICAST_CONFIGURATION_CACHE
in staging PR #651, THREESCALE-756. typ
is verified when it's present in keycloak tokens PR #658
summary
is now required in policy manifests PR #655
3.2.0-beta1 - 2018-02-20
- Definition of JSON schemas for policy configurations PR #522, PR #601
- URL rewriting policy PR #529, THREESCALE-618
- Liquid template can find files in current folder too PR #533
bin/apicast
respectsAPICAST_OPENRESTY_BINARY
andTEST_NGINX_BINARY
environment PR #540- Caching policy PR #546, PR #558, THREESCALE-587, THREESCALE-550
- New phase:
content
for generating content or getting the upstream response PR #535 - Upstream policy PR #562, THREESCALE-296
- Policy JSON manifest PR #565
- SOAP policy PR #567, THREESCALE-553
- Ability to set custom directories to load policies from PR #581
- CLI is running with proper log level set by
APICAST_LOG_LEVEL
PR #585 - 3scale configuration (staging/production) can be passed as
-3
or--channel
on the CLI PR #590 - APIcast CLI loads environments defined by
APICAST_ENVIRONMENT
variable PR #590 - Endpoint in management API to retrieve all the JSON manifests of the policies PR #592
- Development environment (
--dev
) starts with Echo policy unless some configuration is passed PR #593 - Added support for passing whole configuration as Data URL PR #593
- More complete global environment when loading environment policies PR #596
- Support for Client Certificate authentication with upstream servers PR #610, THREESCALE-328
- Detecting local rover installation from the CLI PR #519
- Use more
command
instead ofwhich
to work in plain shell PR #521 - Fixed rockspec so APIcast can be installed by luarocks PR #523, PR #538
- Fix loading renamed APIcast code PR #525
- Fix
apicast
command when installed from luarocks PR #527 - Fix lua docs formatting in the CORS policy PR #530
post_action
phase not being called in the policy_chain PR #539- Failing to execute
libexec/boot
on some systems PR #544 - Detect number of CPU cores in containers by using
nproc
PR #554 - Running with development config in Docker PR #555
- Fix setting twice the headers in a pre-flight request in the CORS policy PR #570
- Fix case where debug headers are returned without enabling the option PR #577
- Fix errors loading openresty libraries when rover is active PR #598
- Passthrough "invalid" headers PR #612, THREESCALE-630
- Fix using relative path for access and error log THREESCALE-1090
- Consolidate apicast-0.1-0.rockspec into apicast-scm-1.rockspec PR #526
- Deprecated
Configuration.extract_usage
in favor ofService.get_usage
PR #531 - Extract Test::APIcast to own package on CPAN PR #528
- Load policies by the APIcast loader instead of changing load path PR #532, PR #536
- Add
src
directory to the Lua load path when using CLI PR #533 - Move rejection reason parsing from CacheHandler to Proxy PR #541
- Propagate full package.path and cpath from the CLI to Nginx PR #538
post_action
phase now sharesngx.ctx
with the main request PR #539- Decrease nginx timer resolution to improve performance and enable PCRE JIT PR #543
- Moved
proxy_pass
into new internal location@upstream
PR #535 - Split 3scale authorization to rewrite and access phase PR #556
- Extract
mapping_rule
module from theconfiguration
module PR #571 - Renamed
apicast/policy/policy.lua
toapicast/policy.lua
PR #569 - Sandbox loading policies PR #566
- Extracted
usage
andmapping_rules_matcher
modules so they can be used from policies PR #580 - Renamed all
apicast/policy/*/policy.lua
toapicast/policy/*/init.lua
to match Lua naming PR #579 - Environment configuration can now define the configuration loader or cache PR #590.
- APIcast starts with "boot" configuration loader by default (because production is the default environment) PR #590.
- Deprecated
APICAST_SERVICES
in favor ofAPICAST_SERVICES_LIST
but provides backwards compatibility PR #549 - Deprecated
APICAST_PATH_ROUTING_ENABLED
in favor ofAPICAST_PATH_ROUTING
but provides backwards compatibility PR #549
3.2.0-alpha2 - 2017-11-30
- New policy chains system. This allows users to write custom policies to configure what Apicast can do on each of the Nginx phases PR #450, THREESCALE-553
- Resolver can resolve nginx upstreams PR #478
- Add
resolver
directive in the nginx configuration PR #508 - Calls 3scale backend with the 'no_body' option enabled. This reduces network traffic in cases where APIcast does not need to parse the response body PR #483
- Methods to modify policy chains PR #505
- Ability to load several environment configurations PR #504
- Ability to configure policy chain from the environment configuration PR #496
- Load environment variables defined in the configuration PR #507
- Allow configuration of the echo/management/fake backend ports PR #506
- Headers policy PR #497, THREESCALE-552
- CORS policy PR #487, THREESCALE-279
- Detect number of CPU shares when running on Kubernetes PR #600
- Namespace all APIcast code in
apicast
folder. Possible BREAKING CHANGE for some customizations. PR #486 - CLI ignores environment variables that are empty strings PR #504
- Loading installed luarocks from outside rover PR #503
- Support IPv6 addresses in
/etc/resolv.conf
PR #511 - Fix possible 100% CPU usage when starting APIcast and manipulating filesystem PR #547
- Experimental option for true out of band reporting (
APICAST_REPORTING_WORKERS
) PR #290, THREESCALE-365 /status/info
endpoint to the Management API PR #290/_threescale/healthz
endpoint returns a success status code, this is used for health checking in kubernetes environments PR #285- Usage limit errors are now configurable to distinguish them from other authorization errors PR #453, THREESCALE-638.
- Templating nginx configuration with liquid. PR #449
- Upgraded to OpenResty 1.11.2.5-1 PR #428
/oauth/token
endpoint returns an error status code, when the access token couldn't be stored in 3scale backend PR #436]- URI params in POST requests are now taken into account when matching mapping rules PR #437
- Increased number of background timers and connections in the cosocket pool PR #290
- Make OAuth tokens TTL configurable PR #448
- Detect when being executed in Test::Nginx and use default backend accordingly PR #458
- Update the s2i-openresty image to have the same path (
/opt/app-root/src
) in all images PR #460 - Launcher scripts are now Perl + Lua instead of Shell PR #449
- Unify how to connect to 3scale backend PR #456
- Upgraded OpenResty to 1.13.6.1 PR #480, THREESCALE-362
- Request headers are not passed to the backend, preventing sending invalid Content-Type to the access token store endpoint PR #433, THREESCALE-372
- Live and ready endpoints now set correct Content-Type header in the responsePR #441, THREESCALE-377
3.1.0 - 2017-10-27
- 3.1.0-rc2 was considered final and became 3.1.0.
3.1.0-rc2 - 2017-09-29
- Request headers are not passed to the backend, preventing sending invalid Content-Type to the access token store endpoint PR #433
3.1.0-rc1 - 2017-09-14
- Support for extending APIcast location block with snippets of nginx configuration PR #407
- Crash on empty OIDC Issuer endpoint PR #408
- Handle partial credentials PR #409
- Crash when configuration endpoint was missing PR #417
- Fix double queries to not fully qualified domains PR #419
- Fix caching DNS queries with scope (like on OpenShift) PR #420
THREESCALE_DEPLOYMENT_ENV
defaults toproduction
PR #406- OIDC is now used based on settings on the API Manager PR #405
- No limit on body size from the client sent to the server PR #410
- Print module loading errors only when it failed to load PR #415
bin/busted
rewritten to support different working directories PR #418- dnsmasq started in docker will not forward queries without domain PR #421
3.1.0-beta2 - 2017-08-21
- Ability to configure how to cache backend authorizations PR #396
- Not loading services when APICAST_SERVICES is empty PR #401, THREESCALE-281
3.1.0-beta1 - 2017-07-21
- Fixed CVE-2017-7512 PR #393
- APIcast module
balancer
method now accepts optional balancer PR #362 - Extracted lua-resty-url PR #384
- Extracted lua-resty-env PR #386
- Do not load all services when APICAST_SERVICES is set PR #388
- APIcast published to luarocks.org PR #366
- Support for passing remote configuratio URL through the CLI PR #389
- CLI flag -b to load configuration on boot PR #389
- OIDC support PR #382
- Keycloak / RH SSO integration replaced with OIDC PR #382
3.1.0-alpha1 - 2017-05-05
- Experimental caching proxy to the http client PR #357
- Print better errors when module loading fails PR #360
3.0.0 - 2017-04-04
- Support for loading configration from custom URL PR #323
- Turn on SSL/TLS validation by
OPENSSL_VERIFY
environment variable PR #332 - Load trusted CA chain certificates PR #332
- Support HTTP Basic authentication for client credentials when authorizing with RH-SSO PR #336
- Show more information about the error when the module load fails PR #348
- Use
RESOLVER
before falling back toresolv.conf
PR #324 - Improve error logging when failing to download configuration PR #335
- Service hostnames are normalized to lower case PR #336
- Don't attempt to perform post_action when request was handled without authentication PR #343
- Store authorization responses with a ttl, if sent PR #341
- Do not return stale service configuration when new one is available PR #333
- Memory leak in every request PR #339
- Remove unnecessary code and comments PR #344
- JWT expiry not taken into account in authorization response cache PR #283 / Issue #309 / Fixed by PR #341
- Memory leak in round robin balancer PR #345
- Error when trying to determine status of failed request when downloading configuration PR #350
3.0.0-beta3 - 2017-03-20
- Use per request configuration when cache is disabled PR #289
- Automatically expose all environment variables starting with
APICAST_
orTHREESCALE_
to nginx PR #292 - Error log to show why downloading configuration failed PR #306
- Backend HTTP client that uses cosockets PR #295
- Ability to customize main section of nginx configuration (and expose more env variables) PR #292
- Ability to lock service to specific configuration version PR #293
- Ability to use Redis DB and password via
REDIS_URL
PR #303 - Ability to Authenticate against API using RHSSO and OpenID Connect PR #283
http_ng
client supports auth passsed in the url, and default client options if the request options are missing for methods with body (POST, PUT, etc.) PR #310- Fixed lazy configuration loader to recover from failures PR #313
- Fixed undefined variable
p
in post_action PR #316 - Fixed caching of negative ttl by dnsmasq PR #318
- JWT expiry not taken into account in authorization response cache PR #283 / Issue #309
3.0.0-beta2 - 2017-03-08
- Reloading of configuration with every request when cache is disabled PR #287
- Auth caching is not used when OAuth method is used PR #304
3.0.0-beta1 - 2017-03-03
- Lazy load DNS resolver to improve performance PR #251
- Execute queries to all defined nameservers in parallel PR #260
RESOLVER
ENV variable overrides all other nameservers detected from/etc/resolv.conf
PR #260- Use stale DNS cache when there is a query in progress for that record PR #260
- Bump s2i-openresty to 1.11.2.2-2 PR #260
- Echo API on port 8081 listens accepts any Host PR #268
- Always use DNS search scopes PR #271
- Reduce use of global objects PR #273
- Configuration is using LRU cache PR #274
- Management API not opened by default PR #276
- Management API returns ready status with no services PR #
- Danger bot to check for consistency in Pull Requests PR #265
- Start local caching DNS server in the container PR #260
- Management API to show the DNS cache PR #260
- Extract correct Host header from the backend endpoint when backend host not provided PR #267
APICAST_CONFIGURATION_CACHE
environment variable PR #270APICAST_CONFIGURATION_LOADER
environment variable PR #270
- Support for downloading configuration via curl PR #266
AUTO_UPDATE_INTERVAL
environment variable PR #270APICAST_RELOAD_CONFIG
environment variable PR #270APICAST_MISSING_CONFIGURATION
environment variable PR #270
3.0.0-alpha2 - 2017-02-06
- A way to override backend endpoint PR #248
- Cache all calls to
os.getenv
via custom module PR #231 - Bump s2i-openresty to 1.11.2.2-1 PR #239
- Use resty-resolver over nginx resolver for HTTP PR #237
- Use resty-resolver over nginx resolver for Redis PR #237
- Internal change to reduce global state PR #233
- [OAuth] Return correct state value back to client
- Nginx resolver directive auto detection. Rely on internal DNS resolver PR #237
3.0.0-alpha1 - 2017-01-16
- A CHANGELOG.md to track important changes
- User-Agent header with APIcast version and system information PR #214
- Try to load configuration from V2 API PR #193
- Require openresty 1.11.2 PR #194
- moved development from
v2
branch tomaster
PR #209 X-3scale-Debug
HTTP header now uses Service Token PR #217
2.0.0 - 2016-11-29
- Major rewrite using JSON configuration instead of code generation.