From 88d45e808f06bf776497972935fde74decda0761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emre=20Savc=C4=B1?= Date: Sat, 27 Aug 2022 02:49:08 +0300 Subject: [PATCH 01/11] add envvar expose middleware --- middleware/envvar/README.md | 86 ++++++++++++++++++++++++++++++ middleware/envvar/envvar.go | 85 ++++++++++++++++++++++++++++++ middleware/envvar/envvar_test.go | 90 ++++++++++++++++++++++++++++++++ 3 files changed, 261 insertions(+) create mode 100644 middleware/envvar/README.md create mode 100644 middleware/envvar/envvar.go create mode 100644 middleware/envvar/envvar_test.go diff --git a/middleware/envvar/README.md b/middleware/envvar/README.md new file mode 100644 index 0000000000..184ce1a5a5 --- /dev/null +++ b/middleware/envvar/README.md @@ -0,0 +1,86 @@ +# Exposing Environment Variables Middleware + +EnvVar middleware for [Fiber](https://github.com/gofiber/fiber) that can be used to expose environment variables with various options. + +## Table of Contents + +- [Environment Variables (EnvVar) Middleware](#environment-variables-envvar-middleware) + - [Table of Contents](#table-of-contents) + - [Signatures](#signatures) + - [Examples](#examples) + - [Default Config](#default-config) + - [Custom Config](#custom-config) + - [Response](#http-response) + - [Config](#config) + - [Default Config](#default-config-1) + +## Signatures + +```go +func New(config ...Config) fiber.Handler +``` + +## Examples + +First import the middleware from Fiber, + +```go +import ( + "github.com/gofiber/fiber/v2" + "github.com/gofiber/fiber/v2/middleware/envvars" +) +``` + +Then create a Fiber app with `app := fiber.New()`. + +### Default Config + +```go +app.Use(envvar.New()) +``` + +### Custom Config + +```go +app.Use(envvar.New(envvar.Config{ + Path: "/expose/envvars", + ExportVars: map[string]string{"testKey": "", "testDefaultKey": "testDefaultVal"}, + ExcludeVars: map[string]string{"excludeKey": ""}} +})) +``` + +### Response + +Http response contract: +``` +{ + "vars": { + "someEnvVariable": "someValue", + "anotherEnvVariable": "anotherValue", + } +} + +``` + +## Config + +```go +// Config defines the config for middleware. +type Config struct { + // Path specifies the path of handler that exposes environment variables + Path string + // ExportVars specifies the environment variables that should export + ExportVars map[string]string + // ExcludeVars specifies the environment variables that should not export + ExcludeVars map[string]string +} + +``` + +## Default Config + +```go +Config{ + Path: "/envvars", +} +``` diff --git a/middleware/envvar/envvar.go b/middleware/envvar/envvar.go new file mode 100644 index 0000000000..711ac64a20 --- /dev/null +++ b/middleware/envvar/envvar.go @@ -0,0 +1,85 @@ +package envvar + +import ( + "encoding/json" + "github.com/gofiber/fiber/v2" + "github.com/gofiber/fiber/v2/utils" + "os" + "strings" +) + +// Config defines the config for middleware. +type Config struct { + // Path specifies the path of handler that exposes environment variables + Path string + // ExportVars specifies the environment variables that should export + ExportVars map[string]string + // ExcludeVars specifies the environment variables that should not export + ExcludeVars map[string]string +} + +type EnvVar struct { + Vars map[string]string `json:"vars"` +} + +func (envVar EnvVar) set(key, val string) { + envVar.Vars[key] = val +} + +func (envVar EnvVar) get(key string) string { + return envVar.Vars[key] +} + +func New(config ...Config) fiber.Handler { + var cfg Config + if len(config) > 0 { + cfg = config[0] + } else { + cfg = Config{Path: "/envvars"} + } + + return func(c *fiber.Ctx) error { + path := c.Path() + if len(path) < len(cfg.Path) || !strings.HasPrefix(path, cfg.Path) { + return c.Next() + } + + if path == cfg.Path { + envVar := newEnvVar(cfg) + varsByte, err := json.Marshal(envVar) + if err != nil { + c.Response().SetBodyRaw(utils.UnsafeBytes(err.Error())) + c.Response().SetStatusCode(fiber.StatusInternalServerError) + return nil + } + c.Response().SetBodyRaw(varsByte) + c.Response().SetStatusCode(fiber.StatusOK) + c.Response().Header.Set("Content-Type", "application/json; charset=utf-8") + return nil + } + + return c.Next() + } +} + +func newEnvVar(cfg Config) *EnvVar { + vars := &EnvVar{Vars: make(map[string]string)} + + if len(cfg.ExportVars) > 0 { + for key, defaultVal := range cfg.ExportVars { + vars.set(key, defaultVal) + if envVal, exists := os.LookupEnv(key); exists { + vars.set(key, envVal) + } + } + } else { + for _, envVal := range os.Environ() { + keyVal := strings.Split(envVal, "=") + if _, exists := cfg.ExcludeVars[keyVal[0]]; !exists { + vars.set(keyVal[0], keyVal[1]) + } + } + } + + return vars +} diff --git a/middleware/envvar/envvar_test.go b/middleware/envvar/envvar_test.go new file mode 100644 index 0000000000..27fca18d30 --- /dev/null +++ b/middleware/envvar/envvar_test.go @@ -0,0 +1,90 @@ +package envvar + +import ( + "encoding/json" + "github.com/gofiber/fiber/v2" + "github.com/gofiber/fiber/v2/utils" + "io" + "net/http" + "testing" +) + +func TestEnvVarStructWithExportVarsExcludeVars(t *testing.T) { + t.Setenv("testKey", "testEnvValue") + t.Setenv("anotherEnvKey", "anotherEnvVal") + t.Setenv("excludeKey", "excludeEnvValue") + + vars := newEnvVar(Config{ + ExportVars: map[string]string{"testKey": "", "testDefaultKey": "testDefaultVal"}, + ExcludeVars: map[string]string{"excludeKey": ""}}) + + utils.AssertEqual(t, vars.get("testKey"), "testEnvValue") + utils.AssertEqual(t, vars.get("testDefaultKey"), "testDefaultVal") + utils.AssertEqual(t, vars.get("excludeKey"), "") + utils.AssertEqual(t, vars.get("anotherEnvKey"), "") +} + +func TestEnvVarHandler(t *testing.T) { + t.Setenv("testKey", "testVal") + + expectedEnvVarResponse, _ := json.Marshal( + struct { + Vars map[string]string `json:"vars"` + }{ + map[string]string{"testKey": "testVal"}, + }) + + app := fiber.New() + app.Use(New(Config{ + Path: "/envvars", + ExportVars: map[string]string{"testKey": ""}})) + + req, _ := http.NewRequest("GET", "http://localhost/envvars", nil) + resp, err := app.Test(req) + utils.AssertEqual(t, nil, err) + + respBody, err := io.ReadAll(resp.Body) + utils.AssertEqual(t, nil, err) + + utils.AssertEqual(t, expectedEnvVarResponse, respBody) +} + +func TestEnvVarHandlerNotMatched(t *testing.T) { + app := fiber.New() + app.Use(New(Config{ + Path: "/envvars", + ExportVars: map[string]string{"testKey": ""}})) + + app.Get("/another-path", func(ctx *fiber.Ctx) error { + ctx.SendString("OK") + return nil + }) + + req, _ := http.NewRequest("GET", "http://localhost/another-path", nil) + resp, err := app.Test(req) + utils.AssertEqual(t, nil, err) + + respBody, err := io.ReadAll(resp.Body) + utils.AssertEqual(t, nil, err) + + utils.AssertEqual(t, []byte("OK"), respBody) +} + +func TestEnvVarHandlerDefaultConfig(t *testing.T) { + t.Setenv("testEnvKey", "testEnvVal") + + app := fiber.New() + app.Use(New()) + + req, _ := http.NewRequest("GET", "http://localhost/envvars", nil) + resp, err := app.Test(req) + utils.AssertEqual(t, nil, err) + + respBody, err := io.ReadAll(resp.Body) + utils.AssertEqual(t, nil, err) + + var envVars EnvVar + utils.AssertEqual(t, nil, json.Unmarshal(respBody, &envVars)) + val := envVars.get("testEnvKey") + utils.AssertEqual(t, "testEnvVal", val) +} From 673974c2e12142a97bf500e93aa69731460ed8be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emre=20Savc=C4=B1?= Date: Sat, 27 Aug 2022 03:03:48 +0300 Subject: [PATCH 02/11] fix readme remove redundant word --- middleware/envvar/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/middleware/envvar/README.md b/middleware/envvar/README.md index 184ce1a5a5..8031f83994 100644 --- a/middleware/envvar/README.md +++ b/middleware/envvar/README.md @@ -27,7 +27,7 @@ First import the middleware from Fiber, ```go import ( "github.com/gofiber/fiber/v2" - "github.com/gofiber/fiber/v2/middleware/envvars" + "github.com/gofiber/fiber/v2/middleware/envvar" ) ``` From b5e5150f391c34ce24b51af0dd3aec9cd0afb4a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emre=20Savc=C4=B1?= Date: Sat, 27 Aug 2022 12:29:39 +0300 Subject: [PATCH 03/11] change hard coded json marshal to app config marshaller --- middleware/envvar/envvar.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/middleware/envvar/envvar.go b/middleware/envvar/envvar.go index 711ac64a20..8d3e64a33c 100644 --- a/middleware/envvar/envvar.go +++ b/middleware/envvar/envvar.go @@ -1,7 +1,6 @@ package envvar import ( - "encoding/json" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/utils" "os" @@ -46,7 +45,7 @@ func New(config ...Config) fiber.Handler { if path == cfg.Path { envVar := newEnvVar(cfg) - varsByte, err := json.Marshal(envVar) + varsByte, err := c.App().Config().JSONEncoder(envVar) if err != nil { c.Response().SetBodyRaw(utils.UnsafeBytes(err.Error())) c.Response().SetStatusCode(fiber.StatusInternalServerError) From eaa16e4b7a89db2112fdff6077eff7ed887750a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emre=20Savc=C4=B1?= Date: Sat, 27 Aug 2022 12:30:02 +0300 Subject: [PATCH 04/11] update readme --- .github/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/README.md b/.github/README.md index 85406ea913..c04982642c 100644 --- a/.github/README.md +++ b/.github/README.md @@ -595,13 +595,14 @@ func main() { Here is a list of middleware that are included within the Fiber framework. | Middleware | Description | -| :------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|:---------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [basicauth](https://github.com/gofiber/fiber/tree/master/middleware/basicauth) | Basic auth middleware provides an HTTP basic authentication. It calls the next handler for valid credentials and 401 Unauthorized for missing or invalid credentials. | | [cache](https://github.com/gofiber/fiber/tree/master/middleware/cache) | Intercept and cache responses | | [compress](https://github.com/gofiber/fiber/tree/master/middleware/compress) | Compression middleware for Fiber, it supports `deflate`, `gzip` and `brotli` by default. | | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Protect from CSRF exploits. | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware which encrypts cookie values. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Expose environment variables with providing an optional config. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware that lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware that serves via its HTTP server runtime exposed variants in the JSON format. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignore favicon from logs or serve from memory if a file path is provided. | From 429b2b93f97347488a6865705ab1c293d8489ef5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emre=20Savc=C4=B1?= Date: Sun, 28 Aug 2022 02:43:30 +0300 Subject: [PATCH 05/11] update all lang readme --- .github/README_ckb.md | 1 + .github/README_de.md | 1 + .github/README_es.md | 1 + .github/README_fa.md | 1 + .github/README_fr.md | 1 + .github/README_he.md | 1 + .github/README_id.md | 1 + .github/README_it.md | 41 +++++++++++++++++++++-------------------- .github/README_ja.md | 1 + .github/README_ko.md | 1 + .github/README_nl.md | 1 + .github/README_pt.md | 1 + .github/README_ru.md | 1 + .github/README_sa.md | 1 + .github/README_tr.md | 25 +++++++++++++------------ .github/README_zh-CN.md | 1 + .github/README_zh-TW.md | 1 + 17 files changed, 49 insertions(+), 32 deletions(-) diff --git a/.github/README_ckb.md b/.github/README_ckb.md index 8fd7ae8dbb..1f1bfd36d7 100644 --- a/.github/README_ckb.md +++ b/.github/README_ckb.md @@ -601,6 +601,7 @@ func main() { | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Protect from CSRF exploits. | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware which encrypts cookie values. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Expose environment variables with providing an optional config. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware that lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware that serves via its HTTP server runtime exposed variants in the JSON format. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignore favicon from logs or serve from memory if a file path is provided. | diff --git a/.github/README_de.md b/.github/README_de.md index 8964567e1b..083fb17a20 100644 --- a/.github/README_de.md +++ b/.github/README_de.md @@ -571,6 +571,7 @@ Hier finden Sie eine Liste der Middleware, die im Fiber-Framework enthalten ist. | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Protect from CSRF exploits. | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware which encrypts cookie values. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Expose environment variables with providing an optional config. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware that lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware that serves via its HTTP server runtime exposed variants in the JSON format. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignore favicon from logs or serve from memory if a file path is provided. | diff --git a/.github/README_es.md b/.github/README_es.md index 29416f26e4..1803de9fdd 100644 --- a/.github/README_es.md +++ b/.github/README_es.md @@ -571,6 +571,7 @@ Aquí está una lista del middleware incluido en el marco web Fiber. | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Protect from CSRF exploits. | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware which encrypts cookie values. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Expose environment variables with providing an optional config. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware that lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware that serves via its HTTP server runtime exposed variants in the JSON format. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignore favicon from logs or serve from memory if a file path is provided. | diff --git a/.github/README_fa.md b/.github/README_fa.md index 90332c3c75..fb555ed4f1 100644 --- a/.github/README_fa.md +++ b/.github/README_fa.md @@ -686,6 +686,7 @@ func main() { | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) |فعال سازی هدر های cross-origin با گزینه های مختلف.| | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) |در برابر حملات CSRF ایمنی ایجاد میکند.| | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) |مقادیر کوکی هارا رمزنگاری میکند.| +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | با ارائه تنظیمات اختیاری، متغیرهای محیط را در معرض دید قرار دهید. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | میدلور ETag به کش ها اجازه میدهد کارآمد تر عمل کرده و در پهنای باند صرفه جویی کنند. به عنوان یک وب سرور نیازی به دادن پاسخ کامل نیست اگر محتوا تغییر نکرده باشد. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | میدلور Expvar میتواند متغیر هایی را تعریف کرده و مقادیر انها را در زمان اجرا با فرمت JSON به شما نشان دهد. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | جلوگیری و یا کش کردن درخواست های favicon در صورتی که مسیر یک فایل را داده باشید.| diff --git a/.github/README_fr.md b/.github/README_fr.md index ebb24e34ad..b2fc37324b 100644 --- a/.github/README_fr.md +++ b/.github/README_fr.md @@ -573,6 +573,7 @@ Here is a list of middleware that are included within the Fiber framework. | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Protect from CSRF exploits. | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware which encrypts cookie values. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Expose environment variables with providing an optional config. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware that lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware that serves via its HTTP server runtime exposed variants in the JSON format. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignore favicon from logs or serve from memory if a file path is provided. | diff --git a/.github/README_he.md b/.github/README_he.md index c687038739..7b19957e0e 100644 --- a/.github/README_he.md +++ b/.github/README_he.md @@ -689,6 +689,7 @@ Here is a list of middleware that are included within the Fiber framework. | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Protect from CSRF exploits. | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware which encrypts cookie values. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Expose environment variables with providing an optional config. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware that lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware that serves via its HTTP server runtime exposed variants in the JSON format. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignore favicon from logs or serve from memory if a file path is provided. | diff --git a/.github/README_id.md b/.github/README_id.md index 6e3e41c560..285644b8fa 100644 --- a/.github/README_id.md +++ b/.github/README_id.md @@ -574,6 +574,7 @@ Kumpulan `middleware` yang ada didalam kerangka kerja Fiber. | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Protect from CSRF exploits. | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware which encrypts cookie values. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Expose environment variables with providing an optional config. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware that lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware that serves via its HTTP server runtime exposed variants in the JSON format. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignore favicon from logs or serve from memory if a file path is provided. | diff --git a/.github/README_it.md b/.github/README_it.md index a07aa84d85..b2e6307aea 100644 --- a/.github/README_it.md +++ b/.github/README_it.md @@ -589,28 +589,29 @@ func main() { Qui una lista dei middleware inclusi con Fiber. -| Middleware | Descrizione | -| :------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [basicauth](https://github.com/gofiber/fiber/tree/master/middleware/basicauth) | Middleware basico di autenticazione usando http. Chiama il suo handler se le credenziali sono guiste e il codice 401 Unauthorized per credenziali mancanti o invailde. | -| [cache](https://github.com/gofiber/fiber/tree/master/middleware/cache) | Intercetta e mette nella cache la risposta | -| [compress](https://github.com/gofiber/fiber/tree/master/middleware/compress) | Middlewere di compressione per Fiber, supporta `deflate`, `gzip` e `brotli` di default. | +| Middleware | Descrizione | +| :------------------------------------------------------------------------------------- |:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| [basicauth](https://github.com/gofiber/fiber/tree/master/middleware/basicauth) | Middleware basico di autenticazione usando http. Chiama il suo handler se le credenziali sono guiste e il codice 401 Unauthorized per credenziali mancanti o invailde. | +| [cache](https://github.com/gofiber/fiber/tree/master/middleware/cache) | Intercetta e mette nella cache la risposta | +| [compress](https://github.com/gofiber/fiber/tree/master/middleware/compress) | Middlewere di compressione per Fiber, supporta `deflate`, `gzip` e `brotli` di default. | | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Ti permette di usare cross-origin resource sharing \(CORS\) con tante optzioni. | -| [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Ti protegge da attachi CSRF. | -| [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Middleware che encrypta i valori dei cookie. | -| [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | Middlewere che permette alle cache di essere piu efficienti e salvare banda, come un web server non deve rimandare il messagio pieno se il contenuto non è cambiato. | -| [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Middleware che serve via il suo runtime server HTTP varianti esposte in formato JSON. | -| [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignora favicon dai logs o serve dalla memoria se un filepath si dà. | -| [filesystem](https://github.com/gofiber/fiber/tree/master/middleware/filesystem) | Middleware per il FileSystem per Fiber, grazie tante e crediti a Alireza Salary | -| [limiter](https://github.com/gofiber/fiber/tree/master/middleware/limiter) | Middelwere per Rate-limiting per Fiber. Usato per limitare richieste continue agli APIs publici e/o endpoints come un password reset. | -| [logger](https://github.com/gofiber/fiber/tree/master/middleware/logger) | Logger HTTP per richiesta/risposta. | -| [monitor](https://github.com/gofiber/fiber/tree/master/middleware/monitor) | Middleware per monitorare che riporta metriche server, ispirato da express-status-monitor | -| [pprof](https://github.com/gofiber/fiber/tree/master/middleware/pprof) | Grazie tante a Matthew Lee \(@mthli\) | -| [proxy](https://github.com/gofiber/fiber/tree/master/middleware/proxy) | Ti permette di fare richieste proxy a multipli server. | -| [recover](https://github.com/gofiber/fiber/tree/master/middleware/recover) | Middleware per recuperare dai attachi di panico da tutte le parti nella stack chain e da il controllo al centralizzato[ ErrorHandler](https://docs.gofiber.io/guide/error-handling). | -| [requestid](https://github.com/gofiber/fiber/tree/master/middleware/requestid) | Aggiunge un requestid a ogni richiesta. | +| [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Ti protegge da attachi CSRF. | +| [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Middleware che encrypta i valori dei cookie. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Esporre le variabili di ambiente fornendo una configurazione facoltativa. | +| [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | Middlewere che permette alle cache di essere piu efficienti e salvare banda, come un web server non deve rimandare il messagio pieno se il contenuto non è cambiato. | +| [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Middleware che serve via il suo runtime server HTTP varianti esposte in formato JSON. | +| [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignora favicon dai logs o serve dalla memoria se un filepath si dà. | +| [filesystem](https://github.com/gofiber/fiber/tree/master/middleware/filesystem) | Middleware per il FileSystem per Fiber, grazie tante e crediti a Alireza Salary | +| [limiter](https://github.com/gofiber/fiber/tree/master/middleware/limiter) | Middelwere per Rate-limiting per Fiber. Usato per limitare richieste continue agli APIs publici e/o endpoints come un password reset. | +| [logger](https://github.com/gofiber/fiber/tree/master/middleware/logger) | Logger HTTP per richiesta/risposta. | +| [monitor](https://github.com/gofiber/fiber/tree/master/middleware/monitor) | Middleware per monitorare che riporta metriche server, ispirato da express-status-monitor | +| [pprof](https://github.com/gofiber/fiber/tree/master/middleware/pprof) | Grazie tante a Matthew Lee \(@mthli\) | +| [proxy](https://github.com/gofiber/fiber/tree/master/middleware/proxy) | Ti permette di fare richieste proxy a multipli server. | +| [recover](https://github.com/gofiber/fiber/tree/master/middleware/recover) | Middleware per recuperare dai attachi di panico da tutte le parti nella stack chain e da il controllo al centralizzato[ ErrorHandler](https://docs.gofiber.io/guide/error-handling). | +| [requestid](https://github.com/gofiber/fiber/tree/master/middleware/requestid) | Aggiunge un requestid a ogni richiesta. | | [session](https://github.com/gofiber/fiber/tree/master/middleware/session) | Middelwere per sessioni. NOTA: Questo middleware usa il nostro Storage package. | -| [skip](https://github.com/gofiber/fiber/tree/master/middleware/skip) | Middleware che salta un wrapped handler se un predicate è vero. | -| [timeout](https://github.com/gofiber/fiber/tree/master/middleware/timeout) | Aggiunge un tempo massimo per una richiesta e lo manda a ErrorHandler se si supera. | +| [skip](https://github.com/gofiber/fiber/tree/master/middleware/skip) | Middleware che salta un wrapped handler se un predicate è vero. | +| [timeout](https://github.com/gofiber/fiber/tree/master/middleware/timeout) | Aggiunge un tempo massimo per una richiesta e lo manda a ErrorHandler se si supera. | ## 🧬 Middleware Esterni diff --git a/.github/README_ja.md b/.github/README_ja.md index 6d2cda5293..8243b29236 100644 --- a/.github/README_ja.md +++ b/.github/README_ja.md @@ -576,6 +576,7 @@ func main() { | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Protect from CSRF exploits. | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware which encrypts cookie values. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Expose environment variables with providing an optional config. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware that lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware that serves via its HTTP server runtime exposed variants in the JSON format. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignore favicon from logs or serve from memory if a file path is provided. | diff --git a/.github/README_ko.md b/.github/README_ko.md index 6b4ba34fdb..00cea2806e 100644 --- a/.github/README_ko.md +++ b/.github/README_ko.md @@ -577,6 +577,7 @@ Fiber 프레임워크에 포함되는 미들웨어 목록입니다. | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Protect from CSRF exploits. | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware which encrypts cookie values. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Expose environment variables with providing an optional config. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware that lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware that serves via its HTTP server runtime exposed variants in the JSON format. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignore favicon from logs or serve from memory if a file path is provided. | diff --git a/.github/README_nl.md b/.github/README_nl.md index d7ffd4daa1..000a378797 100644 --- a/.github/README_nl.md +++ b/.github/README_nl.md @@ -577,6 +577,7 @@ Here is a list of middleware that are included within the Fiber framework. | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Protect from CSRF exploits. | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware which encrypts cookie values. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Expose environment variables with providing an optional config. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware that lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware that serves via its HTTP server runtime exposed variants in the JSON format. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignore favicon from logs or serve from memory if a file path is provided. | diff --git a/.github/README_pt.md b/.github/README_pt.md index f15f4e3a94..0079eb632d 100644 --- a/.github/README_pt.md +++ b/.github/README_pt.md @@ -571,6 +571,7 @@ Here is a list of middleware that are included within the Fiber framework. | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Protect from CSRF exploits. | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware which encrypts cookie values. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Expose environment variables with providing an optional config. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware that lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware that serves via its HTTP server runtime exposed variants in the JSON format. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignore favicon from logs or serve from memory if a file path is provided. | diff --git a/.github/README_ru.md b/.github/README_ru.md index eaa171eeac..12cd17cf2b 100644 --- a/.github/README_ru.md +++ b/.github/README_ru.md @@ -578,6 +578,7 @@ func main() { | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Protect from CSRF exploits. | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware which encrypts cookie values. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Expose environment variables with providing an optional config. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware that lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware that serves via its HTTP server runtime exposed variants in the JSON format. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignore favicon from logs or serve from memory if a file path is provided. | diff --git a/.github/README_sa.md b/.github/README_sa.md index 6e90ca81ee..b3655d8d0a 100644 --- a/.github/README_sa.md +++ b/.github/README_sa.md @@ -642,6 +642,7 @@ Here is a list of middleware that are included within the Fiber framework. | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Protect from CSRF exploits. | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware which encrypts cookie values. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Expose environment variables with providing an optional config. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware that lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware that serves via its HTTP server runtime exposed variants in the JSON format. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignore favicon from logs or serve from memory if a file path is provided. | diff --git a/.github/README_tr.md b/.github/README_tr.md index 3866ff7c13..7f53a7f7d9 100644 --- a/.github/README_tr.md +++ b/.github/README_tr.md @@ -564,26 +564,27 @@ func main() { Fiber'a dahil edilen middlewareların bir listesi aşağıda verilmiştir. | Middleware | Açıklama | -| :------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| :------------------------------------------------------------------------------------- |:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [basicauth](https://github.com/gofiber/fiber/tree/master/middleware/basicauth) | Basic auth middleware'ı, bir HTTP Basic auth sağlar. Geçerli kimlik bilgileri için sonraki handlerı ve eksik veya geçersiz kimlik bilgileri için 401 döndürür. | -| [cache](https://github.com/gofiber/fiber/tree/master/middleware/cache) | Reponseları durdur ve önbelleğe al. | +| [cache](https://github.com/gofiber/fiber/tree/master/middleware/cache) | Reponseları durdur ve önbelleğe al. | | [compress](https://github.com/gofiber/fiber/tree/master/middleware/compress) | Fiber için sıkıştırma middleware, varsayılan olarak `deflate`, `gzip` ve `brotli`yi destekler. | | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Çeşitli seçeneklerle başlangıçlar arası kaynak paylaşımını \(CORS\) etkinleştirin. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | CSRF exploitlerinden korunun. | -| [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware'ı cookie değerlerini şifreler. | -| [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware'ı sayfa içeriği değişmediyse bant genişliğini daha verimli kullanmak için tam sayfa içeriğini tekrar göndermez. | -| [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware, HTTP serverinin bazı runtime değişkenlerini JSON formatında sunar. | +| [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware'ı cookie değerlerini şifreler. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Environment değişkenlerini belirtilen ayarlara göre dışarıya açar. | +| [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware'ı sayfa içeriği değişmediyse bant genişliğini daha verimli kullanmak için tam sayfa içeriğini tekrar göndermez. | +| [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware, HTTP serverinin bazı runtime değişkenlerini JSON formatında sunar. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Bir dosya yolu sağlanmışsa, loglardaki favicon'u yoksayar veya bellekten sunar. | -| [filesystem](https://github.com/gofiber/fiber/tree/master/middleware/filesystem) | Fiber için FileSystem middleware, Alireza Salary'e özel teşekkürler. | +| [filesystem](https://github.com/gofiber/fiber/tree/master/middleware/filesystem) | Fiber için FileSystem middleware, Alireza Salary'e özel teşekkürler. | | [limiter](https://github.com/gofiber/fiber/tree/master/middleware/limiter) | Fiber için hız sınırlayıcı middleware'i. Açık API'lere ve/veya parola sıfırlama gibi endpointlere yönelik tekrarlanan istekleri sınırlamak için kullanın. | | [logger](https://github.com/gofiber/fiber/tree/master/middleware/logger) | HTTP istek/yanıt logger'ı. | -| [monitor](https://github.com/gofiber/fiber/tree/master/middleware/monitor) | Monitor middleware'ı sunucu metriklerini rapor eder, express-status-monitor'den esinlenildi. | -| [pprof](https://github.com/gofiber/fiber/tree/master/middleware/pprof) | Matthew Lee'ye özel teşekkürler \(@mthli\). | -| [proxy](https://github.com/gofiber/fiber/tree/master/middleware/proxy) | Birden çok sunucuya proxy istekleri yapmanızı sağlar. | +| [monitor](https://github.com/gofiber/fiber/tree/master/middleware/monitor) | Monitor middleware'ı sunucu metriklerini rapor eder, express-status-monitor'den esinlenildi. | +| [pprof](https://github.com/gofiber/fiber/tree/master/middleware/pprof) | Matthew Lee'ye özel teşekkürler \(@mthli\). | +| [proxy](https://github.com/gofiber/fiber/tree/master/middleware/proxy) | Birden çok sunucuya proxy istekleri yapmanızı sağlar. | | [recover](https://github.com/gofiber/fiber/tree/master/middleware/recover) | Recover middleware'i, stack chain'ini herhangi bir yerindeki paniklerden kurtulur ve kontrolü merkezileştirilmiş [ErrorHandler'e](https://docs.gofiber.io/guide/error-handling) verir. | -| [requestid](https://github.com/gofiber/fiber/tree/master/middleware/requestid) | Her requeste id verir. | -| [session](https://github.com/gofiber/fiber/tree/master/middleware/session) | Session için middleware. NOTE: Bu middleware Fiber'in Storage yapısını kullanır. | -| [skip](https://github.com/gofiber/fiber/tree/master/middleware/skip) | Skip middleware'ı verilen koşul `true` olduğunda handler'ı atlar ve işlemez. | +| [requestid](https://github.com/gofiber/fiber/tree/master/middleware/requestid) | Her requeste id verir. | +| [session](https://github.com/gofiber/fiber/tree/master/middleware/session) | Session için middleware. NOTE: Bu middleware Fiber'in Storage yapısını kullanır. | +| [skip](https://github.com/gofiber/fiber/tree/master/middleware/skip) | Skip middleware'ı verilen koşul `true` olduğunda handler'ı atlar ve işlemez. | | [timeout](https://github.com/gofiber/fiber/tree/master/middleware/timeout) | Bir request için maksimum süre ekler ve aşılırsa ErrorHandler'a iletir. | ## 🧬 Harici Middlewarelar diff --git a/.github/README_zh-CN.md b/.github/README_zh-CN.md index 5369548a48..b78811e868 100644 --- a/.github/README_zh-CN.md +++ b/.github/README_zh-CN.md @@ -573,6 +573,7 @@ func main() { | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | 使用各种选项启用跨源资源共享\(CORS\). | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | 保护来自CSRF的漏洞. | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | 加密 cookie 值的加密中间件. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | 通过提供可选配置来公开环境变量。. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | 让缓存更加高效并且节省带宽,让web服务不再需要重新响应整个响应体如果响应内容未变更. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | 通过其HTTP服务器运行时间提供JSON格式的暴露变体. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | 如果提供了文件路径,则忽略日志中的图标或从内存中服务. | diff --git a/.github/README_zh-TW.md b/.github/README_zh-TW.md index 1d3907cb76..a7f2dfe8ea 100644 --- a/.github/README_zh-TW.md +++ b/.github/README_zh-TW.md @@ -573,6 +573,7 @@ func main() { | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | 使用各種選項啟用跨域資源共享 \(CORS\)。 | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | 防止 CSRF 漏洞利用。 | | [encryptcookie](https://github.com/gofiber/fiber/tree/master/middleware/encryptcookie) | Encrypt middleware which encrypts cookie values. | +| [envvar](https://github.com/gofiber/fiber/tree/master/middleware/envvar) | Expose environment variables with providing an optional config. | | [etag](https://github.com/gofiber/fiber/tree/master/middleware/etag) | ETag middleware that lets caches be more efficient and save bandwidth, as a web server does not need to resend a full response if the content has not changed. | | [expvar](https://github.com/gofiber/fiber/tree/master/middleware/expvar) | Expvar middleware that serves via its HTTP server runtime exposed variants in the JSON format. | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | 如果提供了文件路徑,則忽略日誌中的網站圖標或從內存中提供服務。 | From a34d30b25758972fc6e5eb6e7db66fabc309c113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emre=20Savc=C4=B1?= Date: Sun, 28 Aug 2022 17:15:24 +0300 Subject: [PATCH 06/11] change t.setenv to os.setenv as backward compability reason --- middleware/envvar/envvar_test.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/middleware/envvar/envvar_test.go b/middleware/envvar/envvar_test.go index 27fca18d30..5d0f209491 100644 --- a/middleware/envvar/envvar_test.go +++ b/middleware/envvar/envvar_test.go @@ -6,13 +6,17 @@ import ( "github.com/gofiber/fiber/v2/utils" "io" "net/http" + "os" "testing" ) func TestEnvVarStructWithExportVarsExcludeVars(t *testing.T) { - t.Setenv("testKey", "testEnvValue") - t.Setenv("anotherEnvKey", "anotherEnvVal") - t.Setenv("excludeKey", "excludeEnvValue") + os.Setenv("testKey", "testEnvValue") + os.Setenv("anotherEnvKey", "anotherEnvVal") + os.Setenv("excludeKey", "excludeEnvValue") + defer os.Unsetenv("testKey") + defer os.Unsetenv("anotherEnvKey") + defer os.Unsetenv("excludeKey") vars := newEnvVar(Config{ ExportVars: map[string]string{"testKey": "", "testDefaultKey": "testDefaultVal"}, @@ -25,7 +29,8 @@ func TestEnvVarStructWithExportVarsExcludeVars(t *testing.T) { } func TestEnvVarHandler(t *testing.T) { - t.Setenv("testKey", "testVal") + os.Setenv("testKey", "testVal") + defer os.Unsetenv("testKey") expectedEnvVarResponse, _ := json.Marshal( struct { @@ -71,7 +76,8 @@ func TestEnvVarHandlerNotMatched(t *testing.T) { } func TestEnvVarHandlerDefaultConfig(t *testing.T) { - t.Setenv("testEnvKey", "testEnvVal") + os.Setenv("testEnvKey", "testEnvVal") + defer os.Unsetenv("testEnvKey") app := fiber.New() app.Use(New()) From f3ef9c7c5d38c14d729715398dddc7cd243af43e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emre=20Savc=C4=B1?= Date: Sun, 28 Aug 2022 17:49:00 +0300 Subject: [PATCH 07/11] change io.readall to ioutil.readall --- middleware/envvar/envvar_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/middleware/envvar/envvar_test.go b/middleware/envvar/envvar_test.go index 5d0f209491..7bdf2915b5 100644 --- a/middleware/envvar/envvar_test.go +++ b/middleware/envvar/envvar_test.go @@ -4,7 +4,7 @@ import ( "encoding/json" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/utils" - "io" + "io/ioutil" "net/http" "os" "testing" @@ -48,7 +48,7 @@ func TestEnvVarHandler(t *testing.T) { resp, err := app.Test(req) utils.AssertEqual(t, nil, err) - respBody, err := io.ReadAll(resp.Body) + respBody, err := ioutil.ReadAll(resp.Body) utils.AssertEqual(t, nil, err) utils.AssertEqual(t, expectedEnvVarResponse, respBody) @@ -69,7 +69,7 @@ func TestEnvVarHandlerNotMatched(t *testing.T) { resp, err := app.Test(req) utils.AssertEqual(t, nil, err) - respBody, err := io.ReadAll(resp.Body) + respBody, err := ioutil.ReadAll(resp.Body) utils.AssertEqual(t, nil, err) utils.AssertEqual(t, []byte("OK"), respBody) @@ -86,7 +86,7 @@ func TestEnvVarHandlerDefaultConfig(t *testing.T) { resp, err := app.Test(req) utils.AssertEqual(t, nil, err) - respBody, err := io.ReadAll(resp.Body) + respBody, err := ioutil.ReadAll(resp.Body) utils.AssertEqual(t, nil, err) var envVars EnvVar From 1b88f54486392963a396e22b68491612e59c8e93 Mon Sep 17 00:00:00 2001 From: RW Date: Sun, 28 Aug 2022 18:54:00 +0200 Subject: [PATCH 08/11] Update envvar.go --- middleware/envvar/envvar.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/middleware/envvar/envvar.go b/middleware/envvar/envvar.go index 8d3e64a33c..c3759a19e6 100644 --- a/middleware/envvar/envvar.go +++ b/middleware/envvar/envvar.go @@ -21,11 +21,11 @@ type EnvVar struct { Vars map[string]string `json:"vars"` } -func (envVar EnvVar) set(key, val string) { +func (envVar *EnvVar) set(key, val string) { envVar.Vars[key] = val } -func (envVar EnvVar) get(key string) string { +func (envVar *EnvVar) get(key string) string { return envVar.Vars[key] } From 60306d5f90a7f39399c421c068df7d62e6597fa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emre=20Savc=C4=B1?= Date: Sun, 28 Aug 2022 20:30:06 +0300 Subject: [PATCH 09/11] remove get method that only used in test --- middleware/envvar/envvar.go | 4 ---- middleware/envvar/envvar_test.go | 10 +++++----- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/middleware/envvar/envvar.go b/middleware/envvar/envvar.go index 8d3e64a33c..06d9394fbe 100644 --- a/middleware/envvar/envvar.go +++ b/middleware/envvar/envvar.go @@ -25,10 +25,6 @@ func (envVar EnvVar) set(key, val string) { envVar.Vars[key] = val } -func (envVar EnvVar) get(key string) string { - return envVar.Vars[key] -} - func New(config ...Config) fiber.Handler { var cfg Config if len(config) > 0 { diff --git a/middleware/envvar/envvar_test.go b/middleware/envvar/envvar_test.go index 7bdf2915b5..38bbc87291 100644 --- a/middleware/envvar/envvar_test.go +++ b/middleware/envvar/envvar_test.go @@ -22,10 +22,10 @@ func TestEnvVarStructWithExportVarsExcludeVars(t *testing.T) { ExportVars: map[string]string{"testKey": "", "testDefaultKey": "testDefaultVal"}, ExcludeVars: map[string]string{"excludeKey": ""}}) - utils.AssertEqual(t, vars.get("testKey"), "testEnvValue") - utils.AssertEqual(t, vars.get("testDefaultKey"), "testDefaultVal") - utils.AssertEqual(t, vars.get("excludeKey"), "") - utils.AssertEqual(t, vars.get("anotherEnvKey"), "") + utils.AssertEqual(t, vars.Vars["testKey"], "testEnvValue") + utils.AssertEqual(t, vars.Vars["testDefaultKey"], "testDefaultVal") + utils.AssertEqual(t, vars.Vars["excludeKey"], "") + utils.AssertEqual(t, vars.Vars["anotherEnvKey"], "") } func TestEnvVarHandler(t *testing.T) { @@ -91,6 +91,6 @@ func TestEnvVarHandlerDefaultConfig(t *testing.T) { var envVars EnvVar utils.AssertEqual(t, nil, json.Unmarshal(respBody, &envVars)) - val := envVars.get("testEnvKey") + val := envVars.Vars["testEnvKey"] utils.AssertEqual(t, "testEnvVal", val) } From b364cc3f849a0507b7dbcbc21eb131093be91ba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emre=20Savc=C4=B1?= Date: Sun, 28 Aug 2022 22:23:18 +0300 Subject: [PATCH 10/11] remove unused method from envvar struct --- middleware/envvar/envvar.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/middleware/envvar/envvar.go b/middleware/envvar/envvar.go index c3759a19e6..9c96bc2c77 100644 --- a/middleware/envvar/envvar.go +++ b/middleware/envvar/envvar.go @@ -25,10 +25,6 @@ func (envVar *EnvVar) set(key, val string) { envVar.Vars[key] = val } -func (envVar *EnvVar) get(key string) string { - return envVar.Vars[key] -} - func New(config ...Config) fiber.Handler { var cfg Config if len(config) > 0 { From 8a28758c888149121e04b7faed0b13c6c6531c1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emre=20Savc=C4=B1?= Date: Mon, 29 Aug 2022 15:33:48 +0300 Subject: [PATCH 11/11] remove path variable from config, update readme, add new test case --- middleware/envvar/README.md | 13 +++++------- middleware/envvar/envvar.go | 35 +++++++++++++------------------- middleware/envvar/envvar_test.go | 18 +++++++++++----- 3 files changed, 32 insertions(+), 34 deletions(-) diff --git a/middleware/envvar/README.md b/middleware/envvar/README.md index 8031f83994..ce69522a2e 100644 --- a/middleware/envvar/README.md +++ b/middleware/envvar/README.md @@ -33,17 +33,18 @@ import ( Then create a Fiber app with `app := fiber.New()`. +**Note**: You need to provide a path to use envvar middleware. + ### Default Config ```go -app.Use(envvar.New()) +app.Use("/expose/envvars", envvar.New()) ``` ### Custom Config ```go -app.Use(envvar.New(envvar.Config{ - Path: "/expose/envvars", +app.Use("/expose/envvars", envvar.New(envvar.Config{ ExportVars: map[string]string{"testKey": "", "testDefaultKey": "testDefaultVal"}, ExcludeVars: map[string]string{"excludeKey": ""}} })) @@ -67,8 +68,6 @@ Http response contract: ```go // Config defines the config for middleware. type Config struct { - // Path specifies the path of handler that exposes environment variables - Path string // ExportVars specifies the environment variables that should export ExportVars map[string]string // ExcludeVars specifies the environment variables that should not export @@ -80,7 +79,5 @@ type Config struct { ## Default Config ```go -Config{ - Path: "/envvars", -} +Config{} ``` diff --git a/middleware/envvar/envvar.go b/middleware/envvar/envvar.go index 9c96bc2c77..373eac5035 100644 --- a/middleware/envvar/envvar.go +++ b/middleware/envvar/envvar.go @@ -9,8 +9,6 @@ import ( // Config defines the config for middleware. type Config struct { - // Path specifies the path of handler that exposes environment variables - Path string // ExportVars specifies the environment variables that should export ExportVars map[string]string // ExcludeVars specifies the environment variables that should not export @@ -25,35 +23,30 @@ func (envVar *EnvVar) set(key, val string) { envVar.Vars[key] = val } +var defaultConfig = Config{} + func New(config ...Config) fiber.Handler { - var cfg Config + var cfg = defaultConfig if len(config) > 0 { cfg = config[0] - } else { - cfg = Config{Path: "/envvars"} } return func(c *fiber.Ctx) error { - path := c.Path() - if len(path) < len(cfg.Path) || !strings.HasPrefix(path, cfg.Path) { - return c.Next() + if c.Method() != fiber.MethodGet { + return fiber.ErrMethodNotAllowed } - if path == cfg.Path { - envVar := newEnvVar(cfg) - varsByte, err := c.App().Config().JSONEncoder(envVar) - if err != nil { - c.Response().SetBodyRaw(utils.UnsafeBytes(err.Error())) - c.Response().SetStatusCode(fiber.StatusInternalServerError) - return nil - } - c.Response().SetBodyRaw(varsByte) - c.Response().SetStatusCode(fiber.StatusOK) - c.Response().Header.Set("Content-Type", "application/json; charset=utf-8") + envVar := newEnvVar(cfg) + varsByte, err := c.App().Config().JSONEncoder(envVar) + if err != nil { + c.Response().SetBodyRaw(utils.UnsafeBytes(err.Error())) + c.Response().SetStatusCode(fiber.StatusInternalServerError) return nil } - - return c.Next() + c.Response().SetBodyRaw(varsByte) + c.Response().SetStatusCode(fiber.StatusOK) + c.Response().Header.Set("Content-Type", "application/json; charset=utf-8") + return nil } } diff --git a/middleware/envvar/envvar_test.go b/middleware/envvar/envvar_test.go index 38bbc87291..edb74d5f59 100644 --- a/middleware/envvar/envvar_test.go +++ b/middleware/envvar/envvar_test.go @@ -40,8 +40,7 @@ func TestEnvVarHandler(t *testing.T) { }) app := fiber.New() - app.Use(New(Config{ - Path: "/envvars", + app.Use("/envvars", New(Config{ ExportVars: map[string]string{"testKey": ""}})) req, _ := http.NewRequest("GET", "http://localhost/envvars", nil) @@ -56,8 +55,7 @@ func TestEnvVarHandler(t *testing.T) { func TestEnvVarHandlerNotMatched(t *testing.T) { app := fiber.New() - app.Use(New(Config{ - Path: "/envvars", + app.Use("/envvars", New(Config{ ExportVars: map[string]string{"testKey": ""}})) app.Get("/another-path", func(ctx *fiber.Ctx) error { @@ -80,7 +78,7 @@ func TestEnvVarHandlerDefaultConfig(t *testing.T) { defer os.Unsetenv("testEnvKey") app := fiber.New() - app.Use(New()) + app.Use("/envvars", New()) req, _ := http.NewRequest("GET", "http://localhost/envvars", nil) resp, err := app.Test(req) @@ -94,3 +92,13 @@ func TestEnvVarHandlerDefaultConfig(t *testing.T) { val := envVars.Vars["testEnvKey"] utils.AssertEqual(t, "testEnvVal", val) } + +func TestEnvVarHandlerMethod(t *testing.T) { + app := fiber.New() + app.Use("/envvars", New()) + + req, _ := http.NewRequest("POST", "http://localhost/envvars", nil) + resp, err := app.Test(req) + utils.AssertEqual(t, nil, err) + utils.AssertEqual(t, fiber.StatusMethodNotAllowed, resp.StatusCode) +}