mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-29 13:22:25 -05: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:
parent
8703933df4
commit
69dd5fed2c
5 changed files with 350 additions and 39 deletions
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() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue