* golangci-lint: add and apply more stricter linting rules
* github: drop security workflow now that we use gosec linter inside golangci-lint
* github: use official golangci-lint CI linter
* Add editorconfig and gitattributes file
* 🚀 Feature: Add idempotency middleware (#2253)
* middleware: add idempotency middleware
* middleware/idempotency: use fiber.Storage instead of custom storage
* middleware/idempotency: only allocate data if really required
* middleware/idempotency: marshal response using msgp
* middleware/idempotency: add msgp tests
* middleware/idempotency: do not export response
* middleware/idempotency: disable msgp's -io option to disable generating unused methods
* middleware/idempotency: switch to time.Duration based app.Test
* middleware/idempotency: only create closure once
* middleware/idempotency: add benchmarks
* middleware/idempotency: optimize strings.ToLower when making comparison
The real "strings.ToLower" still needs to be used when storing the data.
* middleware/idempotency: safe-copy body
* middleware/idempotency: backport to v2
* middleware: add idempotency middleware
* middleware/idempotency: use fiber.Storage instead of custom storage
* middleware/idempotency: only allocate data if really required
* middleware/idempotency: marshal response using msgp
* middleware/idempotency: add msgp tests
* middleware/idempotency: do not export response
* middleware/idempotency: disable msgp's -io option to disable generating unused methods
* middleware/idempotency: switch to time.Duration based app.Test
* middleware/idempotency: only create closure once
* middleware/idempotency: add benchmarks
* middleware/idempotency: optimize strings.ToLower when making comparison
The real "strings.ToLower" still needs to be used when storing the data.
* middleware/idempotency: safe-copy body
app: make app.Test accept a time.Duration timeout
Cases found by running semgrep with an empty .semgrepignore file
semgrep --lang=go -e '$O.Test($X, $Y)'
* - logger: fix custom tag
- use real bytebufferpool dependency instead of the internal
* - logger: fix custom tag
- use real bytebufferpool dependency instead of the internal
* - logger: fix custom tag
- use real bytebufferpool dependency instead of the internal
* - logger: fix custom tag
- use real bytebufferpool dependency instead of the internal
* Add URL prefix to pprof middleware
Signed-off-by: Glenn Lewis <6598971+gmlewis@users.noreply.github.com>
* Minor tweak
Signed-off-by: Glenn Lewis <6598971+gmlewis@users.noreply.github.com>
Signed-off-by: Glenn Lewis <6598971+gmlewis@users.noreply.github.com>
* add envvar expose middleware
* fix readme remove redundant word
* change hard coded json marshal to app config marshaller
* update readme
* update all lang readme
* change t.setenv to os.setenv as backward compability reason
* change io.readall to ioutil.readall
* Update envvar.go
* remove get method that only used in test
* remove unused method from envvar struct
* remove path variable from config, update readme, add new test case
Co-authored-by: RW <rene@gofiber.io>
* fix unhandled errors
* fix unhandled error in cache package test
* omit variable type
* omit variable type
* rename variable because collide with the imported package name
* ✨ v3 (feature): initial support for binding
* ✨ v3 (feature): initial support for binding #1981
use pointer/references instead of copies
* ✨ v3 (feature): initial support for binding
embed bind into the ctx
* ✨ v3 (feature): initial support for binding
- add URI binder.
* ✨ v3 (feature): initial support for binding
- add response header binder.
* ✨ v3 (feature): initial support for binding
- add response header binder.
* ✨ v3 (feature): initial support for binding
- add cookie binder.
* ✨ v3 (feature): initial support for binding
- custom binder support for body binding.
- test case for custom binder.
* ✨ v3 (feature): initial support for binding
- add map[string][]string & map[string]string support for binders.
* ✨ v3 (feature): initial support for binding
- fix Test_Bind_Header_Map
* ✨ v3 (feature): initial support for binding
- Functional Should/Must
* ✨ v3 (feature): initial support for binding
- custom struct validator support.
* ✨ v3 (feature): initial support for binding
- README for binding.
- Docs for binding methods.
* ✨ v3 (feature): initial support for binding
- Bind() -> BindVars(), Binding() -> Bind()
* ✨ v3 (feature): initial support for binding
- fix doc problems
* ✨ v3 (feature): initial support for binding
- fix doc problems
Co-authored-by: wernerr <rene@gofiber.io>
* 🐛 Fix: Expiration time in cache middleware
* Custom expiration time using ExpirationGenerator is also functional
now instead of default Expiration only
* 🚨 Improve Test_CustomExpiration
* - stabilization of the tests
- speed up the cache tests
- fix race conditions in client and client tests
Co-authored-by: wernerr <rene@gofiber.io>
* Return an instance of `*fiber.Error` when no handler found
When a handler cannot be found for a given path, previously Fiber
would construct a plaintext response that cannot be modified.
This commit switches to returning a new instance of `*fiber.Error`
with identical error message so that users can customise the look
of their 404 pages.
Signed-off-by: AKP <tom@tdpain.net>
* Fix `Test_App_Next_Method`
This test was failing as the error returned by `c.Next()` that's
required to generate the correct 404 status code was not being
passed through the middleware and being silently ignored.
Signed-off-by: AKP <tom@tdpain.net>
* Fix `Test_Logger_All`
Signed-off-by: AKP <tom@tdpain.net>
* Fix `Test_Cache_WithHeadThenGet` test
As far as I can tell, this test is meant to check that a cached
HEAD request to a given endpoint does not return the cached
content to a GET request to the same endpoint, and the test has
been altered to correctly check for this.
Signed-off-by: AKP <tom@tdpain.net>
* ✨ Cache middleware: Store e2e headers.
As defined in RFC2616 - section-13.5.1, shared caches MUST
store end-to-end headers from backend response and MUST be
transmitted in any response formed from a cache entry.
This commit ensures a stronger consistency between responses
served from the handlers & from the cache middleware.
* ✨ Cache middleware: Add flag for e2e headers.
Set flag to prevent e2e headers caching to
be the default behavior of the cache middleware.
This would otherwise change quite a lot the
experience for cache middleware current users.
* ✨ Cache middleware: Add Benchmark for additionalHeaders feature.
* ✨ Cache middleware: Rename E2Eheaders into StoreResponseHeaders.
E2E is an acronym commonly associated with test.
While in the present case it refers to end-to-end
HTTP headers (by opposition to hop-by-hop), this
still remains confusing. This commits renames it
to a more generic name.
* ✨ Cache middleware: Update README
* ✨ Cache middleware: Move map instanciation.
This will prevent an extra memory allocation for users
not interested in this feature.
* ✨ Cache middleware: Prevent memory allocation when StoreResponseHeaders is disabled.
* ✨ Cache middleware: Store e2e headers. #1807
- use set instead of add for the headers
- copy value from the headers -> prevent problems with mutable values
Co-authored-by: wernerr <rene@gofiber.io>
* Restore original URL after the proxy
* Use the Immutable string to restore
* Changing deprecated ImmutableString to CopyString
Co-authored-by: Geet Manghnani <gmanghna@in.ibm.com>
* feat(ctx): add SessionOnly property on Cookie struct
* feat(middleware/config): add CookieSessionOnly property on middleware Config struct
* feat(csrf): link config CookieSessionOnly with fiber.Cookie in create middleware function
* fix(ctx_test): add tests for SessionOnly cookie in test_ctx_cookie
* fix(readme): update readme in csrf middleware for CookieSessionOnly property
* remove deprecated property from CookieSessionOnly explaination comments
* added HEAD method to caching
* changed key due to head and get sharing same key
* Update cache.go
- add a improvement task for later
* Update cache.go
correct comment
Co-authored-by: Jesse Quinn <jesse.quinn@zpesystems.com>
Co-authored-by: RW <rene@gofiber.io>
- Add the options to use your own middleware(should be more modular over time).
- Add the Sliding window option(see #1247)
- A little bit better polished version of #1247.
- Mounted fiber and its sub apps error handlers are now saved a new
errorHandlers map in App
- New public App.ErrorHandler method that wraps the logic for which
error handler to user on any given context
- Error handler match logic based on request path <=> prefix accuracy
- Typo fixes
- Tests
* Add c.Addr() and c.Port() functions and logger port variable
* Add gofmt suggestion, README.md description and test
* Remove c.Addr() func and use c.fasthttp.RemoteAddr() instead
* Update session.go
Fix: Session.Regenerate does not set Session.fresh to be true.
* Fix: Session should be regenerated if the session can not be found in the storage
https://github.com/gofiber/fiber/issues/1408
* Add test for session and store in session middleware.
* Clean up code
* Update middleware/session/session.go
Co-authored-by: hi019 <65871571+hi019@users.noreply.github.com>
* add tls config for http client in proxy middleware
* update exmaple and make tls.config also affects to proxy.Balancer
* add Test_Proxy_Forward_WithTlsConfig
* add a variable of type *tls.Config
* add a RWMutex for clientTlsConfig
* remove global tls config
* Update README.md
* Update proxy.go
Co-authored-by: RW <rene@gofiber.io>
* simplify `u <= (1<<7)-1` to `u < (1 << 7)`
* It's not recommended to use `len` for empty string, we can check with string with ""
* It's not recommended to use `len` for empty string, we can check with string with ""
* It's not recommended to use `len` for empty string, we can check with string with ""
* It's not recommended to use `len` for empty string, we can check with string with ""
* Instead Bool comparison can using simplified bool check if !var = false checking
* Unnecessary use of fmt.Sprintf for value without format
* For check condition two value not required ! method
* nil check may not be enough for slice, better check with len
* function parameters combined
* When the form returns error information, the text content should not start with a capital letter or end with a punctuation mark
* error var invalidPath should have name of the form errFoo, It is recommended that the error variables that are part of an API should be named
* change to condition len(x), it's faster https://github.com/gofiber/fiber/pull/1386#discussion_r652369520
* Update write.go
* Update write_bytes.go
* Update store.go
Co-authored-by: RW <rene@gofiber.io>
* add cache header to show cache status
* update default CacheHeader to X-Cache
* add CacheHeader test
* Update cache_test.go
use constants in test
Co-authored-by: RW <rene@gofiber.io>
* 🚀 new possibility to escape special routing parameters, which gives the possibility to follow the google api design guide https://cloud.google.com/apis/design/custom_methods
* 🚀 new possibility to escape special routing parameters, which gives the possibility to follow the google api design guide https://cloud.google.com/apis/design/custom_methods
* 🚀 Configure proxy.Balancer with custom timeout or client #1362
* 🚀 Configure proxy.Balancer with custom timeout or client #1362
* 🔥 Feature: Define KeyLookup configuration (#1110)
* 🔥 Feature: Allow session ID to be written in header (#1110)
* 🔥 Feature: Allow session ID to be obtained from different sources (#1110)
* 📚 Doc: Add Source configuration (#1110)
See #1308
This adds a parameter called `PathPrefix` to `filesystem.Config`
that is prepended to any filepath being read from
`filesystem.Root`.
Intended to be used with Go 1.16's `embed.FS` type.
Signed-off-by: Tom <tom@tdpain.net>
* expire cookie on Post, Delete, Patch and Put
Cookie should always expire on Post, Delete, Patch and Put as it is either valid and will be removed from storage, or is not in storage and invalid
* token and cookie match
* retrigger checks
* csrf tests
* csrf per session strategy