Commit 49a999885f

49a999885fd23e59555429dbc111e3a3d87fd164

parent: fe83ff502f

Unsigned

cmc <hello@cleberg.net> · 2026-08-08 20:32 UTC

Add CodingKeys for external JSON decodables

Layout: unified · split

DomainDig/DNSLookupService.swift +3 −3
@@ -87,7 +87,7 @@ struct DNSLookupService {
87 } else { 87 } else {
88 value = answer.data.trimmingCharacters(in: CharacterSet(charactersIn: "\"")) 88 value = answer.data.trimmingCharacters(in: CharacterSet(charactersIn: "\""))
89 } 89 }
90 return DNSRecord(value: value, ttl: answer.TTL) 90 return DNSRecord(value: value, ttl: answer.ttl)
91 } 91 }
92 } 92 }
93 93
@@ -202,8 +202,8 @@ struct DNSLookupService {
202 let dnsResponse = try JSONDecoder().decode(CloudflareDNSResponse.self, from: data) 202 let dnsResponse = try JSONDecoder().decode(CloudflareDNSResponse.self, from: data)
203 203
204 return DNSLookupResponse( 204 return DNSLookupResponse(
205 answers: dnsResponse.Answer ?? [], 205 answers: dnsResponse.answer ?? [],
206 authenticatedData: dnsResponse.AD ?? false 206 authenticatedData: dnsResponse.authenticatedData ?? false
207 ) 207 )
208 } 208 }
209 209
DomainDig/DomainViewModel.swift +1 −1
@@ -3564,7 +3564,7 @@ final class DomainViewModel {
3564 if let org = ipGeolocation.org { 3564 if let org = ipGeolocation.org {
3565 rows.append(InfoRowViewData(label: "Org / ISP", value: org, tone: .secondary)) 3565 rows.append(InfoRowViewData(label: "Org / ISP", value: org, tone: .secondary))
3566 } 3566 }
3567 let location = [ipGeolocation.city, ipGeolocation.region, ipGeolocation.country_name].compactMap { $0 }.joined(separator: ", ") 3567 let location = [ipGeolocation.city, ipGeolocation.region, ipGeolocation.countryName].compactMap { $0 }.joined(separator: ", ")
3568 if !location.isEmpty { 3568 if !location.isEmpty {
3569 rows.append(InfoRowViewData(label: "Location", value: location, tone: .secondary)) 3569 rows.append(InfoRowViewData(label: "Location", value: location, tone: .secondary))
3570 } 3570 }
DomainDig/Models.swift +23 −5
@@ -2144,10 +2144,16 @@ struct IPGeolocation: Codable {
2144 let ip: String 2144 let ip: String
2145 let city: String? 2145 let city: String?
2146 let region: String? 2146 let region: String?
2147 let country_name: String? 2147 let countryName: String?
2148 let org: String? 2148 let org: String?
2149 let latitude: Double? 2149 let latitude: Double?
2150 let longitude: Double? 2150 let longitude: Double?
2151
2152 enum CodingKeys: String, CodingKey {
2153 case ip, city, region
2154 case countryName = "country_name"
2155 case org, latitude, longitude
2156 }
2151} 2157}
2152 2158
2153// MARK: - Ownership Models 2159// MARK: - Ownership Models
@@ -2616,14 +2622,26 @@ struct HistoryEntry: Identifiable, Codable {
2616// MARK: - Cloudflare DNS-over-HTTPS Response 2622// MARK: - Cloudflare DNS-over-HTTPS Response
2617 2623
2618struct CloudflareDNSResponse: Decodable { 2624struct CloudflareDNSResponse: Decodable {
2619 let Status: Int 2625 let status: Int
2620 let AD: Bool? 2626 let authenticatedData: Bool?
2621 let Answer: [CloudflareDNSAnswer]? 2627 let answer: [CloudflareDNSAnswer]?
2628
2629 enum CodingKeys: String, CodingKey {
2630 case status = "Status"
2631 case authenticatedData = "AD"
2632 case answer = "Answer"
2633 }
2622 2634
2623 struct CloudflareDNSAnswer: Decodable { 2635 struct CloudflareDNSAnswer: Decodable {
2624 let name: String 2636 let name: String
2625 let type: Int 2637 let type: Int
2626 let TTL: Int 2638 let ttl: Int
2627 let data: String 2639 let data: String
2640
2641 enum CodingKeys: String, CodingKey {
2642 case name, type
2643 case ttl = "TTL"
2644 case data
2645 }
2628 } 2646 }
2629} 2647}
DomainInspectionService.swift +2 −2
@@ -609,10 +609,10 @@ struct DomainInspectionService {
609 609
610 private func confidenceForGeolocation(result: IPGeolocation?) -> ConfidenceLevel { 610 private func confidenceForGeolocation(result: IPGeolocation?) -> ConfidenceLevel {
611 guard let result else { return .low } 611 guard let result else { return .low }
612 if result.city != nil && result.country_name != nil && result.latitude != nil && result.longitude != nil { 612 if result.city != nil && result.countryName != nil && result.latitude != nil && result.longitude != nil {
613 return .high 613 return .high
614 } 614 }
615 if result.country_name != nil || result.org != nil { 615 if result.countryName != nil || result.org != nil {
616 return .medium 616 return .medium
617 } 617 }
618 return .low 618 return .low
DomainReportBuilder.swift +1 −1
@@ -440,7 +440,7 @@ struct DomainReportBuilder {
440 return snapshot.ipGeolocationError ?? "Unavailable" 440 return snapshot.ipGeolocationError ?? "Unavailable"
441 } 441 }
442 442
443 let parts = [geolocation.city, geolocation.region, geolocation.country_name] 443 let parts = [geolocation.city, geolocation.region, geolocation.countryName]
444 .compactMap { $0?.trimmingCharacters(in: .whitespacesAndNewlines) } 444 .compactMap { $0?.trimmingCharacters(in: .whitespacesAndNewlines) }
445 .filter { !$0.isEmpty } 445 .filter { !$0.isEmpty }
446 446