Files
projectdiscovery-subfinder/pkg/subscraping/types.go
T
Mikel Olasagasti Uranga 6867e076f1 refactor: move v2 module code to root directory for cleaner structure
Keeps module path as github.com/projectdiscovery/subfinder/v2 to
preserve import compatibility.

Signed-off-by: Mikel Olasagasti Uranga <mikel@olasagasti.info>
2025-07-10 15:27:42 +02:00

96 lines
2.1 KiB
Go

package subscraping
import (
"context"
"net/http"
"time"
"github.com/projectdiscovery/ratelimit"
mapsutil "github.com/projectdiscovery/utils/maps"
)
type CtxArg string
const (
CtxSourceArg CtxArg = "source"
)
type CustomRateLimit struct {
Custom mapsutil.SyncLockMap[string, uint]
}
// BasicAuth request's Authorization header
type BasicAuth struct {
Username string
Password string
}
// Statistics contains statistics about the scraping process
type Statistics struct {
TimeTaken time.Duration
Errors int
Results int
Skipped bool
}
// Source is an interface inherited by each passive source
type Source interface {
// Run takes a domain as argument and a session object
// which contains the extractor for subdomains, http client
// and other stuff.
Run(context.Context, string, *Session) <-chan Result
// Name returns the name of the source. It is preferred to use lower case names.
Name() string
// IsDefault returns true if the current source should be
// used as part of the default execution.
IsDefault() bool
// HasRecursiveSupport returns true if the current source
// accepts subdomains (e.g. subdomain.domain.tld),
// not just root domains.
HasRecursiveSupport() bool
// NeedsKey returns true if the source requires an API key
NeedsKey() bool
AddApiKeys([]string)
// Statistics returns the scrapping statistics for the source
Statistics() Statistics
}
// SubdomainExtractor is an interface that defines the contract for subdomain extraction.
type SubdomainExtractor interface {
Extract(text string) []string
}
// Session is the option passed to the source, an option is created
// uniquely for each source.
type Session struct {
//SubdomainExtractor
Extractor SubdomainExtractor
// Client is the current http client
Client *http.Client
// Rate limit instance
MultiRateLimiter *ratelimit.MultiLimiter
}
// Result is a result structure returned by a source
type Result struct {
Type ResultType
Source string
Value string
Error error
}
// ResultType is the type of result returned by the source
type ResultType int
// Types of results returned by the source
const (
Subdomain ResultType = iota
Error
)