Continued e-mail support

This commit is contained in:
Philipp Heckel 2021-12-24 15:01:29 +01:00
parent 6b46eb46e2
commit f553cdb282
10 changed files with 132 additions and 10 deletions

View file

@ -17,6 +17,7 @@ const (
// visitor represents an API user, and its associated rate.Limiter used for rate limiting
type visitor struct {
config *Config
ip string
requests *rate.Limiter
emails *rate.Limiter
subscriptions *util.Limiter
@ -24,9 +25,10 @@ type visitor struct {
mu sync.Mutex
}
func newVisitor(conf *Config) *visitor {
func newVisitor(conf *Config, ip string) *visitor {
return &visitor{
config: conf,
ip: ip,
requests: rate.NewLimiter(rate.Every(conf.VisitorRequestLimitReplenish), conf.VisitorRequestLimitBurst),
emails: rate.NewLimiter(rate.Every(conf.VisitorEmailLimitReplenish), conf.VisitorEmailLimitBurst),
subscriptions: util.NewLimiter(int64(conf.VisitorSubscriptionLimit)),
@ -34,6 +36,10 @@ func newVisitor(conf *Config) *visitor {
}
}
func (v *visitor) IP() string {
return v.ip
}
func (v *visitor) RequestAllowed() error {
if !v.requests.Allow() {
return errHTTPTooManyRequests