From 04ca37fe14fa2b54a4c03fd1f103a9bef7aab8a9 Mon Sep 17 00:00:00 2001 From: Marcus Noble Date: Thu, 20 Jan 2022 11:26:38 +0000 Subject: [PATCH] Ensure query params are fully decoded LinkedIn linkes to send double-encoded query params --- main.go | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/main.go b/main.go index dee59b2..2a24e1c 100644 --- a/main.go +++ b/main.go @@ -42,15 +42,15 @@ func main() { app.Get("/opengraph", func(c *fiber.Ctx) error { vars := map[string]string{ - "siteTitle": c.Query("siteTitle", ""), - "title": c.Query("title", ""), - "tags": c.Query("tags", ""), - "image": c.Query("image", ""), - "twitter": c.Query("twitter", ""), - "github": c.Query("github", ""), - "website": c.Query("website", ""), - "bgColor": c.Query("bgColor", c.Query("bgColour", "#fff")), - "fgColor": c.Query("fgColor", c.Query("fgColour", "#2B414D")), + "siteTitle": ensureDecoded(c.Query("siteTitle", "")), + "title": ensureDecoded(c.Query("title", "")), + "tags": ensureDecoded(c.Query("tags", "")), + "image": ensureDecoded(c.Query("image", "")), + "twitter": ensureDecoded(c.Query("twitter", "")), + "github": ensureDecoded(c.Query("github", "")), + "website": ensureDecoded(c.Query("website", "")), + "bgColor": ensureDecoded(c.Query("bgColor", c.Query("bgColour", "#fff"))), + "fgColor": ensureDecoded(c.Query("fgColor", c.Query("fgColour", "#2B414D"))), } key := generateKey(vars) @@ -101,3 +101,12 @@ func generateImage(vars map[string]string) ([]byte, error) { return os.ReadFile(imageFile.Name()) } + +// Some sites (LinkedIn) encode the already encoded URL so we need to double-decode to be sure +func ensureDecoded(str string) string { + decoded, err := url.QueryUnescape(str) + if err != nil { + return str + } + return decoded +} \ No newline at end of file