76 lines
1.9 KiB
Go
76 lines
1.9 KiB
Go
package placeholder
|
|
|
|
import (
|
|
"net/http"
|
|
"net/url"
|
|
|
|
"github.com/chromedp/cdproto/network"
|
|
"github.com/chromedp/chromedp"
|
|
"github.com/wallarm/gotestwaf/internal/scanner/clients/chrome/helpers"
|
|
|
|
"github.com/wallarm/gotestwaf/internal/scanner/types"
|
|
)
|
|
|
|
const UAHeader = "User-Agent"
|
|
|
|
var _ Placeholder = (*UserAgent)(nil)
|
|
|
|
var DefaultUserAgent = &UserAgent{name: "UserAgent"}
|
|
|
|
type UserAgent struct {
|
|
name string
|
|
}
|
|
|
|
func (p *UserAgent) NewPlaceholderConfig(map[any]any) (PlaceholderConfig, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (p *UserAgent) GetName() string {
|
|
return p.name
|
|
}
|
|
|
|
func (p *UserAgent) CreateRequest(requestURL, payload string, config PlaceholderConfig, httpClientType types.HTTPClientType) (types.Request, error) {
|
|
reqURL, err := url.Parse(requestURL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
switch httpClientType {
|
|
case types.GoHTTPClient:
|
|
return p.prepareGoHTTPClientRequest(reqURL.String(), payload, config)
|
|
case types.ChromeHTTPClient:
|
|
return p.prepareChromeHTTPClientRequest(reqURL.String(), payload, config)
|
|
default:
|
|
return nil, types.NewUnknownHTTPClientError(httpClientType)
|
|
}
|
|
}
|
|
|
|
func (p *UserAgent) prepareGoHTTPClientRequest(requestURL, payload string, config PlaceholderConfig) (*types.GoHTTPRequest, error) {
|
|
req, err := http.NewRequest(http.MethodGet, requestURL, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
req.Header.Set(UAHeader, payload)
|
|
|
|
return &types.GoHTTPRequest{Req: req}, nil
|
|
}
|
|
|
|
func (p *UserAgent) prepareChromeHTTPClientRequest(requestURL, payload string, config PlaceholderConfig) (*types.ChromeDPTasks, error) {
|
|
reqOptions := &helpers.RequestOptions{
|
|
Method: http.MethodGet,
|
|
}
|
|
|
|
task, responseMeta, err := helpers.GetFetchRequest(requestURL, reqOptions)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
tasks := &types.ChromeDPTasks{
|
|
Tasks: chromedp.Tasks{task},
|
|
UserAgentHeader: network.Headers{UAHeader: payload, "Test": "test"},
|
|
ResponseMeta: responseMeta,
|
|
}
|
|
|
|
return tasks, nil
|
|
}
|