# Changelog

This document outlines major changes between releases.

## [Unreleased]

### Added
- Multiple configs support (TrueCloudLab#12)

### Changed
- Update go version to 1.18 (TrueCloudLab#9)
- Update neo-go to v0.101.0 (#8)
- Update viper to v1.15.0 (#8)
- Errors have become more detailed (#18)
- Update system attribute names (#22)
- Separate integration tests with build tags (#24)

### Updating from v0.26.0

To set system attributes use updated headers
(you can use old ones for now, but their support will be dropped in the future releases):

* `X-Attribute-Neofs-*` -> `X-Attribute-System-*`
* `X-Attribute-NEOFS-*` -> `X-Attribute-SYSTEM-*`
* `X-Attribute-neofs-*` -> `X-Attribute-system-*`

## [0.26.0] - 2022-12-28

### Fixed
- ENV config example (#236)

### Added
- Support the `Date` header on upload (#214)
- Available routes specification (#216)
- Mention caching strategy in docs (#215)
- Add error response on attribute duplicates (#221)
- Multiple server listeners (#228)

### Removed
- Deprecated linters (#239)

### Updating from v0.25.1
Make sure your configuration is valid:

If you configure application using environment variables change:
* `HTTP_GW_LISTEN_ADDRESS` -> `HTTP_GW_SERVER_0_ADDRESS`
* `HTTP_GW_TLS_CERT_FILE` -> `HTTP_GW_SERVER_0_TLS_CERT_FILE` (and set `HTTP_GW_SERVER_0_TLS_ENABLED=true`)
* `HTTP_GW_TLS_KEY_FILE` -> `HTTP_GW_SERVER_0_TLS_KEY_FILE` (and set `HTTP_GW_SERVER_0_TLS_ENABLED=true`)

If you configure application using `.yaml` file change:
* `listen_address` -> `server.0.address`
* `tls.cert_file` -> `server.0.tls.cert_file` (and set `server.0.tls.enabled: true`)
* `tls.key_file` -> `server.0.tls.key_file` (and set `server.0.tls.enabled: true`)

## [0.25.1] - 2022-11-30

### Fixed
- Download zip archive when `FilePath` is invalid (#222)
- Only one peer must be healthy to init pool (#233)

### Added
- Debian packaging (#223)
- Timeout for individual operations in streaming RPC (#234)

## [0.25.0] - 2022-10-31

### Added
- Config reloading on SIGHUP (#200, #208)
- Stop pool dial on SIGINT (#212)
- Makefile help (#213)

### Changed
- Update NeoFS error handling (#206)
- GitHub actions updates (#205, #209)
- Unified system attribute format for GET and HEAD (#213)

## [0.24.0] - 2022-09-14

### Fixed
- Fix expiration epoch calculation (#198)
- Fix panic on go1.19 (#188)

### Added
- Exposure of pool metrics (#179, #194)

### Changed
- Help doesn't print empty parameters (#186)
- Update version calculation (#190, #199)
- Update neofs-sdk-go (#196)
- Update go version in CI and docker (#197, #202)

## [0.23.0] - 2022-08-02

### Added
- New param to configure pool error threshold (#184)

### Changed
- Pprof and prometheus metrics configuration (#171)
- Drop GO111MODULES from builds (#182)

### Updating from v0.22.0
1. To enable pprof use `pprof.enabled` instead of `pprof` in config.
   To enable prometheus metrics use `prometheus.enabled` instead of `metrics` in config.
   If you are using the command line flags you can skip this step.

## [0.22.0] - 2022-07-25

### Added
- Default params documentation (#172)
- Health metric (#175)

### Changed
- Version output (#169)
- Updated SDK Version (#178)

## [0.21.0] - 2022-06-20

### Fixed
- Downloading ZIP archive using streaming (#163)

### Added
- New make target to build app in docker (#159)

### Changed
- Increased buffer size for file uploading (#148)
- Updated linter version to v1.46.2 (#161)
- Updated CodeQL version to v2 (#158)


## [0.20.0] - 2022-04-29

### Fixed
- Get rid of data race on server shutdown (#145)
- Improved English in docs and comments (#153)
- Use `FilePath` to download zip (#150)

### Added
- Support container name NNS resolving (#142)

### Changed
- Updated docs (#133, #140)
- Increased default read/write timeouts (#154)
- Updated SDK (#137, #139)
- Updated go version to 1.17 (#143)
- Improved error messages (#144)

## [0.19.0] - 2022-03-16

### Fixed
- Uploading object with zero payload (#122)
- Different headers format in GET and HEAD (#125)
- Fixed project name in docs (#120)

### Added
- Support object attributes with spaces (#123)

### Changed
- Updated fasthttp to v1.34.0 (#129)
- Updated NeoFS SDK to v1.0.0-rc.3 (#126, #132)
- Refactored content type detecting (#128)


## [0.18.0] - 2021-12-10

### Fixed
- System headers format (#111)

### Added
- Different formats to set object's expiration: in epoch, duration, timestamp,
  RFC3339 (#108)
- Support of nodes priority (#115)

### Changed
- Updated testcontainers dependency (#100)

## [0.17.0] - 2021-11-15

Support of bulk file download with zip streams and various bug fixes.

### Fixed
- Allow canonical `X-Attribute-Neofs-*` headers (#87)
- Responses with error message now end with `\n` character (#105)
- Application does not require all neofs endpoints to be healthy at start now
  (#103)
- Application now tracks session token errors and recreates tokens in runtime
  (#95)

### Added
- Integration tests with [all-in-one](https://github.com/nspcc-dev/neofs-aio/)
  test containers (#85, #94)
- Bulk download support with zip streams (#92, #96)

## 0.16.1 (28 Jul 2021)

New features:
* logging requests (#77)
* HEAD methods for download routes (#76)

Improvements:
* updated sdk-go dependency (#82)

Bugs fixed:
* wrong NotFound status was used (#30)

## 0.16.0 (29 Jun 2021)

We update HTTP gateway with NEP-6 wallets support, YAML configuration files
and small fixes.

New features:
 * YAML configuration file (#71)

Behavior changes:
 * gateway key needs to be stored in a proper NEP-6 wallet now, `-k` option is
   no longer available, see `-w` and `-a` (#68)

Bugs fixed:
 * downloads were not streamed leading to excessive memory usage (#67)
 * Last-Modified header incorrectly used local time (#75)

## 0.15.2 (22 Jun 2021)

New features:
 * Content-Type returned for object GET requests can now be taken from
   attributes (overriding autodetection, #65)

Behavior changes:
 * grpc keepalive options can no longer be changed (#60)

Improvements:
 * code refactoring (more reuse between different gateways, moved some code to
   sdk-go, #47, #46, #51, #62, #63)
 * documentation updates and fixes (#53, #49, #55, #59)
 * updated api-go dependency (#57)

Bugs fixed:
 * `-k` option wasn't accepted for key although it was documented (#50)

## 0.15.1 (24 May 2021)

This important release makes HTTP gateway compatible with NeoFS node version
0.20.0.

Behavior changes:
 * neofs-api-go was updated to 1.26.1, which contains some incompatible
   changes in underlying components (#39, #44)
 * `neofs-http-gw` is consistently used now for repository, binary and image
   names (#43)

Improvements:
 * minor code cleanups based on stricter set of linters (#41)
 * updated README (#42)

## 0.15.0 (30 Apr 2021)

This is the first public release incorporating latest NeoFS protocol support
and fixing some bugs.

New features:
 * upload support (#14, #13, #29)
 * ephemeral keys (#26)
 * TLS server support (#28)

Behavior changes:
 * node weights can now be specified as simple numbers instead of percentages
   and gateway will calculate the proportion automatically (#27)
 * attributes are converted now to `X-Attribute-*` headers when retrieving
   object from gate instead of `X-*` (#29)

Improvements:
 * better Makefile (#16, #24, #33, #34)
 * updated documentation (#16, #29, #35, #36)
 * updated neofs-api-go to v1.25.0 (#17, #20)
 * updated fasthttp to v1.23.0+ (#17, #29)
 * refactoring, eliminating some dependencies (#20, #29)

Bugs fixed:
 * gateway attempted to work with no NeoFS peers configured (#29)
 * some invalid headers could be sent for attributes using non-ASCII or
   non-printable characters (#29)

## Older versions

Please refer to [Github
releases](https://github.com/nspcc-dev/neofs-http-gw/releases/) for older
releases.

[0.17.0]: https://github.com/nspcc-dev/neofs-http-gw/compare/v0.16.1...v0.17.0
[0.18.0]: https://github.com/nspcc-dev/neofs-http-gw/compare/v0.17.0...v0.18.0
[0.19.0]: https://github.com/nspcc-dev/neofs-http-gw/compare/v0.18.0...v0.19.0
[0.20.0]: https://github.com/nspcc-dev/neofs-http-gw/compare/v0.19.0...v0.20.0
[0.21.0]: https://github.com/nspcc-dev/neofs-http-gw/compare/v0.20.0...v0.21.0
[0.22.0]: https://github.com/nspcc-dev/neofs-http-gw/compare/v0.21.0...v0.22.0
[0.23.0]: https://github.com/nspcc-dev/neofs-http-gw/compare/v0.22.0...v0.23.0
[0.24.0]: https://github.com/nspcc-dev/neofs-http-gw/compare/v0.23.0...v0.24.0
[0.25.0]: https://github.com/nspcc-dev/neofs-http-gw/compare/v0.24.0...v0.25.0
[0.25.1]: https://github.com/nspcc-dev/neofs-http-gw/compare/v0.25.0...v0.25.1
[0.26.0]: https://github.com/nspcc-dev/neofs-http-gw/compare/v0.25.1...v0.26.0
[Unreleased]: https://github.com/nspcc-dev/neofs-http-gw/compare/v0.26.0...master