gosora/common/thaw.go
Azareal 352a262866 Only cache public attachments in the browser and CDNs.
The browser might overrule it anyway, if it's really obvious that it should be cached.
This is mainly so Cloudflare, etc. don't serve sensitive documents to guests.
2018-11-20 14:00:32 +10:00

67 lines
1.0 KiB
Go

package common
import (
"sync/atomic"
)
var TopicListThaw ThawInt
type ThawInt interface {
Thawed() bool
Thaw()
Tick() error
}
type SingleServerThaw struct {
DefaultThaw
}
func NewSingleServerThaw() *SingleServerThaw {
thaw := &SingleServerThaw{}
if Config.ServerCount == 1 {
AddScheduledSecondTask(thaw.Tick)
}
return thaw
}
func (thaw *SingleServerThaw) Thawed() bool {
if Config.ServerCount == 1 {
return thaw.DefaultThaw.Thawed()
}
return true
}
func (thaw *SingleServerThaw) Thaw() {
if Config.ServerCount == 1 {
thaw.DefaultThaw.Thaw()
}
}
type DefaultThaw struct {
thawed int64
}
func NewDefaultThaw() *DefaultThaw {
thaw := &DefaultThaw{}
AddScheduledSecondTask(thaw.Tick)
return thaw
}
// Decrement the thawed counter once a second until it goes cold
func (thaw *DefaultThaw) Tick() error {
prior := thaw.thawed
if prior > 0 {
atomic.StoreInt64(&thaw.thawed, prior-1)
}
return nil
}
func (thaw *DefaultThaw) Thawed() bool {
return thaw.thawed > 0
}
func (thaw *DefaultThaw) Thaw() {
atomic.StoreInt64(&thaw.thawed, 5)
}