mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[feature] domain block wildcarding (#1178)
* for domain block lookups, lookup along subdomain parts Signed-off-by: kim <grufwub@gmail.com> * only lookup up to a max of 5 domain parts to prevent DOS, limit inserted domains to max of 5 subdomains Signed-off-by: kim <grufwub@gmail.com> * add test for domain block wildcarding Signed-off-by: kim <grufwub@gmail.com> * check cached status first, increase cached domain time Signed-off-by: kim <grufwub@gmail.com> * fix domain wildcard part building logic Signed-off-by: kim <grufwub@gmail.com> * create separate domain.BlockCache{} type to hold all domain blocks in memory Signed-off-by: kim <grufwub@gmail.com> * remove unused variable Signed-off-by: kim <grufwub@gmail.com> * add docs and test to domain block cache, check for domain == host in domain block getter funcs Signed-off-by: kim <grufwub@gmail.com> * add license text Signed-off-by: kim <grufwub@gmail.com> * check order in which we check primary cache Signed-off-by: kim <grufwub@gmail.com> * add better documentation of how domain block checking is performed Signed-off-by: kim <grufwub@gmail.com> * change Signed-off-by: kim <grufwub@gmail.com> Signed-off-by: kim <grufwub@gmail.com>
This commit is contained in:
21
internal/cache/gts.go
vendored
21
internal/cache/gts.go
vendored
@@ -20,6 +20,7 @@ package cache
|
||||
|
||||
import (
|
||||
"codeberg.org/gruf/go-cache/v3/result"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/cache/domain"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/config"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
|
||||
)
|
||||
@@ -41,8 +42,8 @@ type GTSCaches interface {
|
||||
// Block provides access to the gtsmodel Block (account) database cache.
|
||||
Block() *result.Cache[*gtsmodel.Block]
|
||||
|
||||
// DomainBlock provides access to the gtsmodel DomainBlock database cache.
|
||||
DomainBlock() *result.Cache[*gtsmodel.DomainBlock]
|
||||
// DomainBlock provides access to the domain block database cache.
|
||||
DomainBlock() *domain.BlockCache
|
||||
|
||||
// Emoji provides access to the gtsmodel Emoji database cache.
|
||||
Emoji() *result.Cache[*gtsmodel.Emoji]
|
||||
@@ -74,7 +75,7 @@ func NewGTS() GTSCaches {
|
||||
type gtsCaches struct {
|
||||
account *result.Cache[*gtsmodel.Account]
|
||||
block *result.Cache[*gtsmodel.Block]
|
||||
domainBlock *result.Cache[*gtsmodel.DomainBlock]
|
||||
domainBlock *domain.BlockCache
|
||||
emoji *result.Cache[*gtsmodel.Emoji]
|
||||
emojiCategory *result.Cache[*gtsmodel.EmojiCategory]
|
||||
mention *result.Cache[*gtsmodel.Mention]
|
||||
@@ -151,7 +152,7 @@ func (c *gtsCaches) Block() *result.Cache[*gtsmodel.Block] {
|
||||
return c.block
|
||||
}
|
||||
|
||||
func (c *gtsCaches) DomainBlock() *result.Cache[*gtsmodel.DomainBlock] {
|
||||
func (c *gtsCaches) DomainBlock() *domain.BlockCache {
|
||||
return c.domainBlock
|
||||
}
|
||||
|
||||
@@ -212,14 +213,10 @@ func (c *gtsCaches) initBlock() {
|
||||
}
|
||||
|
||||
func (c *gtsCaches) initDomainBlock() {
|
||||
c.domainBlock = result.NewSized([]result.Lookup{
|
||||
{Name: "Domain"},
|
||||
}, func(d1 *gtsmodel.DomainBlock) *gtsmodel.DomainBlock {
|
||||
d2 := new(gtsmodel.DomainBlock)
|
||||
*d2 = *d1
|
||||
return d2
|
||||
}, config.GetCacheGTSDomainBlockMaxSize())
|
||||
c.domainBlock.SetTTL(config.GetCacheGTSDomainBlockTTL(), true)
|
||||
c.domainBlock = domain.New(
|
||||
config.GetCacheGTSDomainBlockMaxSize(),
|
||||
config.GetCacheGTSDomainBlockTTL(),
|
||||
)
|
||||
}
|
||||
|
||||
func (c *gtsCaches) initEmoji() {
|
||||
|
Reference in New Issue
Block a user