code.vegaprotocol.io/vega@v0.79.0/datanode/ratelimit/config.go (about)

     1  // Copyright (C) 2023 Gobalsky Labs Limited
     2  //
     3  // This program is free software: you can redistribute it and/or modify
     4  // it under the terms of the GNU Affero General Public License as
     5  // published by the Free Software Foundation, either version 3 of the
     6  // License, or (at your option) any later version.
     7  //
     8  // This program is distributed in the hope that it will be useful,
     9  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    10  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    11  // GNU Affero General Public License for more details.
    12  //
    13  // You should have received a copy of the GNU Affero General Public License
    14  // along with this program.  If not, see <http://www.gnu.org/licenses/>.
    15  
    16  package ratelimit
    17  
    18  import (
    19  	"time"
    20  
    21  	"code.vegaprotocol.io/vega/datanode/config/encoding"
    22  )
    23  
    24  type Config struct {
    25  	Enabled        bool              `description:"Enable rate limit of API requests per IP address. Based on a 'token bucket' algorithm"                                              long:"enabled"`
    26  	TrustedProxies []string          `description:"specify a trusted proxy for forwarded requests"                                                                                     long:"trusted-proxy"`
    27  	Rate           float64           `description:"Refill rate of token bucket; maximum average request rate"                                                                          long:"rate"`
    28  	Burst          int               `description:"Size of token bucket; maximum number of requests in short time window"                                                              long:"burst"`
    29  	TTL            encoding.Duration `description:"Time after which inactive token buckets are reset"                                                                                  long:"ttl"`
    30  	BanFor         encoding.Duration `description:"If IP continues to make requests after passing rate limit threshold, ban for this duration. Setting to 0 seconds disables banning." long:"banfor"`
    31  }
    32  
    33  func NewDefaultConfig() Config {
    34  	return Config{
    35  		Enabled:        true,
    36  		TrustedProxies: []string{"127.0.0.1"},
    37  		Rate:           20,
    38  		Burst:          100,
    39  		TTL:            encoding.Duration{Duration: time.Hour},
    40  		BanFor:         encoding.Duration{Duration: 10 * time.Minute},
    41  	}
    42  }