2023-05-24 20:40:45 +02:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
import 'package:adguard_home_manager/services/api_client.dart';
|
2023-05-25 15:06:21 +02:00
|
|
|
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
2023-05-24 20:40:45 +02:00
|
|
|
import 'package:adguard_home_manager/constants/enums.dart';
|
|
|
|
import 'package:adguard_home_manager/models/dns_info.dart';
|
|
|
|
|
|
|
|
class DnsProvider with ChangeNotifier {
|
2023-05-25 15:06:21 +02:00
|
|
|
ServersProvider? _serversProvider;
|
|
|
|
|
|
|
|
update(ServersProvider? provider) {
|
|
|
|
_serversProvider = provider;
|
|
|
|
}
|
|
|
|
|
2023-05-24 20:40:45 +02:00
|
|
|
LoadStatus _loadStatus = LoadStatus.loading;
|
|
|
|
DnsInfo? _dnsInfo;
|
|
|
|
|
|
|
|
LoadStatus get loadStatus {
|
|
|
|
return _loadStatus;
|
|
|
|
}
|
|
|
|
|
|
|
|
DnsInfo? get dnsInfo {
|
|
|
|
return _dnsInfo;
|
|
|
|
}
|
|
|
|
|
|
|
|
void setDnsInfoData(DnsInfo data) {
|
|
|
|
_dnsInfo = data;
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
|
|
|
void setDnsInfoLoadStatus(LoadStatus status, bool notify) {
|
|
|
|
_loadStatus = status;
|
|
|
|
if (notify == true) {
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
}
|
2023-05-25 15:06:21 +02:00
|
|
|
|
|
|
|
Future<bool> fetchDnsData({
|
|
|
|
bool? showLoading
|
|
|
|
}) async {
|
|
|
|
if (showLoading == true) {
|
|
|
|
_loadStatus = LoadStatus.loading;
|
|
|
|
}
|
|
|
|
|
2023-11-20 15:00:07 +01:00
|
|
|
final result = await _serversProvider!.apiClient2!.getDnsInfo();
|
2023-05-25 15:06:21 +02:00
|
|
|
|
2023-11-20 15:00:07 +01:00
|
|
|
if (result.successful == true) {
|
|
|
|
_dnsInfo = result.content as DnsInfo;
|
2023-05-25 15:06:21 +02:00
|
|
|
_loadStatus = LoadStatus.loaded;
|
|
|
|
notifyListeners();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (showLoading == false) {
|
|
|
|
_loadStatus = LoadStatus.loaded;
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
Future<ApiResponse> savePrivateReverseServersConfig(Map<String, dynamic> value) async {
|
|
|
|
final result = await _serversProvider!.apiClient2!.setDnsConfig(
|
2023-05-25 15:06:21 +02:00
|
|
|
data: value
|
|
|
|
);
|
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
if (result.successful == true) {
|
2023-05-25 15:06:21 +02:00
|
|
|
DnsInfo data = dnsInfo!;
|
|
|
|
if (value['local_ptr_upstreams'] != null) {
|
2023-05-29 19:27:53 +02:00
|
|
|
data.localPtrUpstreams = value['local_ptr_upstreams'];
|
2023-05-25 15:06:21 +02:00
|
|
|
}
|
|
|
|
data.usePrivatePtrResolvers = value['use_private_ptr_resolvers'];
|
|
|
|
data.resolveClients = value['resolve_clients'];
|
|
|
|
setDnsInfoData(data);
|
2023-11-19 22:52:40 +01:00
|
|
|
return result;
|
2023-05-25 15:06:21 +02:00
|
|
|
}
|
|
|
|
else {
|
2023-11-19 22:52:40 +01:00
|
|
|
return result;
|
|
|
|
}
|
2023-05-25 15:06:21 +02:00
|
|
|
}
|
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
Future<ApiResponse> saveUpstreamDnsConfig(Map<String, dynamic> value) async {
|
|
|
|
final result = await _serversProvider!.apiClient2!.setDnsConfig(
|
2023-05-25 15:06:21 +02:00
|
|
|
data: value
|
|
|
|
);
|
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
if (result.successful == true) {
|
2023-05-25 15:06:21 +02:00
|
|
|
DnsInfo data = dnsInfo!;
|
|
|
|
data.upstreamDns = List<String>.from(value['upstream_dns']);
|
|
|
|
data.upstreamMode = value['upstream_mode'];
|
|
|
|
setDnsInfoData(data);
|
2023-11-19 22:52:40 +01:00
|
|
|
return result;
|
2023-05-25 15:06:21 +02:00
|
|
|
}
|
|
|
|
else {
|
2023-11-19 22:52:40 +01:00
|
|
|
return result;
|
|
|
|
}
|
2023-05-25 15:06:21 +02:00
|
|
|
}
|
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
Future<ApiResponse> saveBootstrapDnsConfig(Map<String, dynamic> value) async {
|
|
|
|
final result = await _serversProvider!.apiClient2!.setDnsConfig(
|
2023-05-25 15:06:21 +02:00
|
|
|
data: value
|
|
|
|
);
|
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
if (result.successful == true) {
|
2023-05-25 15:06:21 +02:00
|
|
|
DnsInfo data = dnsInfo!;
|
|
|
|
data.bootstrapDns = List<String>.from(value['bootstrap_dns']);
|
|
|
|
setDnsInfoData(data);
|
2023-11-19 22:52:40 +01:00
|
|
|
return result;
|
2023-05-25 15:06:21 +02:00
|
|
|
}
|
|
|
|
else {
|
2023-11-19 22:52:40 +01:00
|
|
|
return result;
|
|
|
|
}
|
2023-05-25 15:06:21 +02:00
|
|
|
}
|
|
|
|
|
2023-12-11 22:03:36 +01:00
|
|
|
Future<ApiResponse> saveFallbackDnsConfig(Map<String, dynamic> value) async {
|
|
|
|
final result = await _serversProvider!.apiClient2!.setDnsConfig(
|
|
|
|
data: value
|
|
|
|
);
|
|
|
|
|
|
|
|
if (result.successful == true) {
|
|
|
|
DnsInfo data = dnsInfo!;
|
2024-01-16 18:25:38 +01:00
|
|
|
data.fallbackDns = List<String>.from(value['fallback_dns']);
|
2023-12-11 22:03:36 +01:00
|
|
|
setDnsInfoData(data);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
Future<ApiResponse> saveCacheCacheConfig(Map<String, dynamic> value) async {
|
|
|
|
final result = await _serversProvider!.apiClient2!.setDnsConfig(
|
2023-05-25 15:06:21 +02:00
|
|
|
data: value
|
|
|
|
);
|
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
if (result.successful == true) {
|
2023-05-25 15:06:21 +02:00
|
|
|
DnsInfo data = dnsInfo!;
|
|
|
|
data.cacheSize = value['cache_size'];
|
|
|
|
data.cacheTtlMin = value['cache_ttl_min'];
|
|
|
|
data.cacheTtlMax = value['cache_ttl_max'];
|
|
|
|
data.cacheOptimistic = value['cache_optimistic'];
|
|
|
|
setDnsInfoData(data);
|
2023-11-19 22:52:40 +01:00
|
|
|
return result;
|
2023-05-25 15:06:21 +02:00
|
|
|
}
|
|
|
|
else {
|
2023-11-19 22:52:40 +01:00
|
|
|
return result;
|
|
|
|
}
|
2023-05-25 15:06:21 +02:00
|
|
|
}
|
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
Future<ApiResponse> saveDnsServerConfig(Map<String, dynamic> value) async {
|
|
|
|
final result = await _serversProvider!.apiClient2!.setDnsConfig(
|
2023-05-25 15:06:21 +02:00
|
|
|
data: value
|
|
|
|
);
|
2024-09-11 22:32:26 +02:00
|
|
|
|
|
|
|
void updateValue(dynamic parameter, dynamic value) {
|
|
|
|
if (value != null) {
|
|
|
|
parameter = value;
|
|
|
|
}
|
|
|
|
}
|
2023-05-25 15:06:21 +02:00
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
if (result.successful == true) {
|
2023-05-25 15:06:21 +02:00
|
|
|
DnsInfo data = dnsInfo!;
|
2024-09-11 22:32:26 +02:00
|
|
|
updateValue(data.ratelimit, value['ratelimit']);
|
|
|
|
updateValue(data.ednsCsEnabled, value['edns_cs_enabled']);
|
|
|
|
updateValue(data.dnssecEnabled, value['dnssec_enabled']);
|
|
|
|
updateValue(data.disableIpv6, value['disable_ipv6']);
|
|
|
|
updateValue(data.blockingMode, value['blocking_mode']);
|
|
|
|
updateValue(data.blockingIpv4, value['blocking_ipv4']);
|
|
|
|
updateValue(data.blockingIpv6, value['blocking_ipv6']);
|
|
|
|
updateValue(data.blockedResponseTtl, value['blocked_response_ttl']);
|
|
|
|
updateValue(data.ratelimitSubnetLenIpv4, value['ratelimit_subnet_len_ipv4']);
|
|
|
|
updateValue(data.ratelimitSubnetLenIpv6, value['ratelimit_subnet_len_ipv6']);
|
|
|
|
updateValue(data.ratelimitWhitelist, value['ratelimit_whitelist']);
|
2023-05-25 15:06:21 +02:00
|
|
|
setDnsInfoData(data);
|
2023-11-19 22:52:40 +01:00
|
|
|
return result;
|
2023-05-25 15:06:21 +02:00
|
|
|
}
|
|
|
|
else {
|
2023-11-19 22:52:40 +01:00
|
|
|
return result;
|
|
|
|
}
|
2023-05-25 15:06:21 +02:00
|
|
|
}
|
2023-05-24 20:40:45 +02:00
|
|
|
}
|