Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
projectdiscovery
GitHub Repository: projectdiscovery/nuclei
Path: blob/dev/pkg/authprovider/multi.go
2070 views
1
package authprovider
2
3
import (
4
"net/url"
5
6
"github.com/projectdiscovery/nuclei/v3/pkg/authprovider/authx"
7
urlutil "github.com/projectdiscovery/utils/url"
8
)
9
10
// MultiAuthProvider is a convenience wrapper for multiple auth providers
11
// it returns the first matching auth strategy for a given domain
12
// if there are multiple auth strategies for a given domain, it returns the first one
13
type MultiAuthProvider struct {
14
Providers []AuthProvider
15
}
16
17
// NewMultiAuthProvider creates a new multi auth provider
18
func NewMultiAuthProvider(providers ...AuthProvider) AuthProvider {
19
return &MultiAuthProvider{Providers: providers}
20
}
21
22
func (m *MultiAuthProvider) LookupAddr(host string) []authx.AuthStrategy {
23
for _, provider := range m.Providers {
24
strategy := provider.LookupAddr(host)
25
if len(strategy) > 0 {
26
return strategy
27
}
28
}
29
return nil
30
}
31
32
func (m *MultiAuthProvider) LookupURL(u *url.URL) []authx.AuthStrategy {
33
for _, provider := range m.Providers {
34
strategy := provider.LookupURL(u)
35
if strategy != nil {
36
return strategy
37
}
38
}
39
return nil
40
}
41
42
func (m *MultiAuthProvider) LookupURLX(u *urlutil.URL) []authx.AuthStrategy {
43
for _, provider := range m.Providers {
44
strategy := provider.LookupURLX(u)
45
if strategy != nil {
46
return strategy
47
}
48
}
49
return nil
50
}
51
52
func (m *MultiAuthProvider) GetTemplatePaths() []string {
53
var res []string
54
for _, provider := range m.Providers {
55
res = append(res, provider.GetTemplatePaths()...)
56
}
57
return res
58
}
59
60
func (m *MultiAuthProvider) PreFetchSecrets() error {
61
for _, provider := range m.Providers {
62
if err := provider.PreFetchSecrets(); err != nil {
63
return err
64
}
65
}
66
return nil
67
}
68
69