diff options
| author | William Hergès <william@herges.fr> | 2025-10-05 15:04:12 +0200 |
|---|---|---|
| committer | William Hergès <william@herges.fr> | 2025-10-05 15:04:12 +0200 |
| commit | 5d6198f168dd1a8598048718d149d1171df09c1a (patch) | |
| tree | 5ed6891cf0599cfd6826c57948125a9927c30a73 /backend/data.go | |
| parent | f7a41e17693dd5301413f46efecdfe4f5b94cb6f (diff) | |
perf(security): cache assets checksum
Diffstat (limited to 'backend/data.go')
| -rw-r--r-- | backend/data.go | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/backend/data.go b/backend/data.go index a1b2dba..d98c8b0 100644 --- a/backend/data.go +++ b/backend/data.go @@ -134,34 +134,41 @@ type assetData struct { Checksum string } +var assets = map[string]*assetData{} + func getAsset(ctx context.Context, path string) *assetData { - var asset assetData + asset, ok := assets[path] + if ok && !ctx.Value(debugKey).(bool) { + return asset + } + asset = &assetData{} var b []byte - var err error if regexIsHttp.MatchString(path) { asset.Src = path resp, err := http.Get(path) if err != nil { slog.Warn("get remote asset", "error", err) - return &asset + return asset } defer resp.Body.Close() b, err = io.ReadAll(resp.Body) if err != nil { slog.Warn("read remote asset", "error", err) - return &asset + return asset } } else { asset.Src = fmt.Sprintf("/assets/%s", path) - aFS := ctx.Value(assetsFS).(fs.FS) + aFS := ctx.Value(assetsFSKey).(fs.FS) + var err error b, err = fs.ReadFile(aFS, path) if err != nil { slog.Warn("read asset", "error", err) - return &asset + return asset } } sum := sha256.Sum256(b) checksum := base64.StdEncoding.EncodeToString(sum[:]) asset.Checksum = fmt.Sprintf("sha256-%s", checksum) - return &asset + assets[path] = asset + return asset } |
