Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions .github/workflows/dep-auto-merge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,24 @@ on:
workflow_dispatch:

permissions:
contents: write
pull-requests: write
issues: write
repository-projects: write

jobs:
automerge:
runs-on: ubuntu-latest
if: github.actor == 'dependabot[bot]'
steps:
- uses: actions/checkout@v3
with:
token: ${{ secrets.DEPENDABOT_PAT }}
- uses: actions/checkout@v4

- uses: ahmadnassri/action-dependabot-auto-merge@v2
with:
github-token: ${{ secrets.DEPENDABOT_PAT }}
target: all
- name: Enable auto-merge
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Approve PR
run: gh pr review --approve "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5 changes: 3 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ module github.com/projectdiscovery/ratelimit
go 1.24.0

require (
github.com/projectdiscovery/utils v0.4.22
github.com/stretchr/testify v1.10.0
github.com/projectdiscovery/utils v0.9.0
github.com/stretchr/testify v1.11.1
golang.org/x/time v0.5.0
)

require (
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
14 changes: 10 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/projectdiscovery/utils v0.4.22 h1:OO3FU2uX967sQxu5JtpdBZNzOevvKHAhWqkoTGl+C0A=
github.com/projectdiscovery/utils v0.4.22/go.mod h1:3l84gpCwL9KG1/ZmslOBABCrk84CcpGWJZfR8wZysR4=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/projectdiscovery/utils v0.9.0 h1:eu9vdbP0VYXI9nGSLfnOpUqBeW9/B/iSli7U8gPKZw8=
github.com/projectdiscovery/utils v0.9.0/go.mod h1:zcVu1QTlMi5763qCol/L3ROnbd/UPSBP8fI5PmcnF6s=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 h1:yqrTHse8TCMW1M1ZCP+VAR/l0kKxwaAIqN/il7x4voA=
golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
Expand Down
18 changes: 9 additions & 9 deletions keyratelimit.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ import (
"sync"
"time"

errorutil "github.com/projectdiscovery/utils/errors"
"github.com/projectdiscovery/utils/errkit"
)

var (
ErrKeyAlreadyExists = errorutil.NewWithTag("MultiLimiter", "key already exists")
ErrKeyMissing = errorutil.NewWithTag("MultiLimiter", "key does not exist")
ErrKeyAlreadyExists = errkit.New("multilimiter: key already exists")
ErrKeyMissing = errkit.New("multilimiter: key does not exist")
)

// Options of MultiLimiter
Expand All @@ -25,13 +25,13 @@ type Options struct {
func (o *Options) Validate() error {
if !o.IsUnlimited {
if o.Key == "" {
return errorutil.NewWithTag("MultiLimiter", "empty keys not allowed")
return errkit.New("multilimiter: empty keys not allowed")
}
if o.MaxCount == 0 {
return errorutil.NewWithTag("MultiLimiter", "maxcount cannot be zero")
return errkit.New("multilimiter: maxcount cannot be zero")
}
if o.Duration == 0 {
return errorutil.NewWithTag("MultiLimiter", "time duration not set")
return errkit.New("multilimiter: time duration not set")
}
}
return nil
Expand All @@ -57,7 +57,7 @@ func (m *MultiLimiter) Add(opts *Options) error {
// ok is true if key already exists
_, ok := m.limiters.LoadOrStore(opts.Key, rlimiter)
if ok {
return ErrKeyAlreadyExists.Msgf("key: %v", opts.Key)
return errkit.Wrapf(ErrKeyAlreadyExists, "key: %v", opts.Key)
}
return nil
}
Expand Down Expand Up @@ -122,12 +122,12 @@ func (m *MultiLimiter) Stop(keys ...string) {
func (m *MultiLimiter) get(key string) (*Limiter, error) {
val, _ := m.limiters.Load(key)
if val == nil {
return nil, ErrKeyMissing.Msgf("key: %v", key)
return nil, errkit.Wrapf(ErrKeyMissing, "key: %v", key)
}
if limiter, ok := val.(*Limiter); ok {
return limiter, nil
}
return nil, errorutil.NewWithTag("MultiLimiter", "type assertion of rateLimiter failed in multiLimiter")
return nil, errkit.New("multilimiter: type assertion of rateLimiter failed")
}

// NewMultiLimiter : Limits
Expand Down
2 changes: 1 addition & 1 deletion keyratelimit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ func TestMultiLimiter(t *testing.T) {
})
require.Nil(t, err)
wg := &sync.WaitGroup{}
expectedTime := (time.Duration(6) * time.Second).Round(time.Millisecond)
expectedTime := time.Duration(6)*time.Second - 50*time.Millisecond

wg.Add(1)
go func() {
Expand Down
2 changes: 1 addition & 1 deletion ratelimit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ func TestRateLimit(t *testing.T) {
limiter.Take()
}
timetaken := time.Since(startTime)
expected := time.Duration(6) * time.Second
expected := time.Duration(6)*time.Second - 50*time.Millisecond
require.GreaterOrEqualf(t, timetaken.Nanoseconds(), expected.Nanoseconds(), "more tokens sent than expected with ratelimit")
})

Expand Down
Loading