github.com/gofiber/fiber/v2@v2.47.0/middleware/encryptcookie/encryptcookie_test.go (about) 1 package encryptcookie 2 3 import ( 4 "encoding/base64" 5 "net/http/httptest" 6 "testing" 7 8 "github.com/gofiber/fiber/v2" 9 "github.com/gofiber/fiber/v2/utils" 10 11 "github.com/valyala/fasthttp" 12 ) 13 14 var testKey = GenerateKey() 15 16 func Test_Middleware_Encrypt_Cookie(t *testing.T) { 17 t.Parallel() 18 app := fiber.New() 19 20 app.Use(New(Config{ 21 Key: testKey, 22 })) 23 24 app.Get("/", func(c *fiber.Ctx) error { 25 return c.SendString("value=" + c.Cookies("test")) 26 }) 27 app.Post("/", func(c *fiber.Ctx) error { 28 c.Cookie(&fiber.Cookie{ 29 Name: "test", 30 Value: "SomeThing", 31 }) 32 return nil 33 }) 34 35 h := app.Handler() 36 37 // Test empty cookie 38 ctx := &fasthttp.RequestCtx{} 39 ctx.Request.Header.SetMethod(fiber.MethodGet) 40 h(ctx) 41 utils.AssertEqual(t, 200, ctx.Response.StatusCode()) 42 utils.AssertEqual(t, "value=", string(ctx.Response.Body())) 43 44 // Test invalid cookie 45 ctx = &fasthttp.RequestCtx{} 46 ctx.Request.Header.SetMethod(fiber.MethodGet) 47 ctx.Request.Header.SetCookie("test", "Invalid") 48 h(ctx) 49 utils.AssertEqual(t, 200, ctx.Response.StatusCode()) 50 utils.AssertEqual(t, "value=", string(ctx.Response.Body())) 51 ctx.Request.Header.SetCookie("test", "ixQURE2XOyZUs0WAOh2ehjWcP7oZb07JvnhWOsmeNUhPsj4+RyI=") 52 h(ctx) 53 utils.AssertEqual(t, 200, ctx.Response.StatusCode()) 54 utils.AssertEqual(t, "value=", string(ctx.Response.Body())) 55 56 // Test valid cookie 57 ctx = &fasthttp.RequestCtx{} 58 ctx.Request.Header.SetMethod(fiber.MethodPost) 59 h(ctx) 60 utils.AssertEqual(t, 200, ctx.Response.StatusCode()) 61 62 encryptedCookie := fasthttp.Cookie{} 63 encryptedCookie.SetKey("test") 64 utils.AssertEqual(t, true, ctx.Response.Header.Cookie(&encryptedCookie), "Get cookie value") 65 decryptedCookieValue, err := DecryptCookie(string(encryptedCookie.Value()), testKey) 66 utils.AssertEqual(t, nil, err) 67 utils.AssertEqual(t, "SomeThing", decryptedCookieValue) 68 69 ctx = &fasthttp.RequestCtx{} 70 ctx.Request.Header.SetMethod(fiber.MethodGet) 71 ctx.Request.Header.SetCookie("test", string(encryptedCookie.Value())) 72 h(ctx) 73 utils.AssertEqual(t, 200, ctx.Response.StatusCode()) 74 utils.AssertEqual(t, "value=SomeThing", string(ctx.Response.Body())) 75 } 76 77 func Test_Encrypt_Cookie_Next(t *testing.T) { 78 t.Parallel() 79 app := fiber.New() 80 81 app.Use(New(Config{ 82 Key: testKey, 83 Next: func(_ *fiber.Ctx) bool { 84 return true 85 }, 86 })) 87 88 app.Get("/", func(c *fiber.Ctx) error { 89 c.Cookie(&fiber.Cookie{ 90 Name: "test", 91 Value: "SomeThing", 92 }) 93 return nil 94 }) 95 96 resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/", nil)) 97 utils.AssertEqual(t, nil, err) 98 utils.AssertEqual(t, "SomeThing", resp.Cookies()[0].Value) 99 } 100 101 func Test_Encrypt_Cookie_Except(t *testing.T) { 102 t.Parallel() 103 app := fiber.New() 104 105 app.Use(New(Config{ 106 Key: testKey, 107 Except: []string{ 108 "test1", 109 }, 110 })) 111 112 app.Get("/", func(c *fiber.Ctx) error { 113 c.Cookie(&fiber.Cookie{ 114 Name: "test1", 115 Value: "SomeThing", 116 }) 117 c.Cookie(&fiber.Cookie{ 118 Name: "test2", 119 Value: "SomeThing", 120 }) 121 122 return nil 123 }) 124 125 h := app.Handler() 126 127 ctx := &fasthttp.RequestCtx{} 128 ctx.Request.Header.SetMethod(fiber.MethodGet) 129 h(ctx) 130 utils.AssertEqual(t, 200, ctx.Response.StatusCode()) 131 132 rawCookie := fasthttp.Cookie{} 133 rawCookie.SetKey("test1") 134 utils.AssertEqual(t, true, ctx.Response.Header.Cookie(&rawCookie), "Get cookie value") 135 utils.AssertEqual(t, "SomeThing", string(rawCookie.Value())) 136 137 encryptedCookie := fasthttp.Cookie{} 138 encryptedCookie.SetKey("test2") 139 utils.AssertEqual(t, true, ctx.Response.Header.Cookie(&encryptedCookie), "Get cookie value") 140 decryptedCookieValue, err := DecryptCookie(string(encryptedCookie.Value()), testKey) 141 utils.AssertEqual(t, nil, err) 142 utils.AssertEqual(t, "SomeThing", decryptedCookieValue) 143 } 144 145 func Test_Encrypt_Cookie_Custom_Encryptor(t *testing.T) { 146 t.Parallel() 147 app := fiber.New() 148 149 app.Use(New(Config{ 150 Key: testKey, 151 Encryptor: func(decryptedString, _ string) (string, error) { 152 return base64.StdEncoding.EncodeToString([]byte(decryptedString)), nil 153 }, 154 Decryptor: func(encryptedString, _ string) (string, error) { 155 decodedBytes, err := base64.StdEncoding.DecodeString(encryptedString) 156 return string(decodedBytes), err 157 }, 158 })) 159 160 app.Get("/", func(c *fiber.Ctx) error { 161 return c.SendString("value=" + c.Cookies("test")) 162 }) 163 app.Post("/", func(c *fiber.Ctx) error { 164 c.Cookie(&fiber.Cookie{ 165 Name: "test", 166 Value: "SomeThing", 167 }) 168 169 return nil 170 }) 171 172 h := app.Handler() 173 174 ctx := &fasthttp.RequestCtx{} 175 ctx.Request.Header.SetMethod(fiber.MethodPost) 176 h(ctx) 177 utils.AssertEqual(t, 200, ctx.Response.StatusCode()) 178 179 encryptedCookie := fasthttp.Cookie{} 180 encryptedCookie.SetKey("test") 181 utils.AssertEqual(t, true, ctx.Response.Header.Cookie(&encryptedCookie), "Get cookie value") 182 decodedBytes, err := base64.StdEncoding.DecodeString(string(encryptedCookie.Value())) 183 utils.AssertEqual(t, nil, err) 184 utils.AssertEqual(t, "SomeThing", string(decodedBytes)) 185 186 ctx = &fasthttp.RequestCtx{} 187 ctx.Request.Header.SetMethod(fiber.MethodGet) 188 ctx.Request.Header.SetCookie("test", string(encryptedCookie.Value())) 189 h(ctx) 190 utils.AssertEqual(t, 200, ctx.Response.StatusCode()) 191 utils.AssertEqual(t, "value=SomeThing", string(ctx.Response.Body())) 192 }