Added clients allowed and blocked lists

This commit is contained in:
Juan Gilsanz Polo 2022-09-29 00:13:54 +02:00
parent d4a792e5c8
commit f678401fa8
7 changed files with 96 additions and 26 deletions

View file

@ -80,5 +80,6 @@
"createdBy": "Created by",
"clients": "Clients",
"allowed": "Allowed",
"blocked": "Blocked"
"blocked": "Blocked",
"noClientsList": "There are no clients on this list"
}

View file

@ -80,5 +80,6 @@
"createdBy": "Creado por",
"clients": "Clientes",
"allowed": "Permitidos",
"blocked": "Bloqueados"
"blocked": "Bloqueados",
"noClientsList": "No hay clientes en esta lista"
}

View file

@ -1,5 +1,7 @@
import 'dart:convert';
import 'package:adguard_home_manager/models/clients_allowed_blocked.dart';
class Clients {
int loadStatus;
ClientsData? data;
@ -18,11 +20,13 @@ class ClientsData {
final List<Client> clients;
final List<AutoClient> autoClientsData;
final List<String> supportedTags;
ClientsAllowedBlocked? clientsAllowedBlocked;
ClientsData({
required this.clients,
required this.autoClientsData,
required this.supportedTags,
this.clientsAllowedBlocked
});
factory ClientsData.fromJson(Map<String, dynamic> json) => ClientsData(

View file

@ -0,0 +1,29 @@
import 'dart:convert';
ClientsAllowedBlocked allowedBlockedFromJson(String str) => ClientsAllowedBlocked.fromJson(json.decode(str));
String allowedBlockedToJson(ClientsAllowedBlocked data) => json.encode(data.toJson());
class ClientsAllowedBlocked {
ClientsAllowedBlocked({
required this.allowedClients,
required this.disallowedClients,
required this.blockedHosts,
});
final List<String> allowedClients;
final List<String> disallowedClients;
final List<String> blockedHosts;
factory ClientsAllowedBlocked.fromJson(Map<String, dynamic> json) => ClientsAllowedBlocked(
allowedClients: List<String>.from(json["allowed_clients"].map((x) => x)),
disallowedClients: List<String>.from(json["disallowed_clients"].map((x) => x)),
blockedHosts: List<String>.from(json["blocked_hosts"].map((x) => x)),
);
Map<String, dynamic> toJson() => {
"allowed_clients": List<dynamic>.from(allowedClients.map((x) => x)),
"disallowed_clients": List<dynamic>.from(disallowedClients.map((x) => x)),
"blocked_hosts": List<dynamic>.from(blockedHosts.map((x) => x)),
};
}

View file

@ -59,6 +59,10 @@ class _ClientsWidgetState extends State<ClientsWidget> {
super.initState();
}
List<AutoClient> generateClientsList(List<AutoClient> clients, List<String> ips) {
return clients.where((client) => ips.contains(client.ip)).toList();
}
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
@ -121,8 +125,18 @@ class _ClientsWidgetState extends State<ClientsWidget> {
ClientsList(
data: serversProvider.clients.data!.autoClientsData,
),
Container(),
Container()
ClientsList(
data: generateClientsList(
serversProvider.clients.data!.autoClientsData,
serversProvider.clients.data!.clientsAllowedBlocked!.allowedClients,
)
),
ClientsList(
data: generateClientsList(
serversProvider.clients.data!.autoClientsData,
serversProvider.clients.data!.clientsAllowedBlocked!.disallowedClients,
)
),
],
)
)

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/models/clients.dart';
@ -12,6 +13,7 @@ class ClientsList extends StatelessWidget {
@override
Widget build(BuildContext context) {
if (data.isNotEmpty) {
return ListView.builder(
padding: const EdgeInsets.only(top: 0),
itemCount: data.length,
@ -30,4 +32,20 @@ class ClientsList extends StatelessWidget {
)
);
}
else {
return SizedBox(
width: double.maxFinite,
child: Center(
child: Text(
AppLocalizations.of(context)!.noClientsList,
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 24,
color: Colors.grey
),
),
),
);
}
}
}

View file

@ -8,6 +8,7 @@ import 'package:http/http.dart' as http;
import 'package:adguard_home_manager/models/server_status.dart';
import 'package:adguard_home_manager/models/clients.dart';
import 'package:adguard_home_manager/models/clients_allowed_blocked.dart';
import 'package:adguard_home_manager/models/server.dart';
Future<http.Response> getRequest({
@ -246,15 +247,17 @@ Future updateGeneralProtection(Server server, bool enable) async {
Future getClients(Server server) async {
try {
final result = await getRequest(
urlPath: '/clients',
server: server,
);
final result = await Future.wait([
getRequest(urlPath: '/clients', server: server),
getRequest(urlPath: '/access/list', server: server),
]);
if (result.statusCode == 200) {
if (result[0].statusCode == 200 && result[1].statusCode == 200) {
final clients = ClientsData.fromJson(jsonDecode(result[0].body));
clients.clientsAllowedBlocked = ClientsAllowedBlocked.fromJson(jsonDecode(result[1].body));
return {
'result': 'success',
'data': ClientsData.fromJson(jsonDecode(result.body))
'data': clients
};
}
else {