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
}