import '../../core/dns_resolver.dart'; import 'settings_group.dart'; /// 약속 (설정 A): 환경 설정 > 네트워크 · DNS (사용자 요청 10/10) - 자기 키 (이름 · 처음 값 · 읽기 · 쓰기) 를 스스로 갖는다. /// 설정 하나를 더할 때는 이 파일만 고친다. 저장 파일의 키 이름은 예전 그대로 (평평한 키) class NetworkSettings implements SettingsGroup { /// 'system' 기기 DNS (끄기) · 'custom' 직접 지정 (기본) · 'doh' DNS over HTTPS String mode = DnsConfig.defaultMode; String primary = DnsConfig.defaultPrimary; String secondary = DnsConfig.defaultSecondary; String dohUrl = DnsConfig.defaultDohUrl; DnsConfig get config => DnsConfig(mode: mode, primary: primary, secondary: secondary, dohUrl: dohUrl); @override void write(Map j, {required bool plainSecrets}) { j['dnsMode'] = mode; j['dnsPrimary'] = primary; j['dnsSecondary'] = secondary; j['dnsDohUrl'] = dohUrl; } @override void read(Map j) { // 값이 없거나 틀리면 처음 값 (사용자가 정한 기본: 직접 지정 8.8.8.8 · 8.8.4.4). 보조는 비워 둘 수 있다 mode = DnsConfig.modes.contains(j['dnsMode']) ? j['dnsMode'] as String : DnsConfig.defaultMode; primary = j['dnsPrimary'] is String && parseDnsServer(j['dnsPrimary'] as String) != null ? (j['dnsPrimary'] as String).trim() : DnsConfig.defaultPrimary; secondary = j['dnsSecondary'] is String ? (parseDnsServer(j['dnsSecondary'] as String) != null || (j['dnsSecondary'] as String).trim().isEmpty ? (j['dnsSecondary'] as String).trim() : DnsConfig.defaultSecondary) : DnsConfig.defaultSecondary; dohUrl = j['dnsDohUrl'] is String && isValidDohUrl(j['dnsDohUrl'] as String) ? (j['dnsDohUrl'] as String).trim() : DnsConfig.defaultDohUrl; } }