summaryrefslogtreecommitdiff
path: root/LookupSnapshot.swift
diff options
context:
space:
mode:
Diffstat (limited to 'LookupSnapshot.swift')
-rw-r--r--LookupSnapshot.swift89
1 files changed, 89 insertions, 0 deletions
diff --git a/LookupSnapshot.swift b/LookupSnapshot.swift
new file mode 100644
index 0000000..3a35eff
--- /dev/null
+++ b/LookupSnapshot.swift
@@ -0,0 +1,89 @@
+import Foundation
+
+struct LookupSnapshot {
+ let historyEntryID: UUID?
+ let domain: String
+ let timestamp: Date
+ let trackedDomainID: UUID?
+ let resolverDisplayName: String
+ let resolverURLString: String
+ let totalLookupDurationMs: Int?
+ let dnsSections: [DNSSection]
+ let dnsError: String?
+ let availabilityResult: DomainAvailabilityResult?
+ let suggestions: [DomainSuggestionResult]
+ let sslInfo: SSLCertificateInfo?
+ let sslError: String?
+ let hstsPreloaded: Bool?
+ let httpHeaders: [HTTPHeader]
+ let httpSecurityGrade: String?
+ let httpStatusCode: Int?
+ let httpResponseTimeMs: Int?
+ let httpProtocol: String?
+ let http3Advertised: Bool
+ let httpHeadersError: String?
+ let reachabilityResults: [PortReachability]
+ let reachabilityError: String?
+ let ipGeolocation: IPGeolocation?
+ let ipGeolocationError: String?
+ let emailSecurity: EmailSecurityResult?
+ let emailSecurityError: String?
+ let ownership: DomainOwnership?
+ let ownershipError: String?
+ let ptrRecord: String?
+ let ptrError: String?
+ let redirectChain: [RedirectHop]
+ let redirectChainError: String?
+ let subdomains: [DiscoveredSubdomain]
+ let subdomainsError: String?
+ let portScanResults: [PortScanResult]
+ let portScanError: String?
+ let changeSummary: DomainChangeSummary?
+ let isLive: Bool
+}
+
+extension HistoryEntry {
+ var snapshot: LookupSnapshot {
+ LookupSnapshot(
+ historyEntryID: id,
+ domain: domain,
+ timestamp: timestamp,
+ trackedDomainID: trackedDomainID,
+ resolverDisplayName: resolverDisplayName,
+ resolverURLString: resolverURLString,
+ totalLookupDurationMs: totalLookupDurationMs,
+ dnsSections: dnsSections,
+ dnsError: nil,
+ availabilityResult: availabilityResult,
+ suggestions: suggestions,
+ sslInfo: sslInfo,
+ sslError: sslError,
+ hstsPreloaded: hstsPreloaded,
+ httpHeaders: httpHeaders,
+ httpSecurityGrade: HTTPSecurityGrade.grade(for: httpHeaders).rawValue,
+ httpStatusCode: nil,
+ httpResponseTimeMs: nil,
+ httpProtocol: nil,
+ http3Advertised: false,
+ httpHeadersError: httpHeadersError,
+ reachabilityResults: reachabilityResults,
+ reachabilityError: reachabilityError,
+ ipGeolocation: ipGeolocation,
+ ipGeolocationError: ipGeolocationError,
+ emailSecurity: emailSecurity,
+ emailSecurityError: emailSecurityError,
+ ownership: ownership,
+ ownershipError: ownershipError,
+ ptrRecord: ptrRecord,
+ ptrError: ptrError,
+ redirectChain: redirectChain,
+ redirectChainError: redirectChainError,
+ subdomains: subdomains,
+ subdomainsError: subdomainsError,
+ portScanResults: portScanResults,
+ portScanError: portScanError,
+ changeSummary: changeSummary,
+ isLive: false
+ )
+ }
+}