From 669187dd4d0f67898dd53d5de902cedc5632c558 Mon Sep 17 00:00:00 2001 From: httpjamesm <51917118+httpjamesm@users.noreply.github.com> Date: Mon, 21 Aug 2023 02:02:12 -0400 Subject: [PATCH] refactor: concurrently proxy img tags (#53) --- src/utils/images.go | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/utils/images.go b/src/utils/images.go index cea5adf..4e57df4 100644 --- a/src/utils/images.go +++ b/src/utils/images.go @@ -6,6 +6,7 @@ import ( "os" "regexp" "strings" + "sync" "time" "github.com/golang-jwt/jwt/v4" @@ -14,20 +15,28 @@ import ( var imgTagRegex = regexp.MustCompile(`]*\s+src\s*=\s*"(.*?)"[^>]*>`) func ReplaceImgTags(inHtml string) string { - // find all img tags imgTags := imgTagRegex.FindAllString(inHtml, -1) + var wg sync.WaitGroup + var mu sync.Mutex + for _, imgTag := range imgTags { - // parse the src="" attribute - srcRegex := regexp.MustCompile(`src\s*=\s*"(.*?)"`) - src := srcRegex.FindStringSubmatch(imgTag)[1] + wg.Add(1) + go func(imgTag string) { + defer wg.Done() + srcRegex := regexp.MustCompile(`src\s*=\s*"(.*?)"`) + src := srcRegex.FindStringSubmatch(imgTag)[1] - authToken, _ := generateImageProxyAuth(src) + authToken, _ := generateImageProxyAuth(src) - // replace the img tag with a proxied url - inHtml = strings.Replace(inHtml, imgTag, fmt.Sprintf(``, os.Getenv("APP_URL"), authToken), 1) + mu.Lock() + defer mu.Unlock() + inHtml = strings.Replace(inHtml, imgTag, fmt.Sprintf(``, os.Getenv("APP_URL"), authToken), 1) + }(imgTag) } + wg.Wait() + return inHtml }