krz/domain-dig

an ios app for DNS & SSL analysis

clone: git clone https://gitbay.org/krz/domain-dig.git

v4.4.1: LookupSnapshot.swift · raw

  1import Foundation
  2
  3struct LookupSnapshot {
  4    let historyEntryID: UUID?
  5    let domain: String
  6    let timestamp: Date
  7    let trackedDomainID: UUID?
  8    let note: String?
  9    let appVersion: String
 10    let resolverDisplayName: String
 11    let resolverURLString: String
 12    let dataSources: [String]
 13    let provenanceBySection: [LookupSectionKind: SectionProvenance]
 14    let availabilityConfidence: ConfidenceLevel?
 15    let ownershipConfidence: ConfidenceLevel?
 16    let subdomainConfidence: ConfidenceLevel?
 17    let emailSecurityConfidence: ConfidenceLevel?
 18    let geolocationConfidence: ConfidenceLevel?
 19    let errorDetails: [LookupSectionKind: InspectionFailure]
 20    let isPartialSnapshot: Bool
 21    let validationIssues: [String]
 22    let totalLookupDurationMs: Int?
 23    let snapshotIndex: Int?
 24    let previousSnapshotID: UUID?
 25    let changeCount: Int
 26    let severitySummary: ChangeSeverity?
 27    let dnsSections: [DNSSection]
 28    let dnsError: String?
 29    let availabilityResult: DomainAvailabilityResult?
 30    let suggestions: [DomainSuggestionResult]
 31    let sslInfo: SSLCertificateInfo?
 32    let sslError: String?
 33    let hstsPreloaded: Bool?
 34    let httpHeaders: [HTTPHeader]
 35    let httpSecurityGrade: String?
 36    let httpStatusCode: Int?
 37    let httpResponseTimeMs: Int?
 38    let httpProtocol: String?
 39    let http3Advertised: Bool
 40    let httpHeadersError: String?
 41    let reachabilityResults: [PortReachability]
 42    let reachabilityError: String?
 43    let ipGeolocation: IPGeolocation?
 44    let ipGeolocationError: String?
 45    let emailSecurity: EmailSecurityResult?
 46    let emailSecurityError: String?
 47    let ownership: DomainOwnership?
 48    let ownershipError: String?
 49    let ownershipHistory: [DomainOwnershipHistoryEvent]
 50    let ownershipHistoryError: String?
 51    let inferredProvider: InferredProviderFingerprint?
 52    let priorProviders: [String]
 53    let domainClassification: DomainClassificationSummary?
 54    let ownershipTransitions: [OwnershipTransitionEvent]
 55    let hostingTransitions: [HostingTransitionEvent]
 56    let subdomainHistory: [SubdomainHistoryEntry]
 57    let riskSignals: [IntelligenceRiskSignal]
 58    let intelligenceTimeline: [IntelligenceTimelineEvent]
 59    let ptrRecord: String?
 60    let ptrError: String?
 61    let redirectChain: [RedirectHop]
 62    let redirectChainError: String?
 63    let subdomains: [DiscoveredSubdomain]
 64    let subdomainsError: String?
 65    let extendedSubdomains: [DiscoveredSubdomain]
 66    let extendedSubdomainsError: String?
 67    let dnsHistory: [DNSHistoryEvent]
 68    let dnsHistoryError: String?
 69    let domainPricing: DomainPricingInsight?
 70    let domainPricingError: String?
 71    let portScanResults: [PortScanResult]
 72    let portScanError: String?
 73    let changeSummary: DomainChangeSummary?
 74    let resultSource: LookupResultSource
 75    let cachedSections: [LookupSectionKind]
 76    let statusMessage: String?
 77
 78    var isLive: Bool {
 79        resultSource == .live
 80    }
 81}
 82
 83extension HistoryEntry {
 84    var snapshot: LookupSnapshot {
 85        LookupSnapshot(
 86            historyEntryID: id,
 87            domain: domain,
 88            timestamp: timestamp,
 89            trackedDomainID: trackedDomainID,
 90            note: note,
 91            appVersion: appVersion,
 92            resolverDisplayName: resolverDisplayName,
 93            resolverURLString: resolverURLString,
 94            dataSources: dataSources,
 95            provenanceBySection: provenanceBySection,
 96            availabilityConfidence: availabilityConfidence,
 97            ownershipConfidence: ownershipConfidence,
 98            subdomainConfidence: subdomainConfidence,
 99            emailSecurityConfidence: emailSecurityConfidence,
100            geolocationConfidence: geolocationConfidence,
101            errorDetails: errorDetails,
102            isPartialSnapshot: isPartialSnapshot,
103            validationIssues: validationIssues,
104            totalLookupDurationMs: totalLookupDurationMs,
105            snapshotIndex: snapshotIndex,
106            previousSnapshotID: previousSnapshotID,
107            changeCount: changeCount,
108            severitySummary: severitySummary,
109            dnsSections: dnsSections,
110            dnsError: nil,
111            availabilityResult: availabilityResult,
112            suggestions: suggestions,
113            sslInfo: sslInfo,
114            sslError: sslError,
115            hstsPreloaded: hstsPreloaded,
116            httpHeaders: httpHeaders,
117            httpSecurityGrade: HTTPSecurityGrade.grade(for: httpHeaders).rawValue,
118            httpStatusCode: nil,
119            httpResponseTimeMs: nil,
120            httpProtocol: nil,
121            http3Advertised: false,
122            httpHeadersError: httpHeadersError,
123            reachabilityResults: reachabilityResults,
124            reachabilityError: reachabilityError,
125            ipGeolocation: ipGeolocation,
126            ipGeolocationError: ipGeolocationError,
127            emailSecurity: emailSecurity,
128            emailSecurityError: emailSecurityError,
129            ownership: ownership,
130            ownershipError: ownershipError,
131            ownershipHistory: ownershipHistory,
132            ownershipHistoryError: ownershipHistoryError,
133            inferredProvider: inferredProvider,
134            priorProviders: priorProviders,
135            domainClassification: domainClassification,
136            ownershipTransitions: ownershipTransitions,
137            hostingTransitions: hostingTransitions,
138            subdomainHistory: subdomainHistory,
139            riskSignals: riskSignals,
140            intelligenceTimeline: intelligenceTimeline,
141            ptrRecord: ptrRecord,
142            ptrError: ptrError,
143            redirectChain: redirectChain,
144            redirectChainError: redirectChainError,
145            subdomains: subdomains,
146            subdomainsError: subdomainsError,
147            extendedSubdomains: extendedSubdomains,
148            extendedSubdomainsError: extendedSubdomainsError,
149            dnsHistory: dnsHistory,
150            dnsHistoryError: dnsHistoryError,
151            domainPricing: domainPricing,
152            domainPricingError: domainPricingError,
153            portScanResults: portScanResults,
154            portScanError: portScanError,
155            changeSummary: changeSummary,
156            resultSource: resultSource,
157            cachedSections: [],
158            statusMessage: nil
159        )
160    }
161}