Added get server status

This commit is contained in:
Juan Gilsanz Polo 2022-09-27 12:43:25 +02:00
parent 97e4fea015
commit 4ab8ff760c
5 changed files with 81 additions and 23 deletions

View file

@ -0,0 +1,28 @@
import 'package:adguard_home_manager/models/dns_statistics.dart';
class ServerStatus {
final DnsStatistics stats;
final bool generalEnabled;
final bool filteringEnabled;
final bool safeSearchEnabled;
final bool safeBrowsingEnabled;
final bool parentalControlEnabled;
const ServerStatus({
required this.stats,
required this.generalEnabled,
required this.filteringEnabled,
required this.safeSearchEnabled,
required this.safeBrowsingEnabled,
required this.parentalControlEnabled
});
factory ServerStatus.fromJson(Map<String, dynamic> json) => ServerStatus(
stats: DnsStatistics.fromJson(json['stats']),
generalEnabled: json['generalEnabled']['protection_enabled'],
filteringEnabled: json['filteringEnabled']['enabled'],
safeSearchEnabled: json['safeSearchEnabled']['enabled'],
safeBrowsingEnabled: json['safeBrowsingEnabled']['enabled'],
parentalControlEnabled: json['parentalControlEnabled']['enabled']
);
}

View file

@ -1,4 +1,5 @@
import 'package:adguard_home_manager/models/dns_statistics.dart'; import 'package:adguard_home_manager/models/dns_statistics.dart';
import 'package:adguard_home_manager/models/server_status.dart';
import 'package:adguard_home_manager/services/http_requests.dart'; import 'package:adguard_home_manager/services/http_requests.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart'; import 'package:sqflite/sqflite.dart';
@ -12,7 +13,7 @@ class ServersProvider with ChangeNotifier {
List<Server> _serversList = []; List<Server> _serversList = [];
Server? _selectedServer; Server? _selectedServer;
bool? _isServerConnected; bool? _isServerConnected;
DnsStatistics? _dnsStatistics; ServerStatus? _serverStatus;
List<Server> get serversList { List<Server> get serversList {
return _serversList; return _serversList;
@ -26,8 +27,8 @@ class ServersProvider with ChangeNotifier {
return _isServerConnected; return _isServerConnected;
} }
DnsStatistics? get dnsStatistics { ServerStatus? get serverStatus {
return _dnsStatistics; return _serverStatus;
} }
void setDbInstance(Database db) { void setDbInstance(Database db) {
@ -49,8 +50,8 @@ class ServersProvider with ChangeNotifier {
notifyListeners(); notifyListeners();
} }
void setDnsStatistics(DnsStatistics data) { void setServerStatus(ServerStatus data) {
_dnsStatistics = data; _serverStatus = data;
notifyListeners(); notifyListeners();
} }
@ -208,9 +209,9 @@ class ServersProvider with ChangeNotifier {
_serversList.add(serverObj); _serversList.add(serverObj);
if (convertFromIntToBool(server['defaultServer']) == true) { if (convertFromIntToBool(server['defaultServer']) == true) {
_selectedServer = serverObj; _selectedServer = serverObj;
final dnsStatistics = await getDnsStatistics(serverObj); final serverStatus = await getServerStatus(serverObj);
if (dnsStatistics['result'] == 'success') { if (serverStatus['result'] == 'success') {
_dnsStatistics = dnsStatistics['data']; _serverStatus = serverStatus['data'];
_isServerConnected = true; _isServerConnected = true;
} }
else { else {

View file

@ -6,9 +6,19 @@ import 'dart:io';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:adguard_home_manager/models/server_status.dart';
import 'package:adguard_home_manager/models/dns_statistics.dart'; import 'package:adguard_home_manager/models/dns_statistics.dart';
import 'package:adguard_home_manager/models/server.dart'; import 'package:adguard_home_manager/models/server.dart';
Future<http.Response> getRequest(String urlPath, Server server) {
return http.get(
Uri.parse("${server.connectionMethod}://${server.domain}${server.path ?? ""}${server.port != null ? ':${server.port}' : ""}/control$urlPath"),
headers: {
'Authorization': 'Basic ${server.authToken}'
}
);
}
Future login(Server server) async { Future login(Server server) async {
try { try {
final result = await http.post( final result = await http.post(
@ -47,18 +57,37 @@ Future login(Server server) async {
} }
} }
Future getDnsStatistics(Server server) async { Future getServerStatus(Server server) async {
try { try {
final result = await http.get( final result = await Future.wait([
Uri.parse("${server.connectionMethod}://${server.domain}${server.path ?? ""}${server.port != null ? ':${server.port}' : ""}/control/stats"), getRequest('/stats', server),
headers: { getRequest('/status', server),
'Authorization': 'Basic ${server.authToken}' getRequest('/filtering/status', server),
} getRequest('/safesearch/status', server),
); getRequest('/safebrowsing/status', server),
if (result.statusCode == 200) { getRequest('/parental/status', server),
]);
if (
result[0].statusCode == 200 &&
result[1].statusCode == 200 &&
result[2].statusCode == 200 &&
result[3].statusCode == 200 &&
result[4].statusCode == 200 &&
result[5].statusCode == 200
) {
final Map<String, dynamic> mappedData = {
'stats': jsonDecode(result[0].body),
'generalEnabled': jsonDecode(result[1].body),
'filteringEnabled': jsonDecode(result[2].body),
'safeSearchEnabled': jsonDecode(result[3].body),
'safeBrowsingEnabled': jsonDecode(result[4].body),
'parentalControlEnabled': jsonDecode(result[5].body),
};
return { return {
'result': 'success', 'result': 'success',
'data': DnsStatistics.fromJson(jsonDecode(result.body)) 'data': ServerStatus.fromJson(mappedData)
}; };
} }
else { else {

View file

@ -225,9 +225,9 @@ class _AddServerModalState extends State<AddServerModal> {
serverObj.authToken = encodeBase64UserPass(serverObj.user, serverObj.password); serverObj.authToken = encodeBase64UserPass(serverObj.user, serverObj.password);
final serverCreated = await serversProvider.createServer(serverObj); final serverCreated = await serversProvider.createServer(serverObj);
if (serverCreated == true) { if (serverCreated == true) {
final dnsStatistics = await getDnsStatistics(serverObj); final serverStatus = await getServerStatus(serverObj);
if (dnsStatistics['result'] == 'success') { if (serverStatus['result'] == 'success') {
serversProvider.setDnsStatistics(dnsStatistics['data']); serversProvider.setServerStatus(serverStatus['data']);
serversProvider.setIsServerConnected(true); serversProvider.setIsServerConnected(true);
} }
else { else {

View file

@ -62,9 +62,9 @@ class ServersList extends StatelessWidget {
if (result['result'] == 'success') { if (result['result'] == 'success') {
serversProvider.setSelectedServer(server); serversProvider.setSelectedServer(server);
final dnsStatistics = await getDnsStatistics(server); final serverStatus = await getServerStatus(server);
if (dnsStatistics['result'] == 'success') { if (serverStatus['result'] == 'success') {
serversProvider.setDnsStatistics(dnsStatistics['data']); serversProvider.setServerStatus(serverStatus['data']);
serversProvider.setIsServerConnected(true); serversProvider.setIsServerConnected(true);
} }
else { else {