mirror of
https://github.com/TecharoHQ/anubis.git
synced 2025-08-03 17:59:24 -04:00
feat(ogtags): when encountering opengraph URLs, add them to an allow cache
Signed-off-by: Xe Iaso <me@xeiaso.net>
This commit is contained in:
parent
b81c577106
commit
d67f728a9b
@ -5,7 +5,9 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetOGTags is the main function that retrieves Open Graph tags for a URL
|
// GetOGTags is the main function that retrieves Open Graph tags for a URL
|
||||||
@ -45,6 +47,18 @@ func (c *OGTagCache) GetOGTags(ctx context.Context, url *url.URL, originalHost s
|
|||||||
// Store in cache
|
// Store in cache
|
||||||
c.cache.Set(ctx, cacheKey, ogTags, c.ogTimeToLive)
|
c.cache.Set(ctx, cacheKey, ogTags, c.ogTimeToLive)
|
||||||
|
|
||||||
|
for k, v := range ogTags {
|
||||||
|
switch {
|
||||||
|
case strings.HasSuffix(k, "image"), strings.HasSuffix(k, "audio"), strings.HasSuffix(k, "secure_url"), strings.HasSuffix(k, "video"):
|
||||||
|
v, _ = strings.CutPrefix(v, "http://")
|
||||||
|
v, _ = strings.CutPrefix(v, "https://")
|
||||||
|
slog.Debug("setting ogtags allow for", "url", k)
|
||||||
|
if err := c.cache.Underlying.Set(ctx, "ogtags:allow:"+v, []byte(k), time.Hour); err != nil {
|
||||||
|
slog.Debug("can't set ogtag allow cache", "err", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return ogTags, nil
|
return ogTags, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package ogtags
|
package ogtags
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"net/url"
|
"net/url"
|
||||||
@ -9,6 +10,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/TecharoHQ/anubis/lib/policy/config"
|
"github.com/TecharoHQ/anubis/lib/policy/config"
|
||||||
|
"github.com/TecharoHQ/anubis/lib/store"
|
||||||
"github.com/TecharoHQ/anubis/lib/store/memory"
|
"github.com/TecharoHQ/anubis/lib/store/memory"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -166,8 +168,13 @@ func TestGetOGTags(t *testing.T) {
|
|||||||
if !ok || initialValue != cachedValue {
|
if !ok || initialValue != cachedValue {
|
||||||
t.Errorf("Cache does not line up: expected %s: %s, got: %s", key, initialValue, cachedValue)
|
t.Errorf("Cache does not line up: expected %s: %s, got: %s", key, initialValue, cachedValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t.Run("ensure image is cached as allow", func(t *testing.T) {
|
||||||
|
if _, err := cache.cache.Underlying.Get(t.Context(), "ogtags:allow:example.com/image.jpg"); errors.Is(err, store.ErrNotFound) {
|
||||||
|
t.Fatal("ogtags allow caching for example.com/image.jpg did not work")
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestGetOGTagsWithHostConsideration tests the behavior of the cache with and without host consideration and for multiple hosts in a theoretical setup.
|
// TestGetOGTagsWithHostConsideration tests the behavior of the cache with and without host consideration and for multiple hosts in a theoretical setup.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user