mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-29 10:02:24 -05:00
[feature] Refactor tokens, allow multiple app redirect_uris (#3849)
* [feature] Refactor tokens, allow multiple app redirect_uris * move + tweak handlers a bit * return error for unset oauth2.ClientStore funcs * wrap UpdateToken with cache * panic handling * cheeky little time optimization * unlock on error
This commit is contained in:
parent
c80810eae8
commit
1b37944f8b
77 changed files with 963 additions and 594 deletions
2
internal/cache/cache.go
vendored
2
internal/cache/cache.go
vendored
|
|
@ -69,7 +69,6 @@ func (c *Caches) Init() {
|
|||
c.initBlock()
|
||||
c.initBlockIDs()
|
||||
c.initBoostOfIDs()
|
||||
c.initClient()
|
||||
c.initConversation()
|
||||
c.initConversationLastStatusIDs()
|
||||
c.initDomainAllow()
|
||||
|
|
@ -161,7 +160,6 @@ func (c *Caches) Sweep(threshold float64) {
|
|||
c.DB.Block.Trim(threshold)
|
||||
c.DB.BlockIDs.Trim(threshold)
|
||||
c.DB.BoostOfIDs.Trim(threshold)
|
||||
c.DB.Client.Trim(threshold)
|
||||
c.DB.Conversation.Trim(threshold)
|
||||
c.DB.ConversationLastStatusIDs.Trim(threshold)
|
||||
c.DB.Emoji.Trim(threshold)
|
||||
|
|
|
|||
29
internal/cache/db.go
vendored
29
internal/cache/db.go
vendored
|
|
@ -52,9 +52,6 @@ type DBCaches struct {
|
|||
// BoostOfIDs provides access to the boost of IDs list database cache.
|
||||
BoostOfIDs SliceCache[string]
|
||||
|
||||
// Client provides access to the gtsmodel Client database cache.
|
||||
Client StructCache[*gtsmodel.Client]
|
||||
|
||||
// Conversation provides access to the gtsmodel Conversation database cache.
|
||||
Conversation StructCache[*gtsmodel.Conversation]
|
||||
|
||||
|
|
@ -489,32 +486,6 @@ func (c *Caches) initBoostOfIDs() {
|
|||
c.DB.BoostOfIDs.Init(0, cap)
|
||||
}
|
||||
|
||||
func (c *Caches) initClient() {
|
||||
// Calculate maximum cache size.
|
||||
cap := calculateResultCacheMax(
|
||||
sizeofClient(), // model in-mem size.
|
||||
config.GetCacheClientMemRatio(),
|
||||
)
|
||||
|
||||
log.Infof(nil, "cache size = %d", cap)
|
||||
|
||||
copyF := func(c1 *gtsmodel.Client) *gtsmodel.Client {
|
||||
c2 := new(gtsmodel.Client)
|
||||
*c2 = *c1
|
||||
return c2
|
||||
}
|
||||
|
||||
c.DB.Client.Init(structr.CacheConfig[*gtsmodel.Client]{
|
||||
Indices: []structr.IndexConfig{
|
||||
{Fields: "ID"},
|
||||
},
|
||||
MaxSize: cap,
|
||||
IgnoreErr: ignoreErrors,
|
||||
Copy: copyF,
|
||||
Invalidate: c.OnInvalidateClient,
|
||||
})
|
||||
}
|
||||
|
||||
func (c *Caches) initConversation() {
|
||||
cap := calculateResultCacheMax(
|
||||
sizeofConversation(), // model in-mem size.
|
||||
|
|
|
|||
8
internal/cache/invalidate.go
vendored
8
internal/cache/invalidate.go
vendored
|
|
@ -62,8 +62,7 @@ func (c *Caches) OnInvalidateAccount(account *gtsmodel.Account) {
|
|||
}
|
||||
|
||||
func (c *Caches) OnInvalidateApplication(app *gtsmodel.Application) {
|
||||
// Invalidate cached client of this application.
|
||||
c.DB.Client.Invalidate("ID", app.ClientID)
|
||||
// TODO: invalidate tokens?
|
||||
}
|
||||
|
||||
func (c *Caches) OnInvalidateBlock(block *gtsmodel.Block) {
|
||||
|
|
@ -79,11 +78,6 @@ func (c *Caches) OnInvalidateBlock(block *gtsmodel.Block) {
|
|||
c.DB.BlockIDs.Invalidate(block.AccountID)
|
||||
}
|
||||
|
||||
func (c *Caches) OnInvalidateClient(client *gtsmodel.Client) {
|
||||
// Invalidate any tokens under this client.
|
||||
c.DB.Token.Invalidate("ClientID", client.ID)
|
||||
}
|
||||
|
||||
func (c *Caches) OnInvalidateConversation(conversation *gtsmodel.Conversation) {
|
||||
// Invalidate owning account's conversation list.
|
||||
c.DB.ConversationLastStatusIDs.Invalidate(conversation.AccountID)
|
||||
|
|
|
|||
31
internal/cache/size.go
vendored
31
internal/cache/size.go
vendored
|
|
@ -302,15 +302,14 @@ func sizeofAccountStats() uintptr {
|
|||
|
||||
func sizeofApplication() uintptr {
|
||||
return uintptr(size.Of(>smodel.Application{
|
||||
ID: exampleID,
|
||||
CreatedAt: exampleTime,
|
||||
UpdatedAt: exampleTime,
|
||||
Name: exampleUsername,
|
||||
Website: exampleURI,
|
||||
RedirectURI: exampleURI,
|
||||
ClientID: exampleID,
|
||||
ClientSecret: exampleID,
|
||||
Scopes: exampleTextSmall,
|
||||
ID: exampleID,
|
||||
Name: exampleUsername,
|
||||
Website: exampleURI,
|
||||
RedirectURIs: []string{exampleURI},
|
||||
ClientID: exampleID,
|
||||
ClientSecret: exampleID,
|
||||
Scopes: exampleTextSmall,
|
||||
ManagedByUserID: exampleID,
|
||||
}))
|
||||
}
|
||||
|
||||
|
|
@ -325,17 +324,6 @@ func sizeofBlock() uintptr {
|
|||
}))
|
||||
}
|
||||
|
||||
func sizeofClient() uintptr {
|
||||
return uintptr(size.Of(>smodel.Client{
|
||||
ID: exampleID,
|
||||
CreatedAt: exampleTime,
|
||||
UpdatedAt: exampleTime,
|
||||
Secret: exampleID,
|
||||
Domain: exampleURI,
|
||||
UserID: exampleID,
|
||||
}))
|
||||
}
|
||||
|
||||
func sizeofConversation() uintptr {
|
||||
return uintptr(size.Of(>smodel.Conversation{
|
||||
ID: exampleID,
|
||||
|
|
@ -752,8 +740,7 @@ func sizeofThreadMute() uintptr {
|
|||
func sizeofToken() uintptr {
|
||||
return uintptr(size.Of(>smodel.Token{
|
||||
ID: exampleID,
|
||||
CreatedAt: exampleTime,
|
||||
UpdatedAt: exampleTime,
|
||||
LastUsed: exampleTime,
|
||||
ClientID: exampleID,
|
||||
UserID: exampleID,
|
||||
RedirectURI: exampleURI,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue