Documentation
¶
Index ¶
- Variables
- func BuildScanReport(result *url_scanner.ScanGetResponse, enrichment Enrichment, ...) map[string]any
- func RegistrableDomain(host string) (string, bool)
- type AgentReadinessFinding
- type Assets
- type Branding
- type CompanyProfile
- type Compliance
- type ComplianceLink
- type CompliancePage
- type Config
- func (c *Config) GatherEnrichment(ctx context.Context, domain string, timeout time.Duration) (Enrichment, EnrichmentErrors)
- func (c *Config) GetCompanyData(ctx context.Context, url string) (*CompanyProfile, error)
- func (c *Config) GetComplianceData(ctx context.Context, domain string) (*CompliancePage, error)
- type DNSRecord
- type DNSVendor
- type DNSVendorInfo
- type Enrichment
- type EnrichmentErrors
- type Favicon
- type Findings
- type Geolocation
- type IPAddress
- type JSONSchema
- type JSONSchemaProperty
- type Meta
- type Platform
- type PromptType
- type Report
- type ReportConfig
- type ResponseFormat
- type Result
- type ScanReport
- type ScanReportInput
- type SocialLinks
- type SubdomainDNSInfo
- type System
- type SystemEntry
- type Technology
- type TrustCenterPage
- type TrustDocument
- type Vendor
Constants ¶
This section is empty.
Variables ¶
var DomainScanReportSchema = jsonx.SchemaFrom[Report]()
DomainScanReportSchema is the reflected JSON schema for DomainScanReport, the shape of a domain scan completion Notification's data
var ( // ErrInvalidDomain is returned when its not able to determine the apex domain ErrInvalidDomain = errors.New("could not determine domain") )
Functions ¶
func BuildScanReport ¶
func BuildScanReport(result *url_scanner.ScanGetResponse, enrichment Enrichment, nonVendorCategories, deniedVendorNames []string) map[string]any
BuildScanReport combines a Cloudflare URL Scanner result with the Enrichment gathered by GatherEnrichment into a single report unified vendors/technologies, assets, findings, meta, platform, systems, and compliance sections
func RegistrableDomain ¶ added in v1.30.0
RegistrableDomain returns the registrable domain (eTLD+1) for host, e.g. "app.hubspot.com" -> "hubspot.com", so a subdomain can be matched against the vendor that owns its root domain
Types ¶
type AgentReadinessFinding ¶ added in v1.30.0
type AgentReadinessFinding struct {
// Level is the scan's agent-readiness score
Level int64 `json:"level"`
// LevelName is the human-readable name for Level (e.g. "Bot-Aware")
LevelName string `json:"level_name"`
// Checklist is a GitHub-flavored Markdown task list of the failing checks
Checklist string `json:"checklist"`
// Reference links to Cloudflare's writeup of what the assessment measures
Reference string `json:"reference"`
// Domain is the domain this finding was raised against, set only once merged across domains
Domain string `json:"domain,omitempty"`
}
AgentReadinessFinding is one domain's agent-readiness assessment finding. Domain is only set once the finding has been merged across every domain in a submission
type Assets ¶ added in v1.30.0
type Assets struct {
// DNSRecords are the DNS records resolved during the scan, plus any subdomains discovered by
// the domainscan enrichment (type "internal")
DNSRecords []DNSRecord `json:"dns_records,omitempty"`
// IPAddresses are the IP addresses resolved during the scan
IPAddresses []IPAddress `json:"ip_addresses,omitempty"`
}
Assets is the assets section of a scan report
type Branding ¶ added in v1.30.0
type Branding struct {
// Favicon is the scanned site's favicon
Favicon Favicon `json:"favicon"`
}
Branding is visual branding data captured from the scan, usable for org avatars, trust center logos, or similar presentational purposes
type CompanyProfile ¶
type CompanyProfile struct {
Name string `json:"name,omitempty"`
Description string `json:"description,omitempty"`
Industry string `json:"industry,omitempty"`
Systems []System `json:"systems,omitempty"`
Location string `json:"location,omitempty"`
EmployeeRange string `json:"employee_range,omitempty"`
FoundedYear string `json:"founded_year,omitempty"`
EstimatedRevenue string `json:"estimated_revenue,omitempty"`
SocialLinks SocialLinks `json:"social_links,omitempty"`
Customers []string `json:"customers,omitempty"`
Technologies []string `json:"technologies,omitempty"`
// ProvidedServices are the services or product categories the company itself provides
// (e.g. "compliance automation", "payment processing", "CRM"), not third-party tools it uses
ProvidedServices []string `json:"provided_services,omitempty"`
// StatusPageURL is the company's public status/uptime page, if found
StatusPageURL string `json:"status_page_url,omitempty"`
// SubdomainLinks are other subdomains of the same company's domain linked
// from the page (e.g. console.<domain>, app.<domain>, docs.<domain>)
SubdomainLinks []string `json:"subdomain_links,omitempty"`
// SSOSupported indicates the company's product advertises SSO support
SSOSupported bool `json:"sso_supported,omitempty"`
// MFASupported indicates the company's product advertises MFA support
MFASupported bool `json:"mfa_supported,omitempty"`
// SocialLoginSupported indicates the product advertises signing in via a third-party
// social/consumer identity provider (e.g. "Sign in with Google", "Continue with GitHub")
SocialLoginSupported bool `json:"social_login_supported,omitempty"`
// CredentialsSupported indicates the product advertises traditional username/email and password authentication
CredentialsSupported bool `json:"credentials_supported,omitempty"`
// PasskeySupported indicates the product advertises passwordless authentication via passkeys, WebAuthn, or biometrics
PasskeySupported bool `json:"passkey_supported,omitempty"`
}
CompanyProfile is the company information extracted from a website by the browser rendering AI
type Compliance ¶ added in v1.30.0
type Compliance struct {
// Frameworks lists compliance frameworks or certifications mentioned (e.g., SOC 2, ISO 27001, GDPR, HIPAA)
Frameworks []string `json:"frameworks,omitempty"`
// IsSOC2 indicates the company claims SOC 2 (Type I or Type II) certification or compliance
IsSOC2 bool `json:"is_soc2,omitempty"`
// Controls lists individual security or compliance controls or practices mentioned
Controls []string `json:"controls,omitempty"`
// TrustCenterHostedBy is the platform serving the company's trust center, if one was found
TrustCenterHostedBy string `json:"trust_center_hosted_by,omitempty"`
// Documents lists compliance documents found on a trust center
Documents []TrustDocument `json:"documents,omitempty"`
}
Compliance is the company's compliance posture gathered by the domainscan enrichment
type ComplianceLink ¶
type ComplianceLink struct {
// URL is the link target
URL string `json:"url,omitempty"`
// Type categorizes the linked document (e.g., privacy_policy, terms_of_service, trust_center, dpa, soc2_report, security, subprocessors, gdpr, cookie_policy, or other)
Type string `json:"type,omitempty"`
}
ComplianceLink is a single compliance-related link found on a page, categorized by type
type CompliancePage ¶
type CompliancePage struct {
// URL is the page URL that was analyzed
URL string `json:"url,omitempty"`
// PageType categorizes the compliance document (e.g., privacy_policy, terms_of_service, trust_center, dpa, soc2_report, security, subprocessors, gdpr, cookie_policy)
PageType string `json:"page_type,omitempty"`
// Title is the page title
Title string `json:"title,omitempty"`
// Summary is a brief description of the page content
Summary string `json:"summary,omitempty"`
// Frameworks lists compliance frameworks or certifications mentioned (e.g., SOC 2, ISO 27001, GDPR, HIPAA)
Frameworks []string `json:"frameworks,omitempty"`
// SOC2Certified indicates whether the page claims SOC 2 (Type I or Type II) certification or compliance
SOC2Certified bool `json:"soc2_certified,omitempty"`
// LastUpdated is the last updated or effective date mentioned on the page
LastUpdated string `json:"last_updated,omitempty"`
// DownloadLinks contains URLs for downloadable reports or documents found on the page
DownloadLinks []string `json:"download_links,omitempty"`
// Subprocessors lists third-party vendors or sub-processors mentioned on the page
Subprocessors []string `json:"subprocessors,omitempty"`
// Controls lists individual security or compliance controls/practices mentioned, such as
// those shown on a trust center page (e.g., MFA enforced, data encrypted at rest and in
// transit, background checks performed, vulnerability scanning, penetration testing, incident response plan)
Controls []string `json:"controls,omitempty"`
// TrustCenterHostedBy is the platform serving the company's trust center, if
// one was found (e.g., Vanta, Drata, SafeBase, Whistic, Conveyor, TrustArc,
// or "self-hosted") — itself a vendor/technology signal for the company
TrustCenterHostedBy string `json:"trust_center_hosted_by,omitempty"`
// Documents lists compliance documents found on a trust center, each
// flagged as public (directly accessible) or gated (requires a request/NDA)
Documents []TrustDocument `json:"documents,omitempty"`
// ComplianceLinks lists URLs to other compliance documents found on the page, each categorized by type
ComplianceLinks []ComplianceLink `json:"compliance_links,omitempty"`
}
CompliancePage holds structured compliance information extracted from a single page
type Config ¶
type Config struct {
// APIToken use to authenticate into with the cloudflare API
APIToken string
// AccountID the APIToken is associated with
AccountID string
// CacheTTL is the cache TTL, in seconds, Cloudflare applies to Browser Rendering requests.
// Zero disables caching for the request, forcing a fresh render instead of a cached one
CacheTTL int
}
Config holds the Cloudflare credentials used for browser rendering and browser-derived enrichment lookups
func (*Config) GatherEnrichment ¶
func (c *Config) GatherEnrichment(ctx context.Context, domain string, timeout time.Duration) (Enrichment, EnrichmentErrors)
GatherEnrichment runs the company profile, compliance, and DNS vendor lookups for domain concurrently, bounded by timeout. Each lookup is best-effort
func (*Config) GetCompanyData ¶
GetCompanyData builds a company profile from url's homepage, merged with whichever of companyProfileSubpaths resolve on the same host
func (*Config) GetComplianceData ¶
GetComplianceData fetches compliance information from the given domain and, if it can derive one, from a trust.<domain> subdomain as well
type DNSRecord ¶ added in v1.30.0
type DNSRecord struct {
// Domain is the DNS record's hostname
Domain string `json:"domain"`
// Type is the DNS record type (e.g. "A", "NS")
Type string `json:"type"`
// Vendor is the vendor this hostname was attributed to, if known
Vendor string `json:"vendor,omitempty"`
}
DNSRecord is one DNS record entry in a scan report's assets section
type DNSVendor ¶
DNSVendor is a single vendor identified from a DNS record. URL is only populated when the signal pointed at an actual hostname (MX, SPF include, or CNAME target); DKIM selector and TXT verification-tag signals carry a name only, since the selector/tag itself isn't a domain
type DNSVendorInfo ¶
type DNSVendorInfo struct {
// SPFRecord is the raw SPF TXT record found at the domain's apex, if any
SPFRecord string `json:"spf_record,omitempty"`
// DMARCRecord is the raw DMARC TXT record found at _dmarc.<domain>, if any
DMARCRecord string `json:"dmarc_record,omitempty"`
// DMARCPolicy is the enforcement policy from the DMARC record's p= tag (none, quarantine, or reject)
DMARCPolicy string `json:"dmarc_policy,omitempty"`
// MXHosts lists the mail exchanger hostnames for the domain's apex, in preference order
MXHosts []string `json:"mx_hosts,omitempty"`
// NSHosts lists the authoritative nameserver hostnames for the domain's apex, revealing
// the DNS hosting vendor (e.g. Cloudflare, Route 53, NS1)
NSHosts []string `json:"ns_hosts,omitempty"`
// TXTRecords lists every TXT record found at the domain's apex
TXTRecords []string `json:"txt_records,omitempty"`
// DKIMSelectors lists DKIM selector labels (see commonDKIMSelectors) found on the domain's apex
DKIMSelectors []string `json:"dkim_selectors,omitempty"`
// Subdomains holds MX, TXT, CNAME, and DKIM selector records found on conventional
// mail/vendor subdomains (see commonSubdomains), probed up to two levels deep
Subdomains []SubdomainDNSInfo `json:"subdomains,omitempty"`
// Vendors lists vendors identified from the MX, SPF, TXT, CNAME, DKIM selector, and
// NS records found at the apex and on Subdomains
Vendors []DNSVendor `json:"vendors,omitempty"`
}
DNSVendorInfo holds DNS-derived signals about a domain: mail routing/authentication at the apex, records on conventional subdomains (see commonSubdomains), and vendors those point to
func GetDNSVendorInfo ¶
func GetDNSVendorInfo(ctx context.Context, rawURL string) (*DNSVendorInfo, error)
GetDNSVendorInfo resolves MX/SPF/DMARC at the apex, probes commonSubdomains for MX/TXT/CNAME/DKIM, and derives vendor names from whatever's found rather than a maintained lookup table
type Enrichment ¶
type Enrichment struct {
// Company is the base company profile
Company *CompanyProfile `json:"company,omitempty"`
// Compliance is compliance specific data such as soc2 attestation, subprocessors, etc
Compliance *CompliancePage `json:"compliance,omitempty"`
// DNS includes DNS probed data
DNS *DNSVendorInfo `json:"dns,omitempty"`
}
Enrichment holds the best-effort pkg/domainscan results for a single domain
type EnrichmentErrors ¶
EnrichmentErrors holds the per-lookup errors from GatherEnrichment, each nil on success
type Favicon ¶ added in v1.30.0
type Favicon struct {
// URL is the favicon's URL
URL string `json:"url,omitempty"`
// Hash is the favicon's content hash
Hash string `json:"hash,omitempty"`
}
Favicon is the scanned site's favicon
type Findings ¶ added in v1.30.0
type Findings struct {
// SecurityViolations are the scan's overall verdict categories
SecurityViolations []string `json:"security_violations,omitempty"`
// Risks are the scan's overall verdict tags
Risks []string `json:"risks,omitempty"`
// IsMalicious reports whether the scan's overall verdict flagged the site as malicious
IsMalicious bool `json:"is_malicious,omitempty"`
// MissingComplianceLinks is a GitHub-flavored Markdown task list of expected compliance
// document types not found on the site
MissingComplianceLinks string `json:"missing_compliance_links,omitempty"`
// AgentReadiness is the scan's agent-readiness assessment findings
AgentReadiness []AgentReadinessFinding `json:"agent_readiness,omitempty"`
}
Findings is the findings section of a scan report
type Geolocation ¶ added in v1.30.0
type Geolocation struct {
// City is the resolved city name
City string `json:"city,omitempty"`
// Country is the resolved country code
Country string `json:"country,omitempty"`
// CountryName is the resolved country's full name
CountryName string `json:"country_name,omitempty"`
// Region is the resolved region or state
Region string `json:"region,omitempty"`
// Latitude is the resolved latitude
Latitude float64 `json:"latitude,omitempty"`
// Longitude is the resolved longitude
Longitude float64 `json:"longitude,omitempty"`
}
Geolocation is the scanned site's resolved geographic location
type IPAddress ¶ added in v1.30.0
type IPAddress struct {
// Address is the resolved IP address
Address string `json:"address"`
// ASN is the autonomous system number announcing the address, if known
ASN string `json:"asn,omitempty"`
// Org is the organization associated with the ASN, if known
Org string `json:"org,omitempty"`
}
IPAddress is one resolved IP entry in a scan report's assets section
type JSONSchema ¶
type JSONSchema struct {
Type string `json:"type"`
Properties map[string]JSONSchemaProperty `json:"properties"`
}
JSONSchema is the JSON schema for structured extraction
type JSONSchemaProperty ¶
type JSONSchemaProperty struct {
Type string `json:"type"`
Description string `json:"description,omitempty"`
Items *JSONSchemaProperty `json:"items,omitempty"`
Properties map[string]JSONSchemaProperty `json:"properties,omitempty"`
}
JSONSchemaProperty describes a single property in a JSON schema
type Meta ¶ added in v1.30.0
type Meta struct {
// Rank is the site's Cloudflare Radar rank, if known
Rank int `json:"rank,omitempty"`
// URLCategories are the scanned URL's detected categories
URLCategories []string `json:"url_categories,omitempty"`
// DomainCategories are the scanned domain's detected categories
DomainCategories []string `json:"domain_categories,omitempty"`
// Geolocation is the scanned site's resolved geographic location
Geolocation *Geolocation `json:"geolocation,omitempty"`
}
Meta is scan-level metadata: radar rank, categories, and geolocation
type Platform ¶ added in v1.30.0
type Platform struct {
// Name is the company's name
Name string `json:"name"`
// Description is the company's description
Description string `json:"description"`
// Industry is the company's industry
Industry string `json:"industry"`
// Location is the company's headquarters location
Location string `json:"location"`
// EmployeeRange is the company's estimated employee count range
EmployeeRange string `json:"employee_range"`
// FoundedYear is the year the company was founded
FoundedYear string `json:"founded_year"`
// EstimatedRevenue is the company's estimated revenue
EstimatedRevenue string `json:"estimated_revenue"`
// SSOSupported indicates the company's product advertises SSO support
SSOSupported bool `json:"sso_supported"`
// MFASupported indicates the company's product advertises MFA support
MFASupported bool `json:"mfa_supported"`
// SocialLinks holds the company's social media and community profile URLs
SocialLinks SocialLinks `json:"social_links"`
// StatusPageURL is the company's public status/uptime page, if found
StatusPageURL string `json:"status_page_url,omitempty"`
// Customers are customer names or logos found on the site
Customers []string `json:"customers,omitempty"`
// ProvidedServices are the services or product categories the company itself provides
ProvidedServices []string `json:"provided_services,omitempty"`
// AuthMethods are the authentication methods the company's product advertises support for
AuthMethods []string `json:"auth_methods,omitempty"`
}
Platform is the scanned company's profile, using field names that mirror Openlane's Platform object
type PromptType ¶
type PromptType string
type Report ¶ added in v1.30.0
type Report struct {
// Scans is one entry per domain in the originating submission, carrying its own identity and outcome
Scans []Result `json:"scans"`
// Vendors is the union of vendors detected across every completed domain, deduped by name
Vendors []Vendor `json:"vendors,omitempty"`
// Technologies is the union of technologies detected across every completed domain, deduped by name
Technologies []Technology `json:"technologies,omitempty"`
// Assets is the union of DNS records, IP addresses, and internal domains across every completed domain
Assets *Assets `json:"assets,omitempty"`
// Branding is the first non-empty branding section found across completed domains
Branding *Branding `json:"branding,omitempty"`
// Findings is the union of findings across every completed domain
Findings Findings `json:"findings,omitempty"`
// Meta is the first non-empty meta section found across completed domains
Meta *Meta `json:"meta,omitempty"`
// Platform is the first non-empty platform section found across completed domains
Platform *Platform `json:"platform,omitempty"`
// Systems is the union of systems detected across every completed domain, deduped by name
Systems []SystemEntry `json:"systems,omitempty"`
// Compliance is the first non-empty compliance section found across completed domains
Compliance *Compliance `json:"compliance,omitempty"`
}
Report is the JSON-schema-described payload attached to a domain scan completion Notification. Scans holds one entry per domain in the originating submission (a single entry for a one-off scan, one entry per domain for an org-settings batch) every other section is the union of that data across every successfully completed domain
func MergeReports ¶ added in v1.30.0
func MergeReports(results []Result, reports []ScanReportInput) Report
MergeReports combines one BuildScanReport output per domain (already vendor-enriched, as stored on each domain's own Scan.Metadata) into a single report
type ReportConfig ¶
type ReportConfig struct {
// NonVendorCategories lists wappalyzer categories treated as technologies
// instead of vendors when building an onboarding domain scan report
NonVendorCategories []string `` /* 145-byte string literal not displayed */
// DeniedVendorNames lists vendor names to always exclude from an onboarding domain scan report's vendor list
DeniedVendorNames []string `` /* 245-byte string literal not displayed */
// ScanTTL is the cache TTL, in seconds, for Browser Rendering requests issued during domain scan enrichment
ScanTTL int `json:"scanttl" koanf:"scanttl" default:"86400"`
}
ReportConfig configures how BuildScanReport classifies vendors versus technologies and which vendor names it always excludes
type ResponseFormat ¶
type ResponseFormat struct {
Type string `json:"type"`
Schema JSONSchema `json:"json_schema"`
}
ResponseFormat specifies JSON schema extraction
type Result ¶ added in v1.30.0
type Result struct {
// Domain is the scanned domain
Domain string `json:"domain"`
// InternalScanID is the Scan record id this result belongs to
InternalScanID string `json:"internal_scan_id"`
// ExternalScanID is the Cloudflare URL Scanner task id, present when the scan completed
ExternalScanID string `json:"external_scan_id,omitempty"`
// URL is the scanned URL, present when the scan completed
URL string `json:"url,omitempty"`
// Status is "completed" or "failed"
Status string `json:"status"`
}
Result is one domain's outcome within a DomainScanReport
type ScanReport ¶ added in v1.30.0
type ScanReport struct {
// ExternalScanID is the Cloudflare URL Scanner task id
ExternalScanID string `json:"external_scan_id,omitempty"`
// URL is the scanned URL
URL string `json:"url,omitempty"`
// Vendors are the vendors detected during the scan
Vendors []Vendor `json:"vendors,omitempty"`
// Technologies are the technologies detected during the scan
Technologies []Technology `json:"technologies,omitempty"`
// Assets are the DNS records, IP addresses, and internal domains resolved during the scan
Assets *Assets `json:"assets,omitempty"`
// Branding is visual branding data captured from the scan
Branding *Branding `json:"branding,omitempty"`
// Findings are the scan's security verdict, agent-readiness assessment, and compliance gaps
Findings Findings `json:"findings"`
// Meta is scan-level metadata (radar rank, categories, geolocation)
Meta *Meta `json:"meta,omitempty"`
// Platform is the scanned company's profile
Platform *Platform `json:"platform,omitempty"`
// Systems are the company's systems discovered by the domainscan enrichment
Systems []SystemEntry `json:"systems,omitempty"`
// Compliance is the company's compliance posture gathered by the domainscan enrichment
Compliance *Compliance `json:"compliance,omitempty"`
}
ScanReport is BuildScanReport's typed output for a single domain
type ScanReportInput ¶ added in v1.30.0
type ScanReportInput struct {
// Domain is the domain that was scanned
Domain string
// Report is that domain's BuildScanReport output
Report ScanReport
}
ScanReportInput pairs one domain with its typed scan report, for MergeReports. Domain is carried alongside the report (rather than embedded in it) since it identifies which scan produced the report, not something the report describes about itself
type SocialLinks ¶
type SocialLinks struct {
LinkedIn string `json:"linkedin,omitempty"`
Twitter string `json:"twitter,omitempty"`
GitHub string `json:"github,omitempty"`
Discord string `json:"discord,omitempty"`
Instagram string `json:"instagram,omitempty"`
YouTube string `json:"youtube,omitempty"`
Facebook string `json:"facebook,omitempty"`
}
SocialLinks holds a company's social media and community profile URLs
type SubdomainDNSInfo ¶
type SubdomainDNSInfo struct {
// Host is the fully probed hostname, e.g. "mail.example.com"
Host string `json:"host,omitempty"`
// MXHosts lists the mail exchanger hostnames found for this subdomain, if any
MXHosts []string `json:"mx_hosts,omitempty"`
// TXTRecords lists the TXT records found for this subdomain, if any
TXTRecords []string `json:"txt_records,omitempty"`
// CNAME is the canonical name this subdomain resolves to, if it's an
// alias to another domain (e.g. a hosted checkout, status page, or
// support portal pointed at a vendor's own domain)
CNAME string `json:"cname,omitempty"`
// DKIMSelectors lists DKIM selector labels (see commonDKIMSelectors)
// found configured on this subdomain, e.g. "resend" for
// "resend._domainkey.mail.example.com"
DKIMSelectors []string `json:"dkim_selectors,omitempty"`
}
SubdomainDNSInfo holds the DNS records found for a single conventional subdomain probed alongside the apex
type System ¶
type System struct {
Name string `json:"name,omitempty"`
// Summary is a brief, 1-2 sentence description of the system
Summary string `json:"summary,omitempty"`
// FullDescription is a more thorough description of the system, drawn
// from documentation, architecture pages, or other technical content when available
FullDescription string `json:"full_description,omitempty"`
}
System describes a single technical system or component that makes up the company's offering (e.g. a web console, public API, mobile app, or storage backend)
type SystemEntry ¶ added in v1.30.0
type SystemEntry struct {
// SystemName is the system's name
SystemName string `json:"system_name"`
// Description is the system's description
Description string `json:"description"`
}
SystemEntry is one of the company's systems, using field names that mirror Openlane's SystemDetail object
type Technology ¶ added in v1.30.0
type Technology struct {
// Name is the technology's display name
Name string `json:"name"`
// URL is the technology's site or product URL, if known
URL string `json:"url,omitempty"`
// Categories are the technology's detected categories
Categories []string `json:"categories,omitempty"`
}
Technology is one detected technology entry in a scan report
type TrustCenterPage ¶
type TrustCenterPage struct {
// HostedBy is the platform or vendor hosting this trust center (e.g.,
// Vanta, Drata, SafeBase, Whistic, Conveyor, TrustArc, OneTrust), or
// "self-hosted" if it appears to be a custom-built page
HostedBy string `json:"hosted_by,omitempty"`
// Frameworks lists compliance frameworks or certifications listed
Frameworks []string `json:"frameworks,omitempty"`
// SOC2Certified indicates whether the trust center claims SOC 2 (Type I or Type II) certification or compliance
SOC2Certified bool `json:"soc2_certified,omitempty"`
// Controls lists individual security or compliance controls or practices listed
Controls []string `json:"controls,omitempty"`
// Documents lists compliance documents or reports listed, each flagged public or gated
Documents []TrustDocument `json:"documents,omitempty"`
// Subprocessors lists third-party vendors or sub-processors mentioned
Subprocessors []string `json:"subprocessors,omitempty"`
}
TrustCenterPage holds structured information extracted from a trust center or trust portal page
type TrustDocument ¶
type TrustDocument struct {
// Name is the document title (e.g., "SOC 2 Type II Report")
Name string `json:"name,omitempty"`
// URL is a direct link to the document, if one is available without requesting access
URL string `json:"url,omitempty"`
// Public indicates the document can be viewed or downloaded without requesting access or signing an NDA
Public bool `json:"public,omitempty"`
}
TrustDocument is a single compliance document or report listed on a trust center
type Vendor ¶ added in v1.30.0
type Vendor struct {
// Name is the vendor's canonical display name
Name string `json:"name"`
// LegalName is the vendor's raw, un-canonicalized legal entity name (e.g. "Cloudflare, Inc"),
// set only when it differs from Name
LegalName string `json:"legal_name,omitempty"`
// URL is the vendor's site or product URL, if known
URL string `json:"url,omitempty"`
// Categories are the vendor's detected categories
Categories []string `json:"categories,omitempty"`
}
Vendor is one detected vendor entry in a scan report