mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-11-17 14:32:14 +08:00
52 lines
1.5 KiB
Go
52 lines
1.5 KiB
Go
package cloudflare
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/goccy/go-json"
|
|
)
|
|
|
|
// PhishingScan represent information about a phishing scan.
|
|
type PhishingScan struct {
|
|
URL string `json:"url"`
|
|
Phishing bool `json:"phishing"`
|
|
Verified bool `json:"verified"`
|
|
Score float64 `json:"score"`
|
|
Classifier string `json:"classifier"`
|
|
}
|
|
|
|
// PhishingScanParameters represent parameters for a phishing scan request.
|
|
type PhishingScanParameters struct {
|
|
AccountID string `url:"-"`
|
|
URL string `url:"url,omitempty"`
|
|
Skip bool `url:"skip,omitempty"`
|
|
}
|
|
|
|
// PhishingScanResponse represent an API response for a phishing scan.
|
|
type PhishingScanResponse struct {
|
|
Response
|
|
Result PhishingScan `json:"result,omitempty"`
|
|
}
|
|
|
|
// IntelligencePhishingScan scans a URL for suspected phishing
|
|
//
|
|
// API Reference: https://api.cloudflare.com/#phishing-url-scanner-scan-suspicious-url
|
|
func (api *API) IntelligencePhishingScan(ctx context.Context, params PhishingScanParameters) (PhishingScan, error) {
|
|
if params.AccountID == "" {
|
|
return PhishingScan{}, ErrMissingAccountID
|
|
}
|
|
|
|
uri := buildURI(fmt.Sprintf("/accounts/%s/intel-phishing/predict", params.AccountID), params)
|
|
res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
|
|
if err != nil {
|
|
return PhishingScan{}, err
|
|
}
|
|
|
|
var phishingScanResponse PhishingScanResponse
|
|
if err := json.Unmarshal(res, &phishingScanResponse); err != nil {
|
|
return PhishingScan{}, err
|
|
}
|
|
return phishingScanResponse.Result, nil
|
|
}
|