Unreleased changes are available as avenga/couper:edge
container.
-
Added
Accept: application/json
request header to the OAuth2 token request, in order to make the Github token endpoint respond with a JSON token response (#307)- Documentation of logs (#310)
signing_ttl
andsigning_key
/signing_key_file
tojwt
block for use withjwt_sign()
function (#309)jwks_url
andjwks_ttl
tojwt
block (#312)
-
Changed
- Organized log format fields for uniform access and upstream log (#300)
claims
in ajwt
block are now evaluated per request, so thatrequest
properties can be used as required claim values (#314)
-
Fixed
- Key for storing and reading OpenID configuration (#319)
-
beta_scope_claim
attribute tojwt
block;beta_scope
attribute toapi
andendpoint
blocks; error typesbeta_operation_denied
andbeta_insufficient_scope
(#315)beta_role_claim
andbeta_role_map
attributes tojwt
block (#325)
Release date: 2021-08-26
This release introduces Beta Features. We use beta features to develop and experiment with new, complex features for you while still being able to maintain our compatibility promise. You can see beta features as a feature preview. To make users aware that a beta feature is used their configuration items are prefixed with beta_
.
The first beta features incorporate the OAuth2 functionality into the Access Control capabilities of Couper. The beta_oauth2 {}
block implements OAuth2 Authorization Code Grant Flows. The companion block beta_oidc {}
implements OIDC, which allows simple integration of 3rd-party systems such as Google, Github or Keycloak for SSO (Single-Sign-On).
Together with transparent Websockets support that you can enable in your proxy {}
block, you can guard existing Web applications with Couper via OIDC.
To aid observability of your setups, Couper sends its request ID as the Couper-Request-Id
HTTP header in both backend requests and client responses. This makes it possible to trace events and correlate logs throughout the service chain. Couper can also accept a request ID generated by a downstream system like for example a load balancer. Like all settings, these can be configured in the config, as command line flag or via environment variables.
Load balancers or ingress services often provide X-Forwarded-Host
headers. Couper can be configured to use these to change the properties of the request
variable. This allows a Couper configuration to adapt to the run time enviroment, for example to create a back link for OIDC or SAML authorization requests with the request.origin
variable.
If your applications are running in multiple setups, like testing and production environments, there will likely be more parameters that you want to have configurable. Backend origins, user names, credentials, timeouts, all that could be nice to be changed without a new deployment. Couper supports using environment variables with env.VAR
-like expressions. Now, Couper can also provide default values for those variables. This makes it easy to have values configurable without the need to provide values outside of Couper (e.g. in Kubernetes). Our env vars example shows that in action.
-
Added
environment_variables
map in thedefaults
block to define default values for environment variables (#271)https-dev-proxy
option creates a TLS server listing on the given TLS port. Requests are forwarded to the givenserver
port. The certificate is generated on-the-fly. This function is intended for local development setups to support browser features requiring HTTPS connections, such as secure cookies. (#281)websockets
option inproxy
block enables transparent websocket support when proxying to upstream backends (#198)- Client request variables
request.url
,request.origin
,request.protocol
,request.host
andrequest.port
(#255) - Run option
-accept-forwarded-url
and settingaccept_forwarded_url
to acceptproto
,host
, orport
fromX-Forwarded-Proto
,X-Forwarded-Host
orX-Forwarded-Port
request headers (#255) - Couper sends its request ID as
Couper-Request-Id
HTTP header in backend requests and client responses. This can be configured with therequest_id_backend_header
andrequest_id_client_header
settings (#268) request_id_accept_from_header
setting configures Couper to use a downstream request ID instead of generating its own in order to help correlating log events accross services (#268)couper.version
variable (#274)protocol
,host
,port
,origin
,body
,json_body
tobackend_requests
variable (#278)- Locking to avoid concurrent requests to renew OAuth2 Client Credentials access tokens (#270)
log-level
in thesettings
block to define when a log is printed (#306)
-
Changed
- The
sp_acs_url
in the SAML Block may now be relative (#265)
- The
-
Fixed
- No GZIP compression for small response bodies (#186)
- Missing error type for request/response body, json_body or form_body related HCL evaluation errors (#276)
request.url
andbackend_requests.<label>.url
now contain a query string if present (#278)backend_responses.<label>.status
is now integer (#278)backend_requests.<label>.form_body
was always empty (#278)- Documentation of
request.query.<name>
(#278) - Missing access log on some error cases (#267)
- Panic during backend origin / url usage with previous parse error (#206)
- Basic Auth did not work if only the
htpasswd_file
attribute was defined (#293) - Missing error handling for backend gzip header reads (#291)
- ResponseWriter fallback for possible statusCode 0 writes (#291)
- ResponseWriter buffer behaviour; prepared chunk writes (#301)
- Proper client-request canceling (#294)
-
- OAuth2 Authorization Code Grant Flow:
beta_oauth2 {}
block;beta_oauth_authorization_url()
andbeta_oauth_verifier()
(#247) - OIDC Authorization Code Grant Flow:
beta_oidc {}
block (#273)
- OAuth2 Authorization Code Grant Flow:
-
Changed
Error
log-level for upstream responses with status500
toInfo
log-level (#258)
-
Fixed
-
Added
-
Changed
-
Fixed
Release date: 2021-05-19
The most important feature of Couper 1.2 is the introduction of custom
error handling in form of the error_handler
block.
You can now register error handlers for error types. Instead of the standard error_file
template,
you can flexibly respond with arbitrary response
s. error_handler
is allowed in access control blocks (jwt
, saml2
…), where you
could e.g. handle missing tokens with a redirect-to-login. In the
future, error_handler
will be usable in more config areas. Refer to
the example
if you want to see it in action.
-
Added
-
Changed
-
Fixed
- Fix
/healthz
route when called withaccept-encoding: gzip
(#222) - Don't panic over duplicate access control definitions, log error instead (#221)
- Response for missing routes should have status code
404
(#224) - Fix possible race-condition with concurrent
openapi
validations (#231) - Fix use of server URLs without port in
openapi
(#230)
- Fix
Release date: 2021-04-21
- Fixed
- Endpoint responses are written and logged with correct status-code (#216)
- affected: a plain
response
without any additional headers or body configuration
- affected: a plain
- Endpoint responses are written and logged with correct status-code (#216)
Release date: 2021-04-16
-
Fixed
- allow more +json mime types (#207)
- determines if ja request/response body gets parsed and provided as
json_body
variable
- determines if ja request/response body gets parsed and provided as
- missing check for empty endpoint path patterns (#211)
- protected API (base)paths returns status 401 instead of 404 if a protected route was not found (#211)
- jwt source config definition (#210)
- missing inner context on context copy
- possible panic for unhandled error template write errors (#205)
- backend reference usage with string label (#189)
- cli argument filtering (#204)
- misleading jwt rsa key error (#203)
- watch handling on stat errors (#202)
- allow more +json mime types (#207)
-
Changed
- Change access control validation logging (#199)
- log the first occurred error instead of an array
- Change access control validation logging (#199)
-
Added
Release date: 2021-04-09
-
Added
couper help
and usage documentation (#187)
-
Changed
-
Fixed
- Fix missing
backend.origin
attribute url validation (#191)
- Fix missing
Release date: 2021-04-08
-
Fixed
- Log option for
json
formatted logs: (#176)- configured parent key applies to (almost) all log fields
- Log option for
-
Changed
- Change variable names to more user-friendly ones (#180):
req
->request
ctx
->context
bereq
-> removedberesp
-> removedbereqs
->backend_requests
beresps
->backend_responses
- Log option for parent fields are 'global' now (#176)
COUPER_ACCESS_LOG_PARENT_FIELD
,COUPER_BACKEND_LOG_PARENT_FIELD
->COUPER_LOG_PARENT_FIELD
- Change variable names to more user-friendly ones (#180):
-
Added
Release date: 2021-04-06
-
Fixed
- Some possible race conditions in combination with multiple
proxy
and/orrequest
definitions are fixed (#157) (#160) - Log endpoint related recovered panics
- CORS behaviour: result is now only dependent on the config, not the actual request; fixed Vary headers (#173)
- Fix json type assumption (#177)
- Fix missing string conversion for evaluated number values (#175)
- Loading optional labels of same type
- multiplexer behaviour with multiple servers and hosts (#161)
- Fix missing access_control for file handler (#169)
- 404 behaviour for access controlled endpoints: deny instead of 404 if the request matches the related base_path (#143)
- Some possible race conditions in combination with multiple
-
Changed
-
Added
- Add
json_body
attribute forrequest
andresponse
block (#158) bytes
log field to represent the body size
- Add
Release date: 2021-03-23
-
Fixed
-
Changed
backend
block attributesbasic_auth
,path_prefix
andproxy
hcl evaluation during runtimerequest
attributes hcl evaluation during runtime (#152)- Change configuration in combination with URL and backend.origin (#144)
request
andproxy
block can use theurl
attribute instead of define or reference abackend
- same applies to
oauth2.token_endpoint
- no
X-Forwarded-For
header enrichment from couperproxy
(#139) - more log context for access control related errors (#154)
-
Added
Release date: 2021-03-15
-
Fixed
- Fix missing panic recovering for backend roundtrips (#142)
- Fix backend
timeout
behaviour - Add a more specific error message for proxy body copy errors
- Fix backend
- Fix missing panic recovering for backend roundtrips (#142)
-
Changed
- Couper just passes the
X-Forwarded-For
header if any instead of adding the client remote addr to the list (#139)
- Couper just passes the
-
Added
url_encode
function for RFC 3986 string encoding (#136)
Release date: 2021-03-11
- Breaking Change
backend
will be consumed by proxy and request as transport configuration now. The previous behaviour thatbackend
represents aproxy
functionality is removed. Also thebackend
block must be defined indefinitions
,proxy
orrequest
.- Config migration, add a
proxy
block:
- Config migration, add a
endpoint "/old" {
backend = "reference"
# or
backend {
#...
}
}
# change to:
endpoint "/new" {
proxy {
backend = "reference"
}
# or
proxy {
backend {
#...
}
}
}
-
Changed
- Client-Request and upstream response body buffering by default
- Server shutdown delay and deadline defaults to
0s
now and can be configured via env if required - Websocket connection upgrades in combination with
proxy {}
are disabled- we will add a proxy option for ws usage later on
-
Fixed
- An absolute path resolving for
*_file
configuration attributes (#120)
- An absolute path resolving for
-
Added
-
Code Refactoring
- underlying code structure to represent an
endpoint
block withproxy
,request
andresponse
configuration - hcl evaluation context as own 'container' with
context.Context
interface - test cleanups
- underlying code structure to represent an
-
Dependencies
- build with go 1.16
- logrus to v1.8.1
- hcl to v2.9.1
- kin-openapi to v.0.49.0
Release date: 2021-02-16
-
Added
- backend:
- a user-friendly
basic_auth
option - backend
proxy
url,disable_connection_reuse
andhttp2
settings (#108)
- a user-friendly
- version command
- backend:
-
Changed
Release date: 2021-01-29
-
Fixed
- Fix missing http.Hijacker interface to be able to handle websocket upgrades (#80)
-
Added
-
Code Refactoring
- improved internals for configuration load
-
Dependencies
- Upgrade hcl to 2.8.2
- Upgrade go-cty module to 1.5.0
- Upgrade logrus module to 1.7.0
- Upgrade kin-openapi module to v0.37
Release date: 2021-01-19
- Fixed
Release date: 2021-01-18
- Fixed
Release date: 2021-01-13
-
Added
-
Fixed
- command flag filter for bool values (#85)
- different proxy options for same origin should be part of the origin transport key
-
Code Refactoring
- configuration load and prepare related body merges on hcl level
Release date: 2020-12-15
-
Added
-
Changed
-
Fixed
Release date: 2020-10-08
-
Added
-
Fixed
Release date: 2020-09-11
- Added
- Parse and load from given HCL configuration file
- Config structs for blocks:
server, api, endpoint, files, spa, definitions, jwt
- HTTP handler implementation for
api backends, files, spa
and related config mappings - CORS handling for
api
endpoints - Access control configuration for all blocks
- Access control type
jwt
with claim validation - Access und backend logs
- Configurable error templates with a fallback to our defaults
- Github actions for our continuous integration workflows
- Dockerfile
- Documentation