44 lines
1.9 KiB
Dart
44 lines
1.9 KiB
Dart
|
|
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<String, Object?> j, {required bool plainSecrets}) {
|
|
j['dnsMode'] = mode;
|
|
j['dnsPrimary'] = primary;
|
|
j['dnsSecondary'] = secondary;
|
|
j['dnsDohUrl'] = dohUrl;
|
|
}
|
|
|
|
@override
|
|
void read(Map<String, dynamic> 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;
|
|
}
|
|
}
|