diff --git a/contrib_versioned_docs/version-fiberzerolog_v1.x.x/README.md b/contrib_versioned_docs/version-fiberzerolog_v1.x.x/README.md
index da02e963bfb..9608633168e 100644
--- a/contrib_versioned_docs/version-fiberzerolog_v1.x.x/README.md
+++ b/contrib_versioned_docs/version-fiberzerolog_v1.x.x/README.md
@@ -25,8 +25,9 @@ Repository for third party middlewares with dependencies.
* [Fibersentry](./fibersentry/README.md)
* [Fiberzap](./fiberzap/README.md)
* [Fiberzerolog](./fiberzerolog/README.md)
+* [HCaptcha](./hcaptcha/README.md)
* [JWT](./jwt/README.md)
-* [Loadshed](./loadshed/README.md)
+* [Loadshed](./loadshed/README.md)
* [NewRelic](./fibernewrelic/README.md)
* [Open Policy Agent](./opafiber/README.md)
* [Otelfiber (OpenTelemetry)](./otelfiber/README.md)
diff --git a/contrib_versioned_docs/version-fiberzerolog_v1.x.x/casbin/README.md b/contrib_versioned_docs/version-fiberzerolog_v1.x.x/casbin/README.md
index 6462cc0294a..c461235c702 100644
--- a/contrib_versioned_docs/version-fiberzerolog_v1.x.x/casbin/README.md
+++ b/contrib_versioned_docs/version-fiberzerolog_v1.x.x/casbin/README.md
@@ -19,7 +19,7 @@ Casbin middleware for Fiber.
go get -u github.com/gofiber/fiber/v2
go get -u github.com/gofiber/contrib/casbin
```
-choose an adapter from [here](https://casbin.org/docs/en/adapters)
+choose an adapter from [here](https://casbin.org/docs/adapters)
```
go get -u github.com/casbin/xorm-adapter
```
diff --git a/contrib_versioned_docs/version-fiberzerolog_v1.x.x/fibernewrelic/README.md b/contrib_versioned_docs/version-fiberzerolog_v1.x.x/fibernewrelic/README.md
index 28f954ce983..c6636fe179c 100644
--- a/contrib_versioned_docs/version-fiberzerolog_v1.x.x/fibernewrelic/README.md
+++ b/contrib_versioned_docs/version-fiberzerolog_v1.x.x/fibernewrelic/README.md
@@ -29,14 +29,16 @@ fibernewrelic.New(config fibernewrelic.Config) fiber.Handler
## Config
-| Property | Type | Description | Default |
-|:------------------|:-----------------|:---------------------------------------|:---------------|
-| License | `string` | Required - New Relic License Key | `""` |
-| AppName | `string` | New Relic Application Name | `fiber-api` |
-| Enabled | `bool` | Enable/Disable New Relic | `false` |
-| ~~TransportType~~ | ~~`string`~~ | ~~Can be HTTP or HTTPS~~ (Deprecated) | ~~`"HTTP"`~~ |
-| Application | `Application` | Existing New Relic App | `nil` |
-| ErrorStatusCodeHandler | `func(c *fiber.Ctx, err error) int` | If you want to change newrelic status code, you can use it. | `DefaultErrorStatusCodeHandler` |
+| Property | Type | Description | Default |
+|:-----------------------|:-----------------|:------------------------------------------------------------|:--------------------------------|
+| License | `string` | Required - New Relic License Key | `""` |
+| AppName | `string` | New Relic Application Name | `fiber-api` |
+| Enabled | `bool` | Enable/Disable New Relic | `false` |
+| ~~TransportType~~ | ~~`string`~~ | ~~Can be HTTP or HTTPS~~ (Deprecated) | ~~`"HTTP"`~~ |
+| Application | `Application` | Existing New Relic App | `nil` |
+| ErrorStatusCodeHandler | `func(c *fiber.Ctx, err error) int` | If you want to change newrelic status code, you can use it. | `DefaultErrorStatusCodeHandler` |
+| Next | `func(c *fiber.Ctx) bool` | Next defines a function to skip this middleware when returned true. | `nil` |
+
## Usage
diff --git a/contrib_versioned_docs/version-fiberzerolog_v1.x.x/fibersentry/README.md b/contrib_versioned_docs/version-fiberzerolog_v1.x.x/fibersentry/README.md
index 6291441d9e3..56fd37ea570 100644
--- a/contrib_versioned_docs/version-fiberzerolog_v1.x.x/fibersentry/README.md
+++ b/contrib_versioned_docs/version-fiberzerolog_v1.x.x/fibersentry/README.md
@@ -33,7 +33,7 @@ fibersentry.New(config ...fibersentry.Config) fiber.Handler
## Config
| Property | Type | Description | Default |
-|:----------------|:----------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:------------------|
+| :-------------- | :-------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------- |
| Repanic | `bool` | Repanic configures whether Sentry should repanic after recovery. Set to true, if [Recover](https://github.com/gofiber/fiber/tree/master/middleware/recover) middleware is used. | `false` |
| WaitForDelivery | `bool` | WaitForDelivery configures whether you want to block the request before moving forward with the response. If [Recover](https://github.com/gofiber/fiber/tree/master/middleware/recover) middleware is used, it's safe to either skip this option or set it to false. | `false` |
| Timeout | `time.Duration` | Timeout for the event delivery requests. | `time.Second * 2` |
@@ -41,10 +41,10 @@ fibersentry.New(config ...fibersentry.Config) fiber.Handler
## Usage
`fibersentry` attaches an instance of `*sentry.Hub` (https://godoc.org/github.com/getsentry/sentry-go#Hub) to the request's context, which makes it available throughout the rest of the request's lifetime.
-You can access it by using the `fibersentry.GetHubFromContext()` method on the context itself in any of your proceeding middleware and routes.
-And it should be used instead of the global `sentry.CaptureMessage`, `sentry.CaptureException`, or any other calls, as it keeps the separation of data between the requests.
+You can access it by using the `fibersentry.GetHubFromContext()` or `fibersentry.MustGetHubFromContext()` method on the context itself in any of your proceeding middleware and routes.
+Keep in mind that `*sentry.Hub` should be used instead of the global `sentry.CaptureMessage`, `sentry.CaptureException`, or any other calls, as it keeps the separation of data between the requests.
-**Keep in mind that `*sentry.Hub` won't be available in middleware attached before to `fibersentry`!**
+- **Keep in mind that `*sentry.Hub` won't be available in middleware attached before `fibersentry`. In this case, `GetHubFromContext()` returns nil, and `MustGetHubFromContext()` will panic.**
```go
package main
diff --git a/contrib_versioned_docs/version-fiberzerolog_v1.x.x/hcaptcha/README.md b/contrib_versioned_docs/version-fiberzerolog_v1.x.x/hcaptcha/README.md
new file mode 100644
index 00000000000..952956e0168
--- /dev/null
+++ b/contrib_versioned_docs/version-fiberzerolog_v1.x.x/hcaptcha/README.md
@@ -0,0 +1,83 @@
+---
+id: hcaptcha
+---
+
+# HCaptcha
+
+![Release](https://img.shields.io/github/v/tag/gofiber/contrib?filter=hcaptcha*)
+[![Discord](https://img.shields.io/discord/704680098577514527?style=flat&label=%F0%9F%92%AC%20discord&color=00ACD7)](https://gofiber.io/discord)
+![Test](https://github.com/gofiber/contrib/workflows/Tests/badge.svg)
+![Security](https://github.com/gofiber/contrib/workflows/Security/badge.svg)
+![Linter](https://github.com/gofiber/contrib/workflows/Linter/badge.svg)
+
+A simple [HCaptcha](https://hcaptcha.com) middleware to prevent bot attacks.
+
+:::note
+
+Requires Go **1.21** and above
+
+:::
+
+## Install
+
+:::caution
+
+This middleware only supports Fiber **v3**.
+
+:::
+
+```shell
+go get -u github.com/gofiber/fiber/v3
+go get -u github.com/gofiber/contrib/hcaptcha
+```
+
+## Signature
+
+```go
+hcaptcha.New(config hcaptcha.Config) fiber.Handler
+```
+
+## Config
+
+| Property | Type | Description | Default |
+|:----------------|:----------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:--------------------------------------|
+| SecretKey | `string` | The secret key you obtained from the HCaptcha admin panel. This field must not be empty. | `""` |
+| ResponseKeyFunc | `func(fiber.Ctx) (string, error)` | ResponseKeyFunc should return the token that captcha provides upon successful solving. By default, it gets the token from the body by parsing a JSON request and returns the `hcaptcha_token` field. | `hcaptcha.DefaultResponseKeyFunc` |
+| SiteVerifyURL | `string` | This property specifies the API resource used for token authentication. | `https://api.hcaptcha.com/siteverify` |
+
+## Example
+
+```go
+package main
+
+import (
+ "github.com/gofiber/contrib/hcaptcha"
+ "github.com/gofiber/fiber/v3"
+ "log"
+)
+
+const (
+ TestSecretKey = "0x0000000000000000000000000000000000000000"
+ TestSiteKey = "20000000-ffff-ffff-ffff-000000000002"
+)
+
+func main() {
+ app := fiber.New()
+ captcha := hcaptcha.New(hcaptcha.Config{
+ // Must set the secret key
+ SecretKey: TestSecretKey,
+ })
+
+ app.Get("/api/", func(c fiber.Ctx) error {
+ return c.JSON(fiber.Map{
+ "hcaptcha_site_key": TestSiteKey,
+ })
+ })
+
+ app.Post("/api/robots-excluded", func(c fiber.Ctx) error {
+ return c.SendString("You are not a robot")
+ }, captcha)
+
+ log.Fatal(app.Listen(":3000"))
+}
+```
diff --git a/contrib_versioned_docs/version-fiberzerolog_v1.x.x/socketio/README.md b/contrib_versioned_docs/version-fiberzerolog_v1.x.x/socketio/README.md
index 976495c19d9..6e64c79cb34 100644
--- a/contrib_versioned_docs/version-fiberzerolog_v1.x.x/socketio/README.md
+++ b/contrib_versioned_docs/version-fiberzerolog_v1.x.x/socketio/README.md
@@ -24,7 +24,8 @@ go get -u github.com/gofiber/contrib/socketio
```go
// Initialize new socketio in the callback this will
// execute a callback that expects kws *Websocket Object
-func New(callback func(kws *Websocket)) func(*fiber.Ctx) error
+// and optional config websocket.Config
+func New(callback func(kws *Websocket), config ...websocket.Config) func(*fiber.Ctx) error
```
```go
@@ -98,12 +99,12 @@ func main() {
// Multiple event handling supported
socketio.On(socketio.EventConnect, func(ep *socketio.EventPayload) {
- fmt.Println(fmt.Sprintf("Connection event 1 - User: %s", ep.Kws.GetStringAttribute("user_id")))
+ fmt.Printf("Connection event 1 - User: %s", ep.Kws.GetStringAttribute("user_id"))
})
// Custom event handling supported
socketio.On("CUSTOM_EVENT", func(ep *socketio.EventPayload) {
- fmt.Println(fmt.Sprintf("Custom event - User: %s", ep.Kws.GetStringAttribute("user_id")))
+ fmt.Printf("Custom event - User: %s", ep.Kws.GetStringAttribute("user_id"))
// --->
// DO YOUR BUSINESS HERE
@@ -114,7 +115,7 @@ func main() {
// On message event
socketio.On(socketio.EventMessage, func(ep *socketio.EventPayload) {
- fmt.Println(fmt.Sprintf("Message event - User: %s - Message: %s", ep.Kws.GetStringAttribute("user_id"), string(ep.Data)))
+ fmt.Printf("Message event - User: %s - Message: %s", ep.Kws.GetStringAttribute("user_id"), string(ep.Data))
message := MessageObject{}
@@ -148,7 +149,7 @@ func main() {
socketio.On(socketio.EventDisconnect, func(ep *socketio.EventPayload) {
// Remove the user from the local clients
delete(clients, ep.Kws.GetStringAttribute("user_id"))
- fmt.Println(fmt.Sprintf("Disconnection event - User: %s", ep.Kws.GetStringAttribute("user_id")))
+ fmt.Printf("Disconnection event - User: %s", ep.Kws.GetStringAttribute("user_id"))
})
// On close event
@@ -156,12 +157,12 @@ func main() {
socketio.On(socketio.EventClose, func(ep *socketio.EventPayload) {
// Remove the user from the local clients
delete(clients, ep.Kws.GetStringAttribute("user_id"))
- fmt.Println(fmt.Sprintf("Close event - User: %s", ep.Kws.GetStringAttribute("user_id")))
+ fmt.Printf("Close event - User: %s", ep.Kws.GetStringAttribute("user_id"))
})
// On error event
socketio.On(socketio.EventError, func(ep *socketio.EventPayload) {
- fmt.Println(fmt.Sprintf("Error event - User: %s", ep.Kws.GetStringAttribute("user_id")))
+ fmt.Printf("Error event - User: %s", ep.Kws.GetStringAttribute("user_id"))
})
app.Get("/ws/:id", socketio.New(func(kws *socketio.Websocket) {
diff --git a/contrib_versioned_docs/version-fiberzerolog_v1.x.x/swagger/README.md b/contrib_versioned_docs/version-fiberzerolog_v1.x.x/swagger/README.md
index b928f4f555e..18d619f3153 100644
--- a/contrib_versioned_docs/version-fiberzerolog_v1.x.x/swagger/README.md
+++ b/contrib_versioned_docs/version-fiberzerolog_v1.x.x/swagger/README.md
@@ -11,7 +11,7 @@ title: Swagger
![Security](https://github.com/gofiber/contrib/workflows/Security/badge.svg)
![Linter](https://github.com/gofiber/contrib/workflows/Linter/badge.svg)
-Swagger middleware for [Fiber](https://github.com/gofiber/fiber). The middleware handles Swagger UI.
+Swagger middleware for [Fiber](https://github.com/gofiber/fiber). The middleware handles Swagger UI.
**Note: Requires Go 1.18 and above**
@@ -63,6 +63,19 @@ cfg := swagger.Config{
app.Use(swagger.New(cfg))
```
+Use program data for Swagger content:
+```go
+cfg := swagger.Config{
+ BasePath: "/",
+ FilePath: "./docs/swagger.json",
+ FileContent: mySwaggerByteSlice,
+ Path: "swagger",
+ Title: "Swagger API Docs",
+}
+
+app.Use(swagger.New(cfg))
+```
+
Using multiple instances of Swagger:
```go
// Create Swagger middleware for v1
@@ -102,6 +115,12 @@ type Config struct {
// Optional. Default: ./swagger.json
FilePath string
+ // FileContent for the content of the swagger.json or swagger.yaml file.
+ // If provided, FilePath will not be read.
+ //
+ // Optional. Default: nil
+ FileContent []byte
+
// Path combines with BasePath for the full UI path
//
// Optional. Default: docs