krz/domain-dig

an ios app for DNS & SSL analysis

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

v4.8.2: 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 reputation: DomainReputationResult?
 72    let reputationError: String?
 73    let portScanResults: [PortScanResult]
 74    let portScanError: String?
 75    let changeSummary: DomainChangeSummary?
 76    let resultSource: LookupResultSource
 77    let cachedSections: [LookupSectionKind]
 78    let statusMessage: String?
 79
 80    var isLive: Bool {
 81        resultSource == .live
 82    }
 83}
 84
 85extension HistoryEntry {
 86    var snapshot: LookupSnapshot {
 87        LookupSnapshot(
 88            historyEntryID: id,
 89            domain: domain,
 90            timestamp: timestamp,
 91            trackedDomainID: trackedDomainID,
 92            note: note,
 93            appVersion: appVersion,
 94            resolverDisplayName: resolverDisplayName,
 95            resolverURLString: resolverURLString,
 96            dataSources: dataSources,
 97            provenanceBySection: provenanceBySection,
 98            availabilityConfidence: availabilityConfidence,
 99            ownershipConfidence: ownershipConfidence,
100            subdomainConfidence: subdomainConfidence,
101            emailSecurityConfidence: emailSecurityConfidence,
102            geolocationConfidence: geolocationConfidence,
103            errorDetails: errorDetails,
104            isPartialSnapshot: isPartialSnapshot,
105            validationIssues: validationIssues,
106            totalLookupDurationMs: totalLookupDurationMs,
107            snapshotIndex: snapshotIndex,
108            previousSnapshotID: previousSnapshotID,
109            changeCount: changeCount,
110            severitySummary: severitySummary,
111            dnsSections: dnsSections,
112            dnsError: nil,
113            availabilityResult: availabilityResult,
114            suggestions: suggestions,
115            sslInfo: sslInfo,
116            sslError: sslError,
117            hstsPreloaded: hstsPreloaded,
118            httpHeaders: httpHeaders,
119            httpSecurityGrade: HTTPSecurityGrade.grade(for: httpHeaders).rawValue,
120            httpStatusCode: nil,
121            httpResponseTimeMs: nil,
122            httpProtocol: nil,
123            http3Advertised: false,
124            httpHeadersError: httpHeadersError,
125            reachabilityResults: reachabilityResults,
126            reachabilityError: reachabilityError,
127            ipGeolocation: ipGeolocation,
128            ipGeolocationError: ipGeolocationError,
129            emailSecurity: emailSecurity,
130            emailSecurityError: emailSecurityError,
131            ownership: ownership,
132            ownershipError: ownershipError,
133            ownershipHistory: ownershipHistory,
134            ownershipHistoryError: ownershipHistoryError,
135            inferredProvider: inferredProvider,
136            priorProviders: priorProviders,
137            domainClassification: domainClassification,
138            ownershipTransitions: ownershipTransitions,
139            hostingTransitions: hostingTransitions,
140            subdomainHistory: subdomainHistory,
141            riskSignals: riskSignals,
142            intelligenceTimeline: intelligenceTimeline,
143            ptrRecord: ptrRecord,
144            ptrError: ptrError,
145            redirectChain: redirectChain,
146            redirectChainError: redirectChainError,
147            subdomains: subdomains,
148            subdomainsError: subdomainsError,
149            extendedSubdomains: extendedSubdomains,
150            extendedSubdomainsError: extendedSubdomainsError,
151            dnsHistory: dnsHistory,
152            dnsHistoryError: dnsHistoryError,
153            domainPricing: domainPricing,
154            domainPricingError: domainPricingError,
155            reputation: reputation,
156            reputationError: reputationError,
157            portScanResults: portScanResults,
158            portScanError: portScanError,
159            changeSummary: changeSummary,
160            resultSource: resultSource,
161            cachedSections: [],
162            statusMessage: nil
163        )
164    }
165}