Added blocked response ttl field

This commit is contained in:
Juan Gilsanz Polo 2023-12-11 22:24:24 +01:00
parent 27e0b5152e
commit 304c3aba54
5 changed files with 56 additions and 6 deletions

View file

@ -710,5 +710,8 @@
"fallbackDnsServers": "Fallback DNS servers",
"fallbackDnsServersDescription": "Configure fallback DNS servers",
"fallbackDnsServersInfo": "List of fallback DNS servers used when upstream DNS servers are not responding. The syntax is the same as in the main upstreams field above.",
"noFallbackDnsAdded": "No fallback DNS servers added."
"noFallbackDnsAdded": "No fallback DNS servers added.",
"blockedResponseTtl": "Blocked response TTL",
"blockedResponseTtlDescription": "Specifies for how many seconds the clients should cache a filtered response",
"invalidValue": "Invalid value"
}

View file

@ -710,5 +710,8 @@
"fallbackDnsServers": "Servidores DNS alternativos",
"fallbackDnsServersDescription": "Configura los servidores DNS alternativos",
"fallbackDnsServersInfo": "Lista de servidores DNS alternativos utilizados cuando los servidores DNS de subida no responden. La sintaxis es la misma que en el campo de los principales DNS de subida anterior.",
"noFallbackDnsAdded": "No hay servidores DNS alternativos añadidos."
"noFallbackDnsAdded": "No hay servidores DNS alternativos añadidos.",
"blockedResponseTtl": "Respuesta TTL bloqueada",
"blockedResponseTtlDescription": "Especifica durante cuántos segundos los clientes deben almacenar en cache una respuesta filtrada",
"invalidValue": "Valor no válido"
}

View file

@ -22,6 +22,7 @@ class DnsInfo {
String blockingIpv4;
String blockingIpv6;
List<String> defaultLocalPtrUpstreams;
int? blockedResponseTtl;
DnsInfo({
required this.upstreamDns,
@ -47,6 +48,7 @@ class DnsInfo {
required this.blockingIpv4,
required this.blockingIpv6,
required this.defaultLocalPtrUpstreams,
required this.blockedResponseTtl,
});
factory DnsInfo.fromJson(Map<String, dynamic> json) => DnsInfo(
@ -73,6 +75,7 @@ class DnsInfo {
blockingIpv4: json["blocking_ipv4"],
blockingIpv6: json["blocking_ipv6"],
defaultLocalPtrUpstreams: json["default_local_ptr_upstreams"] != null ? List<String>.from(json["default_local_ptr_upstreams"].map((x) => x)) : [],
blockedResponseTtl: json["blocked_response_ttl"]
);
Map<String, dynamic> toJson() => {
@ -99,5 +102,6 @@ class DnsInfo {
"blocking_ipv4": blockingIpv4,
"blocking_ipv6": blockingIpv6,
"default_local_ptr_upstreams": List<dynamic>.from(defaultLocalPtrUpstreams.map((x) => x)),
"blocked_response_ttl": blockedResponseTtl
};
}

View file

@ -161,6 +161,7 @@ class DnsProvider with ChangeNotifier {
data.blockingMode = value['blocking_mode'];
data.blockingIpv4 = value['blocking_ipv4'];
data.blockingIpv6 = value['blocking_ipv6'];
data.blockedResponseTtl = value['blocked_response_ttl'];
setDnsInfoData(data);
return result;
}

View file

@ -41,6 +41,9 @@ class _DnsServerSettingsScreenState extends State<DnsServerSettingsScreen> {
final TextEditingController ipv6controller = TextEditingController();
String? ipv6error;
final _ttlController = TextEditingController();
String? _ttlError;
bool isDataValid = false;
void validateIpv4(String value) {
@ -90,7 +93,8 @@ class _DnsServerSettingsScreenState extends State<DnsServerSettingsScreen> {
ipv6error == null
)
) == true &&
ednsIpError == null
ednsIpError == null &&
_ttlError == null
) {
setState(() => isDataValid = true);
}
@ -99,6 +103,17 @@ class _DnsServerSettingsScreenState extends State<DnsServerSettingsScreen> {
}
}
void validateNumber(String value) {
final regex = RegExp(r'^(\d)+$');
if (regex.hasMatch(value) == true) {
setState(() => _ttlError = null);
}
else {
setState(() => _ttlError = AppLocalizations.of(context)!.invalidValue);
}
validateData();
}
@override
void initState() {
final dnsProvider = Provider.of<DnsProvider>(context, listen: false);
@ -115,6 +130,9 @@ class _DnsServerSettingsScreenState extends State<DnsServerSettingsScreen> {
ipv4controller.text = dnsProvider.dnsInfo!.blockingIpv4;
ipv6controller.text = dnsProvider.dnsInfo!.blockingIpv6;
isDataValid = true;
_ttlController.text = dnsProvider.dnsInfo!.blockedResponseTtl != null
? dnsProvider.dnsInfo!.blockedResponseTtl.toString()
: "";
super.initState();
}
@ -137,7 +155,8 @@ class _DnsServerSettingsScreenState extends State<DnsServerSettingsScreen> {
"disable_ipv6": disableIpv6Resolving,
"blocking_mode": blockingMode,
"blocking_ipv4": ipv4controller.text,
"blocking_ipv6": ipv6controller.text
"blocking_ipv6": ipv6controller.text,
"blocked_response_ttl": int.parse(_ttlController.text)
});
processModal.close();
@ -392,8 +411,28 @@ class _DnsServerSettingsScreenState extends State<DnsServerSettingsScreen> {
keyboardType: TextInputType.number,
),
),
const SizedBox(height: 30)
]
const SizedBox(height: 30),
],
Padding(
padding: const EdgeInsets.all(16),
child: TextFormField(
controller: _ttlController,
onChanged: validateNumber,
decoration: InputDecoration(
prefixIcon: const Icon(Icons.timer_rounded),
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(
Radius.circular(10)
)
),
errorText: _ttlError,
labelText: AppLocalizations.of(context)!.blockedResponseTtl,
helperText: AppLocalizations.of(context)!.blockedResponseTtlDescription,
helperMaxLines: 2,
),
keyboardType: TextInputType.number,
),
),
],
),
),